Wpscan statistics
This commit is contained in:
@@ -69,10 +69,4 @@ module WpPlugins
|
|||||||
plugins.sort_by { |p| p.name }
|
plugins.sort_by { |p| p.name }
|
||||||
end
|
end
|
||||||
|
|
||||||
def plugin_vulns_count(file=PLUGINS_VULNS_FILE)
|
|
||||||
xml = Nokogiri::XML(File.open(file)) do |config|
|
|
||||||
config.noblanks
|
|
||||||
end
|
|
||||||
xml.xpath("count(//plugin)").to_i
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -56,10 +56,4 @@ module WpThemes
|
|||||||
themes.sort_by { |t| t.name }
|
themes.sort_by { |t| t.name }
|
||||||
end
|
end
|
||||||
|
|
||||||
def theme_vulns_count(file=THEMES_VULNS_FILE)
|
|
||||||
xml = Nokogiri::XML(File.open(file)) do |config|
|
|
||||||
config.noblanks
|
|
||||||
end
|
|
||||||
xml.xpath("count(//theme)").to_i
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
70
lib/wpscan/wpscan_stats.rb
Normal file
70
lib/wpscan/wpscan_stats.rb
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
# encoding: UTF-8
|
||||||
|
#--
|
||||||
|
# WPScan - WordPress Security Scanner
|
||||||
|
# Copyright (C) 2012-2013
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#++
|
||||||
|
|
||||||
|
class WpscanStats
|
||||||
|
|
||||||
|
def self.vuln_plugin_count(file=PLUGINS_VULNS_FILE)
|
||||||
|
xml = Nokogiri::XML(File.open(file)) do |config|
|
||||||
|
config.noblanks
|
||||||
|
end
|
||||||
|
xml.xpath("count(//plugin)").to_i
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.vuln_theme_count(file=THEMES_VULNS_FILE)
|
||||||
|
xml = Nokogiri::XML(File.open(file)) do |config|
|
||||||
|
config.noblanks
|
||||||
|
end
|
||||||
|
xml.xpath("count(//theme)").to_i
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.plugin_vulns_count(file=PLUGINS_VULNS_FILE)
|
||||||
|
xml = Nokogiri::XML(File.open(file)) do |config|
|
||||||
|
config.noblanks
|
||||||
|
end
|
||||||
|
xml.xpath("count(//vulnerability)").to_i
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.theme_vulns_count(file=THEMES_VULNS_FILE)
|
||||||
|
xml = Nokogiri::XML(File.open(file)) do |config|
|
||||||
|
config.noblanks
|
||||||
|
end
|
||||||
|
xml.xpath("count(//vulnerability)").to_i
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.total_plugins(file=PLUGINS_FULL_FILE, xml=PLUGINS_VULNS_FILE)
|
||||||
|
options = {}
|
||||||
|
options[:only_vulnerable_ones] = false
|
||||||
|
options[:file] = file
|
||||||
|
options[:vulns_file] = xml
|
||||||
|
options[:base_url] = "http://localhost"
|
||||||
|
options[:type] = "plugins"
|
||||||
|
WpEnumerator.generate_items(options).count
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.total_themes(file=THEMES_FULL_FILE, xml=THEMES_VULNS_FILE)
|
||||||
|
options = {}
|
||||||
|
options[:only_vulnerable_ones] = false
|
||||||
|
options[:file] = file
|
||||||
|
options[:vulns_file] = xml
|
||||||
|
options[:base_url] = "http://localhost"
|
||||||
|
options[:type] = "themes"
|
||||||
|
WpEnumerator.generate_items(options).count
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@@ -194,10 +194,4 @@ shared_examples_for 'WpPlugins' do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#plugin_vulns_count' do
|
|
||||||
it 'should return the correct number' do
|
|
||||||
xml = "#{SPEC_FIXTURES_WPSCAN_WP_PLUGIN_DIR}/vulnerabilities/plugin_vulns.xml"
|
|
||||||
@module.plugin_vulns_count(xml).should === 2
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -208,10 +208,4 @@ shared_examples_for 'WpThemes' do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#theme_vulns_count' do
|
|
||||||
it 'should return the correct number' do
|
|
||||||
xml = "#{SPEC_FIXTURES_WPSCAN_WP_THEME_DIR}/vulnerabilities/theme_vulns.xml"
|
|
||||||
@module.theme_vulns_count(xml).should === 2
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
62
spec/lib/wpscan/wpscan_stats_spec.rb
Normal file
62
spec/lib/wpscan/wpscan_stats_spec.rb
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# encoding: UTF-8
|
||||||
|
#--
|
||||||
|
# WPScan - WordPress Security Scanner
|
||||||
|
# Copyright (C) 2012-2013
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#++
|
||||||
|
|
||||||
|
require File.expand_path(File.dirname(__FILE__) + '/wpscan_helper')
|
||||||
|
|
||||||
|
describe 'WpscanStats' do
|
||||||
|
describe '#vuln_plugin_count' do
|
||||||
|
it 'should return the correct number' do
|
||||||
|
xml = "#{SPEC_FIXTURES_WPSCAN_WP_PLUGIN_DIR}/vulnerabilities/plugin_vulns.xml"
|
||||||
|
WpscanStats.vuln_plugin_count(xml).should == 2
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#vuln_theme_count' do
|
||||||
|
it 'should return the correct number' do
|
||||||
|
xml = "#{SPEC_FIXTURES_WPSCAN_WP_THEME_DIR}/vulnerabilities/theme_vulns.xml"
|
||||||
|
WpscanStats.vuln_theme_count(xml).should == 2
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#plugin_vulns_count' do
|
||||||
|
it 'should return the correct number' do
|
||||||
|
xml = "#{SPEC_FIXTURES_WPSCAN_WP_PLUGIN_DIR}/vulnerabilities/plugin_vulns.xml"
|
||||||
|
WpscanStats.plugin_vulns_count(xml).should == 3
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#theme_vulns_count' do
|
||||||
|
it 'should return the correct number' do
|
||||||
|
xml = "#{SPEC_FIXTURES_WPSCAN_WP_THEME_DIR}/vulnerabilities/theme_vulns.xml"
|
||||||
|
WpscanStats.theme_vulns_count(xml).should == 3
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#total_plugins' do
|
||||||
|
xml = "#{SPEC_FIXTURES_WPSCAN_WP_PLUGIN_DIR}/vulnerabilities/plugin_vulns.xml"
|
||||||
|
file = "#{SPEC_FIXTURES_WPSCAN_WP_PLUGIN_DIR}/plugins.txt"
|
||||||
|
WpscanStats.total_plugins(file, xml).should == 4
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#total_themes' do
|
||||||
|
xml = "#{SPEC_FIXTURES_WPSCAN_WP_THEME_DIR}/vulnerabilities/theme_vulns.xml"
|
||||||
|
file = "#{SPEC_FIXTURES_WPSCAN_WP_THEME_DIR}/themes.txt"
|
||||||
|
WpscanStats.total_themes(file, xml).should == 5
|
||||||
|
end
|
||||||
|
end
|
||||||
4
spec/samples/wpscan/wp_plugin/plugins.txt
Normal file
4
spec/samples/wpscan/wp_plugin/plugins.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
plugin1
|
||||||
|
plugin2
|
||||||
|
plugin3
|
||||||
|
plugin4
|
||||||
5
spec/samples/wpscan/wp_theme/themes.txt
Normal file
5
spec/samples/wpscan/wp_theme/themes.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
theme1
|
||||||
|
theme2
|
||||||
|
theme3
|
||||||
|
theme4
|
||||||
|
theme5
|
||||||
@@ -6,6 +6,11 @@
|
|||||||
<reference>http://1337day.com/exploit/20027</reference>
|
<reference>http://1337day.com/exploit/20027</reference>
|
||||||
<type>FPD</type>
|
<type>FPD</type>
|
||||||
</vulnerability>
|
</vulnerability>
|
||||||
|
<vulnerability>
|
||||||
|
<title>onepagewebsite Full Path Disclosure vulnerability</title>
|
||||||
|
<reference>http://1337day.com/exploit/20027</reference>
|
||||||
|
<type>FPD</type>
|
||||||
|
</vulnerability>
|
||||||
</theme>
|
</theme>
|
||||||
<theme name="vithy">
|
<theme name="vithy">
|
||||||
<vulnerability>
|
<vulnerability>
|
||||||
|
|||||||
11
wpscan.rb
11
wpscan.rb
@@ -55,6 +55,15 @@ end
|
|||||||
File.delete(LOG_FILE) if File.exist?(LOG_FILE) and !File.symlink?(LOG_FILE)
|
File.delete(LOG_FILE) if File.exist?(LOG_FILE) and !File.symlink?(LOG_FILE)
|
||||||
|
|
||||||
banner()
|
banner()
|
||||||
|
# Stats
|
||||||
|
puts "Wpscan Databse Statistics:"
|
||||||
|
puts "\tTotal vulnerable plugins: #{WpscanStats.vuln_plugin_count}"
|
||||||
|
puts "\tTotal vulnerable themes: #{WpscanStats.vuln_theme_count}"
|
||||||
|
puts "\tTotal plugin vulnerabilities: #{WpscanStats.plugin_vulns_count}"
|
||||||
|
puts "\tTotal theme vulnerabilities: #{WpscanStats.theme_vulns_count}"
|
||||||
|
puts "\tTotal plugins to enumerate: #{WpscanStats.total_plugins}"
|
||||||
|
puts "\tTotal themes to enumerate: #{WpscanStats.total_themes}"
|
||||||
|
puts
|
||||||
|
|
||||||
begin
|
begin
|
||||||
wpscan_options = WpscanOptions.load_from_arguments
|
wpscan_options = WpscanOptions.load_from_arguments
|
||||||
@@ -146,8 +155,6 @@ begin
|
|||||||
start_time = Time.now
|
start_time = Time.now
|
||||||
puts "| URL: #{wp_target.url}"
|
puts "| URL: #{wp_target.url}"
|
||||||
puts "| Started on #{start_time.asctime}"
|
puts "| Started on #{start_time.asctime}"
|
||||||
puts "| Total vulnerable plugins: #{wp_target.plugin_vulns_count}"
|
|
||||||
puts "| Total vulnerable themes: #{wp_target.theme_vulns_count}"
|
|
||||||
puts
|
puts
|
||||||
|
|
||||||
if wp_target.has_robots?
|
if wp_target.has_robots?
|
||||||
|
|||||||
Reference in New Issue
Block a user