From cbe33caeef64dd7ffb234e4c032a2117a48b9266 Mon Sep 17 00:00:00 2001 From: erwanlr Date: Sat, 13 Sep 2014 13:57:45 +0200 Subject: [PATCH] Removes the ListGenerator plugin from WPStools --- .../plugins/list_generator/generate_list.rb | 114 ------------------ .../list_generator/list_generator_plugin.rb | 53 -------- .../plugins/list_generator/svn_parser.rb | 31 ----- lib/wpstools/wpstools_helper.rb | 15 --- .../list_generator/generate_list_spec.rb | 5 - .../plugins/list_generator/svn_parser_spec.rb | 5 - spec/lib/wpstools/wpstools_helper.rb | 2 - wpstools.rb | 1 - 8 files changed, 226 deletions(-) delete mode 100644 lib/wpstools/plugins/list_generator/generate_list.rb delete mode 100644 lib/wpstools/plugins/list_generator/list_generator_plugin.rb delete mode 100644 lib/wpstools/plugins/list_generator/svn_parser.rb delete mode 100644 spec/lib/wpstools/plugins/list_generator/generate_list_spec.rb delete mode 100644 spec/lib/wpstools/plugins/list_generator/svn_parser_spec.rb diff --git a/lib/wpstools/plugins/list_generator/generate_list.rb b/lib/wpstools/plugins/list_generator/generate_list.rb deleted file mode 100644 index bc15678a..00000000 --- a/lib/wpstools/plugins/list_generator/generate_list.rb +++ /dev/null @@ -1,114 +0,0 @@ -# encoding: UTF-8 - -# This tool generates a list to use for plugin and theme enumeration -class GenerateList - - attr_accessor :verbose - - # type = themes | plugins - def initialize(type, verbose) - if type =~ /plugins/i - @type = 'plugin' - @svn_url = 'http://plugins.svn.wordpress.org/' - @popular_url = 'http://wordpress.org/plugins/browse/popular/' - @popular_regex = %r{

