diff --git a/modules/generators/content/password_file/secgen_local/local.rb b/modules/generators/content/password_file/secgen_local/local.rb index 9fe4c108b..73426bdaf 100644 --- a/modules/generators/content/password_file/secgen_local/local.rb +++ b/modules/generators/content/password_file/secgen_local/local.rb @@ -4,19 +4,32 @@ require 'erb' require 'fileutils' class PasswordFileGenerator < StringGenerator attr_accessor :website_sample - attr_accessor :username_sample + attr_accessor :user_list attr_accessor :pass_list + attr_accessor :malicious + attr_accessor :benign + attr_accessor :mal_website_lines + attr_accessor :website_lines LOCAL_DIR = File.expand_path('../../',__FILE__) INTERESTS_DIR = "../../../../../lib/resources/interests" TEMPLATE_PATH = "#{LOCAL_DIR}/templates/password_file.md.erb" - + MALICIOUS_PATH = "#{INTERESTS_DIR}/malicious/" + BENIGN_PATH = "#{INTERESTS_DIR}/benign/" def initialize super self.pass_list = Array.new + self.user_list = Array.new + self.malicious = '' + self.benign = '' + self.mal_website_lines = Array.new + self.website_lines = Array.new end def get_options_array - super + [['--passwords', GetoptLong::REQUIRED_ARGUMENT]] + super + [['--passwords', GetoptLong::REQUIRED_ARGUMENT], + ['--usernames', GetoptLong::REQUIRED_ARGUMENT], + ['--benign', GetoptLong::REQUIRED_ARGUMENT], + ['--malicious', GetoptLong::OPTIONAL_ARGUMENT]] end def process_options(opt, arg) @@ -25,35 +38,41 @@ class PasswordFileGenerator < StringGenerator when '--passwords' arr = arg.split(',', -1) arr.each{ |pass| - self.pass_list << pass.strip! + self.pass_list << pass.delete(' ') } + when '--usernames' + arr = arg.split(',', -1) + arr.each{ |user| + self.user_list << user.delete(' ') + } + when '--benign' + self.benign << arg; + when '--malicious' + self.malicious << arg; end end def generate - random_interest = Dir.glob(File.join("#{INTERESTS_DIR}/benign/", '*')).select { |f| File.directory? f }.sample - malicious_interest = Dir.glob(File.join("#{INTERESTS_DIR}/malicious/", '*')).select { |f| File.directory? f}.sample + if self.malicious != "" + malicious_interest = "#{MALICIOUS_PATH}#{self.malicious}" + self.mal_website_lines = File.readlines("#{malicious_interest}/websites").map(&:strip) + end + random_interest = "#{BENIGN_PATH}#{self.benign}" - website_lines = File.readlines("#{random_interest}/websites").map(&:strip) + self.website_lines = File.readlines("#{random_interest}/websites").map(&:strip) - mal_website_lines = File.readlines("#{malicious_interest}/websites").map(&:strip) - - arrayLength = self.pass_list.length() - pass_array = File.readlines('../../../../../lib/resources/wordlists/10_million_password_list_top_100') - self.website_sample = website_lines.sample(5) - self.website_sample << mal_website_lines.sample(5) + passLength = self.pass_list.length() + userLength = self.user_list.length() + self.website_sample = website_lines.sample(10) + self.website_sample << mal_website_lines.sample(10) + self.website_sample = self.website_sample.flatten self.website_sample = self.website_sample.shuffle() - username_array = File.readlines('../../../../../lib/resources/wordlists/mythical_creatures') - self.username_sample = username_array.sample(5) - - if arrayLength == 0 - self.pass_list = pass_array.sample(10) - elsif arrayLength < 10 - while self.pass_list.length() < 10 - self.pass_list << pass_array.sample(1) - end + + if passLength == 0 + warn "Empty Array" + exit 1 end template_out = ERB.new(File.read(TEMPLATE_PATH), 0, '<>-') diff --git a/modules/generators/content/password_file/secgen_metadata.xml b/modules/generators/content/password_file/secgen_metadata.xml index ef9754be0..7c96cf702 100644 --- a/modules/generators/content/password_file/secgen_metadata.xml +++ b/modules/generators/content/password_file/secgen_metadata.xml @@ -7,13 +7,16 @@ Password List File Generator Jack Biggs MIT - Creates a file in whcih login are contained for 10 websites. + Creates a file in which logins are contained for multiple websites. string_generator local_calculation linux - password1 + passwords + usernames + benign + malicious generated_strings diff --git a/modules/generators/content/password_file/templates/password_file.md.erb b/modules/generators/content/password_file/templates/password_file.md.erb index d9756d30d..8d565f67c 100644 --- a/modules/generators/content/password_file/templates/password_file.md.erb +++ b/modules/generators/content/password_file/templates/password_file.md.erb @@ -1,14 +1,13 @@ # Password list <% - website_count = 1 - website_sample.each { |wsite| + website_count = 0 + pass_list.each { |pass| %> -## <%= wsite %> -### Username: <%= username_sample[website_count] %> -### Password: <%= pass_list[rand(1..10)] %> +## <%= website_sample[website_count] %> +### Username: <%= user_list[website_count] %> +### Password: <%= pass %> <% website_count += 1 %> <% } %> -