.+

}i - elsif type =~ /themes/i - @type = 'theme' - @svn_url = 'http://themes.svn.wordpress.org/' - @popular_url = 'http://wordpress.org/themes/browse/popular/' - @popular_regex = %r{

.+

}i - else - raise "Type #{type} not defined" - end - @verbose = verbose - @browser = Browser.instance(request_timeout: 20000, connect_timeout: 20000, max_threads: 1, cache_ttl: 0) - end - - def set_file_name(type) - case @type - when 'plugin' - case type - when :full - @file_name = PLUGINS_FULL_FILE - when :popular - @file_name = PLUGINS_FILE - else - raise 'Unknown type' - end - when 'theme' - case type - when :full - @file_name = THEMES_FULL_FILE - when :popular - @file_name = THEMES_FILE - else - raise 'Unknown type' - end - else - raise "Unknown type #@type" - end - end - - def generate_full_list - set_file_name(:full) - items = SvnParser.new(@svn_url).parse - save items - end - - def generate_popular_list(pages) - set_file_name(:popular) - items = get_popular_items(pages) - save items - end - - # Send a HTTP request to the WordPress most popular theme or plugin webpage - # parse the response for the names. - def get_popular_items(pages) - found_items = [] - page_count = 1 - retries = 0 - - (1...(pages.to_i + 1)).each do |page| - # First page has another URL - url = (page == 1) ? @popular_url : @popular_url + 'page/' + page.to_s + '/' - puts "[+] Parsing page #{page_count}" if @verbose - code = 0 - - while code != 200 && retries <= 3 - puts red("[!] Retrying request for page #{page} (Code: #{code})") unless code == 0 - - request = @browser.forge_request(url) - response = request.run - code = response.code - - sleep(5) unless code == 200 - retries += 1 - end - - page_count += 1 - found = 0 - - response.body.scan(@popular_regex).each do |item| - found_items << item[0] - found = found + 1 - end - - retries = 0 - puts "[+] Found #{found} items on page #{page}" if @verbose - end - - found_items.sort! - found_items.uniq - end - - # Save the file - def save(items) - items.sort! - items.uniq! - - puts "[*] We have parsed #{items.length} #{@type}s" - File.open(@file_name, 'w') { |f| f.puts(items) } - puts "New #@file_name file created" - end - -end diff --git a/lib/wpstools/plugins/list_generator/list_generator_plugin.rb b/lib/wpstools/plugins/list_generator/list_generator_plugin.rb deleted file mode 100644 index c2b08658..00000000 --- a/lib/wpstools/plugins/list_generator/list_generator_plugin.rb +++ /dev/null @@ -1,53 +0,0 @@ -# encoding: UTF-8 - -class ListGeneratorPlugin < Plugin - - def initialize - super(author: 'WPScanTeam - @FireFart') - - register_options( - ['--generate-plugin-list [NUMBER_OF_PAGES]', '--gpl', Integer, 'Generate a new data/plugins.txt file. (supply number of *pages* to parse, default : 150)'], - ['--generate-full-plugin-list', '--gfpl', 'Generate a new full data/plugins.txt file'], - - ['--generate-theme-list [NUMBER_OF_PAGES]', '--gtl', Integer, 'Generate a new data/themes.txt file. (supply number of *pages* to parse, default : 20)'], - ['--generate-full-theme-list', '--gftl', 'Generate a new full data/themes.txt file'], - - ['--generate-all', '--ga', 'Generate a new full plugins, full themes, popular plugins and popular themes list'] - ) - end - - def run(options = {}) - @verbose = options[:verbose] || false - generate_all = options[:generate_all] || false - - if options.has_key?(:generate_plugin_list) || generate_all - most_popular('plugin', options[:generate_plugin_list] || 150) - end - - if options[:generate_full_plugin_list] || generate_all - full('plugin') - end - - if options.has_key?(:generate_theme_list) || generate_all - most_popular('theme', options[:generate_theme_list] || 20) - end - - if options[:generate_full_theme_list] || generate_all - full('theme') - end - end - - private - - def most_popular(type, number_of_pages) - puts "[+] Generating new most popular #{type} list" - puts - GenerateList.new(type + 's', @verbose).generate_popular_list(number_of_pages) - end - - def full(type) - puts "[+] Generating new full #{type} list" - puts - GenerateList.new(type + 's', @verbose).generate_full_list - end -end diff --git a/lib/wpstools/plugins/list_generator/svn_parser.rb b/lib/wpstools/plugins/list_generator/svn_parser.rb deleted file mode 100644 index 2ca26dc8..00000000 --- a/lib/wpstools/plugins/list_generator/svn_parser.rb +++ /dev/null @@ -1,31 +0,0 @@ -# encoding: UTF-8 - -# This Class Parses SVN Repositories via HTTP -class SvnParser - - attr_accessor :verbose, :svn_root, :keep_empty_dirs - - def initialize(svn_root) - @svn_root = svn_root - end - - def parse - get_root_directories - end - - #Private methods start here - private - - # Gets all directories in the SVN root - def get_root_directories - dirs = [] - rootindex = Browser.get(@svn_root).body - - rootindex.scan(%r{
  • (.+)/
  • }i).each do |dir| - dirs << dir[0] - end - - dirs.sort! - dirs.uniq - end -end diff --git a/lib/wpstools/wpstools_helper.rb b/lib/wpstools/wpstools_helper.rb index a478dca0..02fba828 100644 --- a/lib/wpstools/wpstools_helper.rb +++ b/lib/wpstools/wpstools_helper.rb @@ -12,21 +12,6 @@ def usage puts puts 'Examples:' puts - puts "- Generate a new 'most popular' plugin list, up to 150 pages ..." - puts "ruby #{script_name} --generate-plugin-list 150" - puts - puts '- Generate a new full plugin list' - puts "ruby #{script_name} --generate-full-plugin-list" - puts - puts "- Generate a new 'most popular' theme list, up to 150 pages ..." - puts "ruby #{script_name} --generate-theme-list 150" - puts - puts '- Generate a new full theme list' - puts "ruby #{script_name} --generate-full-theme-list" - puts - puts '- Generate all list' - puts "ruby #{script_name} --generate-all" - puts puts 'Locally scan a wordpress installation for vulnerable files or shells' puts "ruby #{script_name} --check-local-vulnerable-files /var/www/wordpress/" puts diff --git a/spec/lib/wpstools/plugins/list_generator/generate_list_spec.rb b/spec/lib/wpstools/plugins/list_generator/generate_list_spec.rb deleted file mode 100644 index 5f5fe3f9..00000000 --- a/spec/lib/wpstools/plugins/list_generator/generate_list_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -# encoding: UTF-8 - -require File.expand_path(File.dirname(__FILE__) + '/../../wpstools_helper') - -# TODO diff --git a/spec/lib/wpstools/plugins/list_generator/svn_parser_spec.rb b/spec/lib/wpstools/plugins/list_generator/svn_parser_spec.rb deleted file mode 100644 index 5f5fe3f9..00000000 --- a/spec/lib/wpstools/plugins/list_generator/svn_parser_spec.rb +++ /dev/null @@ -1,5 +0,0 @@ -# encoding: UTF-8 - -require File.expand_path(File.dirname(__FILE__) + '/../../wpstools_helper') - -# TODO diff --git a/spec/lib/wpstools/wpstools_helper.rb b/spec/lib/wpstools/wpstools_helper.rb index e8a05451..b31be3bd 100644 --- a/spec/lib/wpstools/wpstools_helper.rb +++ b/spec/lib/wpstools/wpstools_helper.rb @@ -1,6 +1,4 @@ # encoding: UTF-8 require 'spec_helper' - require WPSTOOLS_LIB_DIR + '/wpstools_helper' - diff --git a/wpstools.rb b/wpstools.rb index 99b1d2ee..04edcfd9 100755 --- a/wpstools.rb +++ b/wpstools.rb @@ -17,7 +17,6 @@ begin plugins = Plugins.new(option_parser) plugins.register( CheckerPlugin.new, - ListGeneratorPlugin.new, StatsPlugin.new, CheckerSpelling.new )