# File lib/browser.rb, line 166defget(url, params = {})
run_request(
forge_request(url, params.merge(:method =>:get))
@@ -434,7 +434,7 @@ browser object, hydra will not have the new @max_threads and
-
# File lib/browser.rb, line 127
+
# File lib/browser.rb, line 136defload_config(config_file = nil)
@config_file = config_file||@config_file
@@ -472,7 +472,7 @@ browser object, hydra will not have the new @max_threads and
-
# File lib/browser.rb, line 96
+
# File lib/browser.rb, line 101defmax_threads=(max_threads)
ifmax_threads.nil?ormax_threads<=0max_threads = 1
@@ -505,7 +505,7 @@ browser object, hydra will not have the new @max_threads and
-
# File lib/browser.rb, line 174
+
# File lib/browser.rb, line 185defmerge_request_params(params = {})
if@proxyparams = params.merge(:proxy =>@proxy)
@@ -570,7 +570,7 @@ browser object, hydra will not have the new @max_threads and
-
# File lib/browser.rb, line 161
+
# File lib/browser.rb, line 172defpost(url, params = {})
run_request(
forge_request(url, params.merge(:method =>:post))
@@ -602,7 +602,7 @@ browser object, hydra will not have the new @max_threads and
-
# File lib/browser.rb, line 103
+
# File lib/browser.rb, line 108defproxy_auth=(auth)
unlessauth.nil?ifauth.is_a?(Hash)
@@ -612,12 +612,15 @@ browser object, hydra will not have the new @max_threads and
@proxy_auth = authelsifauth.is_a?(String)
ifmatches = %r{([^:]+):(.*)}.match(auth)
- @proxy_auth = {:proxy_username =>matches[1], :proxy_password =>matches[2]}
+ @proxy_auth = {
+ proxy_username:matches[1],
+ proxy_password:matches[2]
+ }
else
- raise_invalid_proxy_format()
+ raise_invalid_proxy_auth_format()
endelse
- raise_invalid_proxy_format()
+ raise_invalid_proxy_auth_format()
endendend
@@ -631,10 +634,10 @@ browser object, hydra will not have the new @max_threads and
-
+
- raise_invalid_proxy_formatraise_invalid_proxy_auth_format()click to toggle source
@@ -646,19 +649,19 @@ browser object, hydra will not have the new @max_threads and
-
-
# File lib/browser.rb, line 122
-defraise_invalid_proxy_format
- raise"Invalid proxy auth format, expected username:password or {:proxy_username => username, :proxy_password => password}"
+
+
# File lib/browser.rb, line 130
+defraise_invalid_proxy_auth_format
+ raise'Invalid proxy auth format, expected username:password or {proxy_username: username, proxy_password: password}'end
-
+
-
+
@@ -677,15 +680,15 @@ browser object, hydra will not have the new @max_threads and
@@ -715,14 +718,15 @@ browser object, hydra will not have the new @max_threads and
-
# File lib/browser.rb, line 71
+
# File lib/browser.rb, line 75defuser_agent_mode=(ua_mode)
- ua_mode||="static"
+ ua_mode||='static'ifUSER_AGENT_MODES.include?(ua_mode)
@user_agent_mode = ua_mode
- # For semi-static user agent mode, the user agent has to be nil the first time (it will be set with the getter)
- @user_agent = nilifua_mode==="semi-static"
+ # For semi-static user agent mode, the user agent has to
+ # be nil the first time (it will be set with the getter)
+ @user_agent = nilifua_mode==='semi-static'elseraise"Unknow user agent mode : '#{ua_mode}'"end
diff --git a/doc/BruteForce.html b/doc/BruteForce.html
index d4a0c730..86a4de4e 100644
--- a/doc/BruteForce.html
+++ b/doc/BruteForce.html
@@ -224,7 +224,7 @@ on large wordlists, although bareable.
@@ -274,10 +274,10 @@ on large wordlists, although bareable.
request_count = 0password_found = false
- File.open(wordlist_path, "r").eachdo|password|
+ File.open(wordlist_path, 'r').eachdo|password|# ignore file comments, but will miss passwords if they start with a hash...
- nextifpassword[0,1] =="#"
+ nextifpassword[0, 1] =='#'# keep a count of the amount of requests to be sentrequest_count+=1
@@ -290,9 +290,9 @@ on large wordlists, although bareable.
# the request objectrequest = Browser.instance.forge_request(login_url,
{
- :method =>:post,
- :params => {:log =>username, :pwd =>password},
- :cache_timeout =>0
+ method::post,
+ params: { log:URI::encode(username), pwd:URI::encode(password) },
+ cache_timeout:0
}
)
@@ -304,20 +304,20 @@ on large wordlists, although bareable.
ifresponse.body=~%rlogin_error/puts"\nIncorrect username and/or password."if@verboseelsifresponse.code==302
- puts"\n "+green("[SUCCESS]") +" Username : #{username} Password : #{password}\n"ifshow_progression
- found<< { :name =>username, :password =>password }
+ puts"\n "+green('[SUCCESS]') +" Username : #{username} Password : #{password}\n"ifshow_progression
+ found<< { name:username, password:password }
password_found = trueelsifresponse.timed_out?
- putsred("ERROR:") +" Request timed out."ifshow_progression
+ putsred('ERROR:') +' Request timed out.'ifshow_progressionelsifresponse.code==0
- putsred("ERROR:") +" No response from remote server. WAF/IPS?"ifshow_progression
+ putsred('ERROR:') +' No response from remote server. WAF/IPS?'ifshow_progression# code is a fixnum, needs a string for regexelsifresponse.code.to_s=~%r^50/
- putsred("ERROR:") +" Server error, try reducing the number of threads."ifshow_progression
+ putsred('ERROR:') +' Server error, try reducing the number of threads.'ifshow_progressionelse
- puts"\n"+red("ERROR:") +" We recieved an unknown response for #{password}..."ifshow_progression
+ puts"\n"+red('ERROR:') +" We recieved an unknown response for #{password}..."ifshow_progression
- # ugly method to get the coverage :/ (otherwise some output is present in the rspec)
+ # HACK to get the coverage :/ (otherwise some output is present in the rspec)putsred("Code: #{response.code.to_s}") if@verboseputsred("Body: #{response.body}") if@verboseputsif@verbose
diff --git a/doc/CacheFileStore.html b/doc/CacheFileStore.html
index 8274aaa9..1b86f843 100644
--- a/doc/CacheFileStore.html
+++ b/doc/CacheFileStore.html
@@ -260,19 +260,23 @@
-
The serializer must have the 2 methods .load and .dump (Marshal and YAML
-have them) YAML is Human Readable, contrary to Marshal which store in a
-binary format Marshal does not need any “require”
+
The serializer must have the 2 methods .load and .dump
+
+
(Marshal and YAML have them)
+
+
YAML is Human Readable, contrary to Marshal which store in a binary format
+Marshal does not need any “require”
-
# File lib/cache_file_store.rb, line 34
+
# File lib/cache_file_store.rb, line 36definitialize(storage_path, serializer = Marshal)
@storage_path = File.expand_path(storage_path)
@serializer = serializer
- # File.directory? for ruby <= 1.9 otherwise, it makes more sense to do Dir.exist? :/
+ # File.directory? for ruby <= 1.9 otherwise,
+ # it makes more sense to do Dir.exist? :/unlessFile.directory?(@storage_path)
Dir.mkdir(@storage_path)
end
@@ -309,7 +313,7 @@ binary format Marshal does not need any “require”
-
# File lib/cache_file_store.rb, line 44
+
# File lib/cache_file_store.rb, line 47defcleanDir[File.join(@storage_path, '*')].eachdo|f|File.delete(f)
@@ -341,7 +345,7 @@ binary format Marshal does not need any “require”
-
# File lib/cache_file_store.rb, line 66
+
# File lib/cache_file_store.rb, line 69defget_entry_file_path(key)
@storage_path+'/'+keyend
@@ -371,7 +375,7 @@ binary format Marshal does not need any “require”
-
# File lib/cache_file_store.rb, line 50
+
# File lib/cache_file_store.rb, line 53defread_entry(key)
entry_file_path = get_entry_file_path(key)
@@ -405,7 +409,7 @@ binary format Marshal does not need any “require”
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/>.
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Public Class Methods
+
+
+
+
+
+ new()
+ click to toggle source
+
+
+
+
+
+
+
+
+
+
+
# File lib/wpstools/plugins/checker/checker_plugin.rb, line 21
+definitialize
+ super(author:'WPScanTeam - @erwanlr')
+
+ register_options(
+ ['--check-vuln-ref-urls', '--cvru', 'Check all the vulnerabilities reference urls for 404'],
+ ['--check-local-vulnerable-files LOCAL_DIRECTORY', '--clvf', 'Perform a recursive scan in the LOCAL_DIRECTORY to find vulnerable files or shells']
+ )
+end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Public Instance Methods
+
+
+
+
+
+ check_local_vulnerable_files(dir_to_scan)
+ click to toggle source
+
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/>.
# File lib/common/custom_option_parser.rb, line 31
+defadd(options)
+ ifoptions.is_a?(Array)
+ ifoptions[0].is_a?(Array)
+ options.eachdo|option|
+ add_option(option)
+ end
+ else
+ add_option(options)
+ end
+ else
+ raise"Options must be at least an Array, or an Array(Array). #{options.class} supplied"
+ end
+end
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/>.
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Public Class Methods
+
+
+
+
+
+ new()
+ click to toggle source
+
+
+
+
+
+
+
+
+
+
+
# File lib/wpstools/plugins/list_generator/list_generator_plugin.rb, line 21
+definitialize
+ 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 : 150)'],
+ ['--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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Public Instance Methods
+
+
+
+
+
+ run(options = {})
+ click to toggle source
+
+
+
+
+
+
+
+
+
+
+
# File lib/wpstools/plugins/list_generator/list_generator_plugin.rb, line 35
+defrun(options = {})
+ verbose = options[:verbose] ||false
+ generate_all = options[:generate_all] ||false
+
+ ifoptions.has_key?(:generate_plugin_list) ||generate_all
+ number_of_pages = options[:generate_plugin_list] ||150
+
+ puts'[+] Generating new most popular plugin list'
+ puts
+ GenerateList.new('plugins', verbose).generate_popular_list(number_of_pages)
+ end
+
+ ifoptions[:generate_full_plugin_list] ||generate_all
+ puts'[+] Generating new full plugin list'
+ puts
+ GenerateList.new('plugins', verbose).generate_full_list
+ end
+
+ ifoptions.has_key?(:generate_theme_list) ||generate_all
+ number_of_pages = options[:generate_theme_list] ||150
+
+ puts'[+] Generating new most popular theme list'
+ puts
+ GenerateList.new('themes', verbose).generate_popular_list(number_of_pages)
+ end
+
+ ifoptions[:generate_full_theme_list] ||generate_all
+ puts'[+] Generating new full theme list'
+ puts
+ GenerateList.new('themes', verbose).generate_full_list
+ end
+end
# File lib/wpscan/modules/malwares.rb, line 59defself.malware_pattern(url_regex)
# no need to escape regex here, because malware.txt contains regex%r{<(?:script|iframe).* src=(?:"|')(#{url_regex}[^"']*)(?:"|')[^>]*>}
@@ -255,7 +255,7 @@
-
# File lib/wpscan/modules/malwares.rb, line 52
+
# File lib/wpscan/modules/malwares.rb, line 55defself.malwares_file(malwares_file_path)
malwares_file_path||DATA_DIR+'/malwares.txt'end
@@ -291,7 +291,7 @@
-
# File lib/wpscan/modules/malwares.rb, line 23
+
# File lib/wpscan/modules/malwares.rb, line 26defhas_malwares?(malwares_file_path = nil)
!malwares(malwares_file_path).empty?end
# File lib/common_helper.rb, line 166defget_metasploit_url(module_path)
# remove leading slash
- module_path = module_path.sub(%r^\//, "")
+ module_path = module_path.sub(%r^\//, '')
"http://www.metasploit.com/modules/#{module_path}"end
@@ -586,7 +611,7 @@
-
# File lib/common_helper.rb, line 157
+
# File lib/common_helper.rb, line 162defgreen(text)
colorize(text, 32)
end
@@ -617,44 +642,44 @@
# File lib/wpscan/wpscan_helper.rb, line 73
-defhelp()
- puts"Help :"
+defhelp
+ puts'Help :'puts
- puts"Some values are settable in conf/browser.conf.json :"
- puts" user-agent, proxy, proxy-auth, threads, cache timeout and request timeout"
+ puts'Some values are settable in conf/browser.conf.json :'
+ puts' user-agent, proxy, proxy-auth, threads, cache timeout and request timeout'puts
- puts"--update Update to the latest revision"
- puts"--url | -u <target url> The WordPress URL/domain to scan."
- puts"--force | -f Forces WPScan to not check if the remote site is running WordPress."
- puts"--enumerate | -e [option(s)] Enumeration."
- puts" option :"
- puts" u usernames from id 1 to 10"
- puts" u[10-20] usernames from id 10 to 20 (you must write [] chars)"
- puts" p plugins"
- puts" vp only vulnerable plugins"
- puts" ap all plugins (can take a long time)"
- puts" tt timthumbs"
- puts" t themes"
- puts" vt only vulnerable themes"
- puts" at all themes (can take a long time)"
- puts" Multiple values are allowed : '-e t,p' will enumerate timthumbs and plugins"
- puts" If no option is supplied, the default is 'vt,tt,u,vp'"
+ puts'--update Update to the latest revision'
+ puts'--url | -u <target url> The WordPress URL/domain to scan.'
+ puts'--force | -f Forces WPScan to not check if the remote site is running WordPress.'
+ puts'--enumerate | -e [option(s)] Enumeration.'
+ puts' option :'
+ puts' u usernames from id 1 to 10'
+ puts' u[10-20] usernames from id 10 to 20 (you must write [] chars)'
+ puts' p plugins'
+ puts' vp only vulnerable plugins'
+ puts' ap all plugins (can take a long time)'
+ puts' tt timthumbs'
+ puts' t themes'
+ puts' vt only vulnerable themes'
+ puts' at all themes (can take a long time)'
+ puts' Multiple values are allowed : "-e t,p" will enumerate timthumbs and plugins'
+ puts' If no option is supplied, the default is "vt,tt,u,vp"'puts
- puts"--exclude-content-based '<regexp or string>' Used with the enumeration option, will exclude all occurence based on the regexp or string supplied"
- puts" You do not need to provide the regexp delimiters, but you must write the quotes (simple or double)"
- puts"--config-file | -c <config file> Use the specified config file"
- puts"--follow-redirection If the target url has a redirection, it will be followed without asking if you wanted to do so or not"
- puts"--wp-content-dir <wp content dir> WPScan try to find the content directory (ie wp-content) by scanning the index page, however you can specified it. Subdirectories are allowed"
- puts"--wp-plugins-dir <wp plugins dir> Same thing than --wp-content-dir but for the plugins directory. If not supplied, WPScan will use wp-content-dir/plugins. Subdirectories are allowed"
- puts"--proxy <[protocol://]host:port> Supply a proxy (will override the one from conf/browser.conf.json)."
- puts" HTTP, SOCKS4 SOCKS4A and SOCKS5 are supported. If no protocol is given (format host:port), HTTP will be used"
- puts"--proxy-auth <username:password> Supply the proxy login credentials (will override the one from conf/browser.conf.json)."
- puts"--basic-auth <username:password> Set the HTTP Basic authentification"
- puts"--wordlist | -w <wordlist> Supply a wordlist for the password bruter and do the brute."
- puts"--threads | -t <number of threads> The number of threads to use when multi-threading requests. (will override the value from conf/browser.conf.json)"
- puts"--username | -U <username> Only brute force the supplied username."
- puts"--help | -h This help screen."
- puts"--verbose | -v Verbose output."
+ puts'--exclude-content-based "<regexp or string>" Used with the enumeration option, will exclude all occurence based on the regexp or string supplied'
+ puts' You do not need to provide the regexp delimiters, but you must write the quotes (simple or double)'
+ puts'--config-file | -c <config file> Use the specified config file'
+ puts'--follow-redirection If the target url has a redirection, it will be followed without asking if you wanted to do so or not'
+ puts'--wp-content-dir <wp content dir> WPScan try to find the content directory (ie wp-content) by scanning the index page, however you can specified it. Subdirectories are allowed'
+ puts'--wp-plugins-dir <wp plugins dir> Same thing than --wp-content-dir but for the plugins directory. If not supplied, WPScan will use wp-content-dir/plugins. Subdirectories are allowed'
+ puts'--proxy <[protocol://]host:port> Supply a proxy (will override the one from conf/browser.conf.json).'
+ puts' HTTP, SOCKS4 SOCKS4A and SOCKS5 are supported. If no protocol is given (format host:port), HTTP will be used'
+ puts'--proxy-auth <username:password> Supply the proxy login credentials (will override the one from conf/browser.conf.json).'
+ puts'--basic-auth <username:password> Set the HTTP Basic authentification'
+ puts'--wordlist | -w <wordlist> Supply a wordlist for the password bruter and do the brute.'
+ puts'--threads | -t <number of threads> The number of threads to use when multi-threading requests. (will override the value from conf/browser.conf.json)'
+ puts'--username | -U <username> Only brute force the supplied username.'
+ puts'--help | -h This help screen.'
+ puts'--verbose | -v Verbose output.'putsend
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/>.
# File lib/common/plugins/plugin.rb, line 32
+defregister_options(*options)
+ options.eachdo|option|
+ unlessoption.is_a?(Array)
+ raise"Each option must be an array, #{option.class} supplied"
+ end
+ end
+ @registered_options = options
+end
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/>.
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Attributes
+
+
+
+
+ option_parser[R]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Public Class Methods
+
+
+
+
+
+ new(option_parser = nil)
+ click to toggle source
+
+
+
+
+
+
+
+
+
+
+
# File lib/common/plugins/plugins.rb, line 23
+definitialize(option_parser = nil)
+ ifoption_parser
+ ifoption_parser.is_a?(CustomOptionParser)
+ @option_parser = option_parser
+ else
+ raise"The parser must be an instance of CustomOptionParser, #{option_parser.class} supplied"
+ end
+ else
+ @option_parser = CustomOptionParser.new
+ end
+end
# File lib/common/plugins/plugins.rb, line 43
+defregister_plugin(plugin)
+ ifplugin.is_a?(Plugin)
+ self<<plugin
+
+ # A plugin may not have options
+ ifplugin_options = plugin.registered_options
+ @option_parser.add(plugin_options)
+ end
+ else
+ raise"The argument must be an instance of Plugin, #{plugin.class} supplied"
+ end
+end
# File lib/wpscan/wp_item.rb, line 25definitialize(options)
@type = options[:type]
- @wp_content_dir = options[:wp_content_dir] ?options[:wp_content_dir].sub(%r^\//, "").sub(%r\/$/, "") :"wp-content"
+ @wp_content_dir = options[:wp_content_dir] ?options[:wp_content_dir].sub(%r^\//, '').sub(%r\/$/, '') :'wp-content'@wp_plugins_dir = options[:wp_plugins_dir] ||"#@wp_content_dir/plugins"@base_url = options[:base_url]
@path = options[:path]
@@ -378,12 +378,12 @@
@vulns_file = options[:vulns_file]
@vulns_xpath = options[:vulns_xpath].sub(%r\$name\$/, @name) unlessoptions[:vulns_xpath] ==nil
- raise("base_url not set") unless@base_url
- raise("path not set") unless@path
- raise("wp_content_dir not set") unless@wp_content_dir
- raise("name not set") unless@name
- raise("vulns_file not set") unless@vulns_file
- raise("type not set") unless@type
+ raise('base_url not set') unless@base_url
+ raise('path not set') unless@path
+ raise('wp_content_dir not set') unless@wp_content_dir
+ raise('name not set') unless@name
+ raise('vulns_file not set') unless@vulns_file
+ raise('type not set') unless@typeend
@@ -509,7 +509,7 @@
# File lib/wpscan/wp_item.rb, line 159defchangelog_url
- get_url_without_filename.merge("changelog.txt")
+ get_url_without_filename.merge('changelog.txt')
end
@@ -600,15 +600,15 @@
# File lib/wpscan/wp_item.rb, line 84defget_full_url
- url = @base_url.to_s.end_with?("/") ?@base_url.to_s:"#@base_url/"
+ url = @base_url.to_s.end_with?('/') ?@base_url.to_s:"#@base_url/"# remove first and last /
- wp_content_dir = @wp_content_dir.sub(%r^\//, "").sub(%r\/$/, "")
+ wp_content_dir = @wp_content_dir.sub(%r^\//, "").sub(%r\/$/, '')
# remove first /
- path = @path.sub(%r^\//, "")
- iftype=="plugins"
+ path = @path.sub(%r^\//, '')
+ iftype=='plugins'# plugins can be outside of wp-content. wp_content_dir included in wp_plugins_dirret = URI.parse(URI.encode("#{url}#@wp_plugins_dir/#{path}"))
- elsiftype=="timthumbs"
+ elsiftype=='timthumbs'# timthumbs have folder in path variableret = URI.parse(URI.encode("#{url}#{wp_content_dir}/#{path}"))
else
@@ -645,13 +645,13 @@
# File lib/wpscan/wp_item.rb, line 70defget_sub_foldercase@type
- when"themes"
- folder = "themes"
- when"timthumbs"
- # not needed
- folder = nil
- else
- raise("unknown type #@type")
+ when'themes'
+ folder = 'themes'
+ when'timthumbs'
+ # not needed
+ folder = nil
+ else
+ raise("unknown type #@type")
endfolderend
@@ -786,7 +786,7 @@
# File lib/wpscan/wp_item.rb, line 154defreadme_url
- get_url_without_filename.merge("readme.txt")
+ get_url_without_filename.merge('readme.txt')
end
# File lib/wpscan/wp_options.rb, line 34defself.check_options(options)
- raise("base_url must be set") unlessoptions[:base_url] !=nilandoptions[:base_url].to_s.length>0
- raise("only_vulnerable_ones must be set") unlessoptions[:only_vulnerable_ones] !=nil
- raise("file must be set") unlessoptions[:file] !=nilandoptions[:file].length>0
- raise("vulns_file must be set") unlessoptions[:vulns_file] !=nilandoptions[:vulns_file].length>0
- raise("vulns_xpath must be set") unlessoptions[:vulns_xpath] !=nilandoptions[:vulns_xpath].length>0
- raise("vulns_xpath_2 must be set") unlessoptions[:vulns_xpath_2] !=nilandoptions[:vulns_xpath_2].length>0
- raise("wp_content_dir must be set") unlessoptions[:wp_content_dir] !=nilandoptions[:wp_content_dir].length>0
- raise("show_progression must be set") unlessoptions[:show_progression] !=nil
- raise("error_404_hash must be set") unlessoptions[:error_404_hash] !=nilandoptions[:error_404_hash].length>0
- raise("type must be set") unlessoptions[:type] !=nilandoptions[:type].length>0
+ raise('base_url must be set') unlessoptions[:base_url] !=nilandoptions[:base_url].to_s.length>0
+ raise('only_vulnerable_ones must be set') unlessoptions[:only_vulnerable_ones] !=nil
+ raise('file must be set') unlessoptions[:file] !=nilandoptions[:file].length>0
+ raise('vulns_file must be set') unlessoptions[:vulns_file] !=nilandoptions[:vulns_file].length>0
+ raise('vulns_xpath must be set') unlessoptions[:vulns_xpath] !=nilandoptions[:vulns_xpath].length>0
+ raise('vulns_xpath_2 must be set') unlessoptions[:vulns_xpath_2] !=nilandoptions[:vulns_xpath_2].length>0
+ raise('wp_content_dir must be set') unlessoptions[:wp_content_dir] !=nilandoptions[:wp_content_dir].length>0
+ raise('show_progression must be set') unlessoptions[:show_progression] !=nil
+ raise('error_404_hash must be set') unlessoptions[:error_404_hash] !=nilandoptions[:error_404_hash].length>0
+ raise('type must be set') unlessoptions[:type] !=nilandoptions[:type].length>0unlessoptions[:type] =~%rplugins/oroptions[:type] =~%rthemes/oroptions[:type] =~%rtimthumbs/raise("Unknown type #{options[:type]}")
diff --git a/doc/WpPlugin.html b/doc/WpPlugin.html
index b60cb00a..665efca1 100644
--- a/doc/WpPlugin.html
+++ b/doc/WpPlugin.html
@@ -230,11 +230,14 @@
# File lib/wpscan/wp_target.rb, line 103defhas_debug_log?# We only get the first 700 bytes of the file to avoid loading huge file (like 2Go)
- response_body = Browser.instance.get(debug_log_url(), :headers => {"range" =>"bytes=0-700"}).body
+ response_body = Browser.instance.get(debug_log_url(), headers: {'range' =>'bytes=0-700'}).bodyresponse_body[%r{\[[^\]]+\] PHP (?:Warning|Error|Notice):}] ?true:falseend
@@ -478,11 +478,11 @@
unless@multisite# when multi site, there is no redirection or a redirect to the site itself# otherwise redirect to wp-login.php
- url = @uri.merge("wp-signup.php")
+ url = @uri.merge('wp-signup.php')
resp = Browser.instance.get(url)
- ifresp.code==302andresp.headers_hash["location"] =~%rwp-login\.php\?action=register/
+ ifresp.code==302andresp.headers_hash['location'] =~%rwp-login\.php\?action=register/@multisite = false
- elsifresp.code==302andresp.headers_hash["location"] =~%rwp-signup\.php/
+ elsifresp.code==302andresp.headers_hash['location'] =~%rwp-signup\.php/@multisite = trueelsifresp.code==200@multisite = true
@@ -520,7 +520,7 @@
# File lib/wpscan/wp_target.rb, line 49deflogin_url
- url = @uri.merge("wp-login.php").to_s
+ url = @uri.merge('wp-login.php').to_s# Let's check if the login url is redirected (to https url for example)redirection = redirection(url)
@@ -560,7 +560,7 @@
defregistration_enabled?resp = Browser.instance.get(registration_url)
# redirect only on non multi sites
- ifresp.code==302andresp.headers_hash["location"] =~%rwp-login\.php\?registration=disabled/
+ ifresp.code==302andresp.headers_hash['location'] =~%rwp-login\.php\?registration=disabled/enabled = false# multi site registration formelsifresp.code==200andresp.body=~%r<form id="setupform" method="post" action="[^"]*wp-signup\.php[^"]*">/
@@ -602,7 +602,7 @@
# File lib/wpscan/wp_target.rb, line 144defregistration_url
- is_multisite??@uri.merge("wp-signup.php") :@uri.merge("wp-login.php?action=register")
+ is_multisite??@uri.merge('wp-signup.php') :@uri.merge('wp-login.php?action=register')
end
# File lib/wpscan/modules/wp_usernames.rb, line 81defremove_junk_from_nickname(usernames)
unlessusernames.kind_of?Array
- raise("Need an array as input")
+ raise('Need an array as input')
endnicknames = []
usernames.eachdo|u|unlessu.kind_of?WpUser
- raise("Items must be of type WpUser")
+ raise('Items must be of type WpUser')
endnickname = u.nickname
- unlessnickname=="empty"
+ unlessnickname=='empty'nicknames<<nicknameendendjunk = get_equal_string_end(nicknames)
usernames.eachdo|u|
- u.nickname = u.nickname.sub(%r#{Regexp.escape(junk)}$/, "")
+ u.nickname = u.nickname.sub(%r#{Regexp.escape(junk)}$/, '')
endusernamesend
# File lib/wpscan/wpscan_options.rb, line 140defbasic_auth=(basic_auth)
- raise"Invalid basic authentication format, login:password expected"ifbasic_auth.index(':').nil?
+ raise'Invalid basic authentication format, login:password expected'ifbasic_auth.index(':').nil?@basic_auth = "Basic #{Base64.encode64(basic_auth).chomp}"end
@@ -542,7 +542,7 @@ any remaining ‘-’ by ‘_’
# File lib/wpscan/wpscan_options.rb, line 108defenumerate_all_plugins=(enumerate_all_plugins)
ifenumerate_all_plugins===trueand (@enumerate_plugins===trueor@enumerate_only_vulnerable_plugins===true)
- raise"Please choose only one plugin enumeration option"
+ raise'Please choose only one plugin enumeration option'else@enumerate_all_plugins = enumerate_all_pluginsend
@@ -576,7 +576,7 @@ any remaining ‘-’ by ‘_’
# File lib/wpscan/wpscan_options.rb, line 132defenumerate_all_themes=(enumerate_all_themes)
ifenumerate_all_themes===trueand (@enumerate_themes===trueor@enumerate_only_vulnerable_themes===true)
- raise"Please choose only one theme enumeration option"
+ raise'Please choose only one theme enumeration option'else@enumerate_all_themes = enumerate_all_themesend
@@ -610,7 +610,7 @@ any remaining ‘-’ by ‘_’
# File lib/wpscan/wpscan_options.rb, line 100defenumerate_only_vulnerable_plugins=(enumerate_only_vulnerable_plugins)
ifenumerate_only_vulnerable_plugins===trueand (@enumerate_all_plugins===trueor@enumerate_plugins===true)
- raise"Please choose only one plugin enumeration option"
+ raise'Please choose only one plugin enumeration option'else@enumerate_only_vulnerable_plugins = enumerate_only_vulnerable_pluginsend
@@ -644,7 +644,7 @@ any remaining ‘-’ by ‘_’
# File lib/wpscan/wpscan_options.rb, line 124defenumerate_only_vulnerable_themes=(enumerate_only_vulnerable_themes)
ifenumerate_only_vulnerable_themes===trueand (@enumerate_all_themes===trueor@enumerate_themes===true)
- raise"Please choose only one theme enumeration option"
+ raise'Please choose only one theme enumeration option'else@enumerate_only_vulnerable_themes = enumerate_only_vulnerable_themesend
@@ -683,7 +683,7 @@ href="http://1-10">u will enumerate usernames from 1 to 10
defenumerate_options_from_string(value)
# Usage of self is mandatory because there are overridden setters
- value = value.split(',').map{ |c|c.downcase }
+ value = value.split(',').map { |c|c.downcase }
self.enumerate_only_vulnerable_plugins = trueifvalue.include?('vp')
@@ -738,7 +738,7 @@ href="http://1-10">u will enumerate usernames from 1 to 10
# File lib/wpscan/wpscan_options.rb, line 92defenumerate_plugins=(enumerate_plugins)
ifenumerate_plugins===trueand (@enumerate_all_plugins===trueor@enumerate_only_vulnerable_plugins===true)
- raise"Please choose only one plugin enumeration option"
+ raise'Please choose only one plugin enumeration option'else@enumerate_plugins = enumerate_pluginsend
@@ -772,7 +772,7 @@ href="http://1-10">u will enumerate usernames from 1 to 10
# File lib/wpscan/wpscan_options.rb, line 116defenumerate_themes=(enumerate_themes)
ifenumerate_themes===trueand (@enumerate_all_themes===trueor@enumerate_only_vulnerable_themes===true)
- raise"Please choose only one theme enumeration option"
+ raise'Please choose only one theme enumeration option'else@enumerate_themes = enumerate_themesend
@@ -836,7 +836,7 @@ href="http://1-10">u will enumerate usernames from 1 to 10
# File lib/wpscan/wpscan_options.rb, line 76defproxy=(proxy)
ifproxy.index(':') ==nil
- raise"Invalid proxy format. Should be host:port."
+ raise'Invalid proxy format. Should be host:port.'else@proxy = proxyend
@@ -870,7 +870,7 @@ href="http://1-10">u will enumerate usernames from 1 to 10
# File lib/wpscan/wpscan_options.rb, line 84defproxy_auth=(auth)
ifauth.index(':') ==nil
- raise"Invalid proxy auth format, username:password expected"
+ raise'Invalid proxy auth format, username:password expected'else@proxy_auth = authend
@@ -910,9 +910,9 @@ value
WpscanOptions.option_to_instance_variable_setter(cli_option),
cli_value
)
- elsifcli_option==="--enumerate"# Special cases
+ elsifcli_option==='--enumerate'# Special cases# Default value if no argument is given
- cli_value = "vt,tt,u,vp"ifcli_value.length==0
+ cli_value = 'vt,tt,u,vp'ifcli_value.length==0enumerate_options_from_string(cli_value)
else
@@ -1016,7 +1016,7 @@ value
WPScan - WordPress Security Scanner\nCopyright (C) 2012-2013\n\nThis program is free software: you can redistribute ...
\n"],["GenerateList","","GenerateList.html","","
This tool generates a list to use for plugin and theme enumeration\n"],["GitUpdater","","GitUpdater.html","",""],["ListGeneratorPlugin","","ListGeneratorPlugin.html","","\n
WPScan - WordPress Security Scanner\nCopyright (C) 2012-2013\n\nThis program is free software: you can redistribute ...
WPScan - WordPress Security Scanner\nCopyright (C) 2012-2013\n\nThis program is free software: you can redistribute ...
\n"],["Plugins","","Plugins.html","","\n
WPScan - WordPress Security Scanner\nCopyright (C) 2012-2013\n\nThis program is free software: you can redistribute ...
\n"],["SvnParser","","SvnParser.html","","
This Class Parses SVN Repositories via HTTP\n"],["SvnUpdater","","SvnUpdater.html","",""],["URI","","URI.html","",""],["Updater","","Updater.html","","
This class act as an absract one\n"],["UpdaterFactory","","UpdaterFactory.html","",""],["Vulnerable","","Vulnerable.html","",""],["WebSite","","WebSite.html","",""],["WpConfigBackup","","WpConfigBackup.html","",""],["WpDetector","","WpDetector.html","",""],["WpEnumerator","","WpEnumerator.html","","
Enumerate over a given set of items and check if they exist\n"],["WpFullPathDisclosure","","WpFullPathDisclosure.html","",""],["WpItem","","WpItem.html","",""],["WpLoginProtection","","WpLoginProtection.html","",""],["WpOptions","","WpOptions.html","","
Options Hash\n
Options\n
url - The base URL of the WordPress site\n"],["WpPlugin","","WpPlugin.html","",""],["WpPlugins","","WpPlugins.html","",""],["WpReadme","","WpReadme.html","",""],["WpTarget","","WpTarget.html","",""],["WpTheme","","WpTheme.html","",""],["WpThemes","","WpThemes.html","",""],["WpTimthumbs","","WpTimthumbs.html","",""],["WpUser","","WpUser.html","",""],["WpUsernames","","WpUsernames.html","",""],["WpVersion","","WpVersion.html","",""],["WpVulnerability","","WpVulnerability.html","",""],["WpscanOptions","","WpscanOptions.html","",""],["<=>","WpItem","WpItem.html#method-i-3C-3D-3E","(other)","
Url for changelog.txt\n"],["check_local_vulnerable_files","CheckerPlugin","CheckerPlugin.html#method-i-check_local_vulnerable_files","(dir_to_scan)",""],["check_options","WpOptions","WpOptions.html#method-c-check_options","(options)",""],["check_vuln_ref_urls","CheckerPlugin","CheckerPlugin.html#method-i-check_vuln_ref_urls","()",""],["clean","CacheFileStore","CacheFileStore.html#method-i-clean","()",""],["clean_option","WpscanOptions","WpscanOptions.html#method-c-clean_option","(option)","
Will removed the ‘-’ or ‘–’ chars at the beginning of option and replace\nany remaining ‘-’ by ‘_’\n
Checks to see if wp-config.php has a backup See www.feross.org/cmsploit/\nreturn an array of backup config …\n"],["config_backup_files","WpConfigBackup","WpConfigBackup.html#method-c-config_backup_files","()","
Is directory listing enabled?\n"],["enumerate","WpEnumerator","WpEnumerator.html#method-c-enumerate","(options = {}, items = nil)","
Enumerate the given Targets\n
Attributes\n
targets - targets to enumerate\n"],["enumerate_all_plugins=","WpscanOptions","WpscanOptions.html#method-i-enumerate_all_plugins-3D","(enumerate_all_plugins)",""],["enumerate_all_themes=","WpscanOptions","WpscanOptions.html#method-i-enumerate_all_themes-3D","(enumerate_all_themes)",""],["enumerate_only_vulnerable_plugins=","WpscanOptions","WpscanOptions.html#method-i-enumerate_only_vulnerable_plugins-3D","(enumerate_only_vulnerable_plugins)",""],["enumerate_only_vulnerable_themes=","WpscanOptions","WpscanOptions.html#method-i-enumerate_only_vulnerable_themes-3D","(enumerate_only_vulnerable_themes)",""],["enumerate_options_from_string","WpscanOptions","WpscanOptions.html#method-i-enumerate_options_from_string","(value)","
Will set enumerate_* from the string value IE : if value = vp =>\n:enumerate_only_vulnerable_plugins …\n"],["enumerate_plugins=","WpscanOptions","WpscanOptions.html#method-i-enumerate_plugins-3D","(enumerate_plugins)",""],["enumerate_themes=","WpscanOptions","WpscanOptions.html#method-i-enumerate_themes-3D","(enumerate_themes)",""],["eql?","WpUser","WpUser.html#method-i-eql-3F","(item)",""],["error_404_hash","WebSite","WebSite.html#method-i-error_404_hash","()","
Return the MD5 hash of a 404 page\n"],["error_log?","WpPlugin","WpPlugin.html#method-i-error_log-3F","()","
Discover any error_log files created by WordPress These are created by the\nWordPress error_log() function …\n"],["error_log_url","WpPlugin","WpPlugin.html#method-i-error_log_url","()",""],["escape","URI","URI.html#method-c-escape","(str)",""],["extract_name_from_url","WpItem","WpItem.html#method-i-extract_name_from_url","()","
Extract item name from a url\n"],["extract_nickname_from_body","WpUsernames","WpUsernames.html#method-i-extract_nickname_from_body","(body)",""],["find","WpTheme","WpTheme.html#method-c-find","(target_uri)",""],["find","WpVersion","WpVersion.html#method-c-find","(target_uri, wp_content_dir)","
Will use all method self.find_from_* to try to detect the version Once the\nversion is found, it will …\n"],["find_from_advanced_fingerprinting","WpVersion","WpVersion.html#method-c-find_from_advanced_fingerprinting","(options)","
Uses data/wp_versions.xml to try to identify a wordpress version.\n
It does this by using client side file …\n"],["find_from_atom_generator","WpVersion","WpVersion.html#method-c-find_from_atom_generator","(options)","
Attempts to find the WordPress version from, the generator tag in the Atom\nsource.\n"],["find_from_css_link","WpTheme","WpTheme.html#method-c-find_from_css_link","(target_uri)","
Discover the wordpress theme name by parsing the css link rel\n"],["find_from_links_opml","WpVersion","WpVersion.html#method-c-find_from_links_opml","(options)","
Attempts to find the WordPress version from the p-links-opml.php file.\n"],["find_from_meta_generator","WpVersion","WpVersion.html#method-c-find_from_meta_generator","(options)","
Attempts to find the wordpress version from, the generator meta tag in the\nhtml source.\n
The meta tag can …\n"],["find_from_rdf_generator","WpVersion","WpVersion.html#method-c-find_from_rdf_generator","(options)","
Attempts to find WordPress version from, the generator tag in the RDF feed\nsource.\n"],["find_from_readme","WpVersion","WpVersion.html#method-c-find_from_readme","(options)","
Attempts to find the WordPress version from the readme.html file.\n"],["find_from_rss_generator","WpVersion","WpVersion.html#method-c-find_from_rss_generator","(options)","
Attempts to find the WordPress version from, the generator tag in the RSS\nfeed source.\n"],["find_from_sitemap_generator","WpVersion","WpVersion.html#method-c-find_from_sitemap_generator","(options)","
Attempts to find the WordPress version from the sitemap.xml file.\n
Gets the string all elements in stringarray ends with\n"],["get_full_url","WpItem","WpItem.html#method-i-get_full_url","()","
Get the full url for this item\n"],["get_metasploit_url","Object","Object.html#method-i-get_metasploit_url","(module_path)",""],["get_nickname_from_response","WpUsernames","WpUsernames.html#method-i-get_nickname_from_response","(resp)",""],["get_nickname_from_url","WpUsernames","WpUsernames.html#method-i-get_nickname_from_url","(url)",""],["get_opt_long","WpscanOptions","WpscanOptions.html#method-c-get_opt_long","()","
Even if a short option is given (IE : -u), the long one will be returned\n(IE : –url)\n"],["get_popular_items","GenerateList","GenerateList.html#method-i-get_popular_items","(pages)","
Send a HTTP request to the WordPress most popular theme or plugin webpage\nparse the response for the …\n"],["get_sub_folder","WpItem","WpItem.html#method-i-get_sub_folder","()",""],["get_updater","UpdaterFactory","UpdaterFactory.html#method-c-get_updater","(repo_directory)",""],["get_url_without_filename","WpItem","WpItem.html#method-i-get_url_without_filename","()","
Gets the full url for this item without filenames\n"],["green","Object","Object.html#method-i-green","(text)",""],["grep","Array","Array.html#method-i-grep","(regexp)",""],["has_basic_auth?","WebSite","WebSite.html#method-i-has_basic_auth-3F","()",""],["has_better_wp_security_protection?","WpLoginProtection","WpLoginProtection.html#method-i-has_better_wp_security_protection-3F","()","
Check for Full Path Disclosure (FPD)\n"],["has_limit_login_attempts_protection?","WpLoginProtection","WpLoginProtection.html#method-i-has_limit_login_attempts_protection-3F","()","
Thanks to Alip Aswalid for providing this method.\nwordpress.org/extend/plugins/login-lockdown/\n"],["has_login_protection?","WpLoginProtection","WpLoginProtection.html#method-i-has_login_protection-3F","()",""],["has_login_security_solution_protection?","WpLoginProtection","WpLoginProtection.html#method-i-has_login_security_solution_protection-3F","()","
This file comes by default in a wordpress installation, and …\n"],["has_simple_login_lockdown_protection?","WpLoginProtection","WpLoginProtection.html#method-i-has_simple_login_lockdown_protection-3F","()","
Counts the number of lines in the wordlist It can take a couple of minutes\non large wordlists, although …\n"],["load_config","Browser","Browser.html#method-i-load_config","(config_file = nil)","
TODO reload hydra (if the .load_config is called on a browser object, hydra\nwill not have the new @max_threads …\n"],["load_from_arguments","WpscanOptions","WpscanOptions.html#method-c-load_from_arguments","()","
Will load the options from ARGV return WpscanOptions\n"],["local_revision_number","GitUpdater","GitUpdater.html#method-i-local_revision_number","()","
Git has not a revsion number like SVN, so we will take the 7 first chars of\nthe last commit hash\n"],["local_revision_number","SvnUpdater","SvnUpdater.html#method-i-local_revision_number","()",""],["local_revision_number","Updater","Updater.html#method-i-local_revision_number","()",""],["login_protection_plugin","WpLoginProtection","WpLoginProtection.html#method-i-login_protection_plugin","()","
Checks if a login protection plugin is enabled\ncode.google.com/p/wpscan/issues/detail?id=111 return a …\n"],["login_security_solution_url","WpLoginProtection","WpLoginProtection.html#method-i-login_security_solution_url","()",""],["login_url","WpTarget","WpTarget.html#method-i-login_url","()",""],["malware_pattern","Malwares","Malwares.html#method-c-malware_pattern","(url_regex)",""],["malwares","Malwares","Malwares.html#method-i-malwares","(malwares_file_path = nil)","
return array of string (url of malwares found)\n"],["malwares_file","Malwares","Malwares.html#method-c-malwares_file","(malwares_file_path)",""],["max_threads=","Browser","Browser.html#method-i-max_threads-3D","(max_threads)",""],["merge_request_params","Browser","Browser.html#method-i-merge_request_params","(params = {})",""],["name","WpUser","WpUser.html#method-i-name","()",""],["name=","WpUser","WpUser.html#method-i-name-3D","(new_name)",""],["new","CacheFileStore","CacheFileStore.html#method-c-new","(storage_path, serializer = Marshal)","
The serializer must have the 2 methods .load and .dump (Marshal and YAML\nhave them) YAML is Human Readable …\n"],["new","CheckerPlugin","CheckerPlugin.html#method-c-new","()",""],["new","CustomOptionParser","CustomOptionParser.html#method-c-new","(banner = nil, width = 32, indent = ' ' * 4)",""],["new","GenerateList","GenerateList.html#method-c-new","(type, verbose)","
TODO : add a last ‘/ to repo_directory if it’s not present\n"],["new","WpItem","WpItem.html#method-c-new","(options)",""],["new","WpPlugin","WpPlugin.html#method-c-new","(options = {})",""],["new","WpTarget","WpTarget.html#method-c-new","(target_url, options = {})",""],["new","WpTheme","WpTheme.html#method-c-new","(options = {})",""],["new","WpUser","WpUser.html#method-c-new","(name, id, nickname)",""],["new","WpVersion","WpVersion.html#method-c-new","(number, options = {})",""],["new","WpVulnerability","WpVulnerability.html#method-c-new","(title, references, type, metasploit_modules)",""],["new","WpscanOptions","WpscanOptions.html#method-c-new","()",""],["nickname","WpUser","WpUser.html#method-i-nickname","()",""],["nickname=","WpUser","WpUser.html#method-i-nickname-3D","(new_nickname)",""],["online?","WebSite","WebSite.html#method-i-online-3F","()","
Checks if the remote website is up.\n"],["option_to_instance_variable_setter","WpscanOptions","WpscanOptions.html#method-c-option_to_instance_variable_setter","(option)",""],["option_to_symbol","CustomOptionParser","CustomOptionParser.html#method-c-option_to_symbol","(option)","
Return the MD5 hash of the page given by url\n"],["parse","SvnParser","SvnParser.html#method-i-parse","()",""],["passive_detection","WpDetector","WpDetector.html#method-c-passive_detection","(url, type, wp_content_dir)","
plugins and themes can be found in the source code :\n\n
Override for puts to enable logging\n"],["raise_invalid_proxy_format","Browser","Browser.html#method-i-raise_invalid_proxy_format","()",""],["read_entry","CacheFileStore","CacheFileStore.html#method-i-read_entry","(key)",""],["readme_url","WpItem","WpItem.html#method-i-readme_url","()","
Url for readme.txt\n"],["readme_url","WpReadme","WpReadme.html#method-i-readme_url","()",""],["red","Object","Object.html#method-i-red","(text)",""],["redirection","WebSite","WebSite.html#method-i-redirection","(url = nil)","
See if the remote url returns 30x redirect This method is recursive Return\na string with the redirection …\n"],["register","Plugins","Plugins.html#method-i-register","(*plugins)","
Should check wp-login.php if registration is enabled or not\n"],["registration_url","WpTarget","WpTarget.html#method-i-registration_url","()",""],["remove_junk_from_nickname","WpUsernames","WpUsernames.html#method-i-remove_junk_from_nickname","(usernames)",""],["repo_directory_arguments","GitUpdater","GitUpdater.html#method-i-repo_directory_arguments","()",""],["require_files_from_directory","Object","Object.html#method-i-require_files_from_directory","(absolute_dir_path, files_pattern = \"*.rb\")","
TODO : add an exclude pattern ?\n"],["reset","Browser","Browser.html#method-c-reset","()",""],["reset_head","GitUpdater","GitUpdater.html#method-i-reset_head","()",""],["results","CustomOptionParser","CustomOptionParser.html#method-i-results","(argv = default_argv)","
Will try to find the rss url in the homepage Only the first one found iw\nreturned\n"],["run","CheckerPlugin","CheckerPlugin.html#method-i-run","(options = {})",""],["run","ListGeneratorPlugin","ListGeneratorPlugin.html#method-i-run","(options = {})",""],["run","Plugin","Plugin.html#method-i-run","(options = {})",""],["save","GenerateList","GenerateList.html#method-i-save","(items)","
Save the file\n"],["search_replace_db_2_exists?","WpTarget","WpTarget.html#method-i-search_replace_db_2_exists-3F","()",""],["search_replace_db_2_url","WpTarget","WpTarget.html#method-i-search_replace_db_2_url","()","
Script for replacing strings in wordpress databases reveals databse\ncredentials after hitting submit …\n"],["set_file_name","GenerateList","GenerateList.html#method-i-set_file_name","(type)",""],["set_option_from_cli","WpscanOptions","WpscanOptions.html#method-i-set_option_from_cli","(cli_option, cli_value)","
To string. Adds a version number if detected\n"],["update","GitUpdater","GitUpdater.html#method-i-update","()",""],["update","SvnUpdater","SvnUpdater.html#method-i-update","()",""],["update","Updater","Updater.html#method-i-update","()",""],["url","WpTarget","WpTarget.html#method-i-url","()","
Alias of @uri.to_s\n"],["url=","WpscanOptions","WpscanOptions.html#method-i-url-3D","(url)",""],["usage","Object","Object.html#method-i-usage","()","
return the user agent, according to the user_agent_mode\n"],["user_agent_mode=","Browser","Browser.html#method-i-user_agent_mode-3D","(ua_mode)",""],["usernames","WpUsernames","WpUsernames.html#method-i-usernames","(options = {})","
Enumerate wordpress usernames by using Veronica Valeros’s technique:\nseclists.org/fulldisclosure/2011/May/493 …\n"],["valid_response_codes","WpTarget","WpTarget.html#method-c-valid_response_codes","()","
Used to check if the version is correct: must contain at least one dot.\n"],["vulnerabilities","Vulnerable","Vulnerable.html#method-i-vulnerabilities","()","
@return an array of WpVulnerability (can be empty)\n"],["wordlist=","WpscanOptions","WpscanOptions.html#method-i-wordlist-3D","(wordlist)",""],["wordpress?","WebSite","WebSite.html#method-i-wordpress-3F","()","
check if the remote website is actually running wordpress.\n"],["wp_content_dir","WpTarget","WpTarget.html#method-i-wp_content_dir","()",""],["wp_org_item?","WpItem","WpItem.html#method-i-wp_org_item-3F","()","
returns true if this theme or plugin is hosted on wordpress.org\n"],["wp_org_url","WpItem","WpItem.html#method-i-wp_org_url","()","
The wordpress.org plugins directory URL See:\ngithub.com/wpscanteam/wpscan/issues/100\n"],["wp_plugins_dir","WpTarget","WpTarget.html#method-i-wp_plugins_dir","()",""],["wp_plugins_dir_exists?","WpTarget","WpTarget.html#method-i-wp_plugins_dir_exists-3F","()",""],["write_entry","CacheFileStore","CacheFileStore.html#method-i-write_entry","(key, data_to_store, cache_timeout)",""],["xml_rpc_url","WebSite","WebSite.html#method-i-xml_rpc_url","()",""],["CREDITS","","CREDITS.html","","
*CREDITS*\n
This file is to give credit to WPScan’s contributors. If you feel your name\nshould be in here, …\n"],["Gemfile","","Gemfile.html","","
\n"]]}}
\ No newline at end of file
+var search_data = {"index":{"searchIndex":["array","browser","bruteforce","cachefilestore","checkerplugin","customoptionparser","generatelist","gitupdater","listgeneratorplugin","malwares","object","plugin","plugins","svnparser","svnupdater","uri","updater","updaterfactory","vulnerable","website","wpconfigbackup","wpdetector","wpenumerator","wpfullpathdisclosure","wpitem","wploginprotection","wpoptions","wpplugin","wpplugins","wpreadme","wptarget","wptheme","wpthemes","wptimthumbs","wpuser","wpusernames","wpversion","wpvulnerability","wpscanoptions","<=>()","<=>()","==()","===()","===()","===()","_grep_()","add()","add_http_protocol()","add_option()","add_trailing_slash()","aggressive_detection()","author_url()","available_updaters_classes()","banner()","basic_auth=()","better_wp_security_url()","bluetrait_event_viewer_url()","brute_force()","changelog_url()","check_local_vulnerable_files()","check_options()","check_vuln_ref_urls()","clean()","clean_option()","colorize()","config_backup()","config_backup_files()","debug_log_url()","directory_listing?()","enumerate()","enumerate_all_plugins=()","enumerate_all_themes=()","enumerate_only_vulnerable_plugins=()","enumerate_only_vulnerable_themes=()","enumerate_options_from_string()","enumerate_plugins=()","enumerate_themes=()","eql?()","error_404_hash()","error_log?()","error_log_url()","escape()","extract_name_from_url()","extract_nickname_from_body()","find()","find()","find_from_advanced_fingerprinting()","find_from_atom_generator()","find_from_css_link()","find_from_links_opml()","find_from_meta_generator()","find_from_rdf_generator()","find_from_readme()","find_from_rss_generator()","find_from_sitemap_generator()","find_from_wooframework()","forge_request()","full_path_disclosure_url()","generate_full_list()","generate_items()","generate_popular_list()","get()","get_entry_file_path()","get_equal_string_end()","get_full_url()","get_metasploit_url()","get_nickname_from_response()","get_nickname_from_url()","get_opt_long()","get_popular_items()","get_sub_folder()","get_updater()","get_url_without_filename()","green()","grep()","has_basic_auth?()","has_better_wp_security_protection?()","has_bluetrait_event_viewer_protection?()","has_changelog?()","has_debug_log?()","has_full_path_disclosure?()","has_limit_login_attempts_protection?()","has_local_changes?()","has_login_lock_protection?()","has_login_lockdown_protection?()","has_login_protection?()","has_login_security_solution_protection?()","has_malwares?()","has_options?()","has_readme?()","has_readme?()","has_simple_login_lockdown_protection?()","has_timthumbs?()","has_xml_rpc?()","help()","homepage_hash()","id()","id=()","instance()","is_installed?()","is_installed?()","is_installed?()","is_long_option?()","is_multisite?()","limit_login_attempts_url()","lines_in_file()","load_config()","load_from_arguments()","local_revision_number()","local_revision_number()","local_revision_number()","login_protection_plugin()","login_security_solution_url()","login_url()","malware_pattern()","malwares()","malwares_file()","max_threads=()","merge_request_params()","name()","name=()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","nickname()","nickname=()","online?()","option_to_instance_variable_setter()","option_to_symbol()","output_vulnerabilities()","page_hash()","parse()","passive_detection()","plugins_from_aggressive_detection()","plugins_from_passive_detection()","post()","proxy=()","proxy_auth=()","proxy_auth=()","puts()","raise_invalid_proxy_auth_format()","read_entry()","readme_url()","readme_url()","red()","redirection()","register()","register_options()","register_plugin()","registration_enabled?()","registration_url()","remove_junk_from_nickname()","repo_directory_arguments()","require_files_from_directory()","reset()","reset_head()","results()","rss_url()","run()","run()","run()","save()","search_replace_db_2_exists?()","search_replace_db_2_url()","set_file_name()","set_option_from_cli()","simple_login_lockdown_url()","targets_url_from_theme()","theme()","themes_from_aggressive_detection()","themes_from_passive_detection()","threads=()","timthumbs()","to_h()","to_s()","update()","update()","update()","url()","url=()","usage()","user_agent()","user_agent_mode=()","usernames()","valid_response_codes()","version()","version()","version_pattern()","vulnerabilities()","wordlist=()","wordpress?()","wp_content_dir()","wp_org_item?()","wp_org_url()","wp_plugins_dir()","wp_plugins_dir_exists?()","write_entry()","xml_rpc_url()","credits","gemfile","readme","log"],"longSearchIndex":["array","browser","bruteforce","cachefilestore","checkerplugin","customoptionparser","generatelist","gitupdater","listgeneratorplugin","malwares","object","plugin","plugins","svnparser","svnupdater","uri","updater","updaterfactory","vulnerable","website","wpconfigbackup","wpdetector","wpenumerator","wpfullpathdisclosure","wpitem","wploginprotection","wpoptions","wpplugin","wpplugins","wpreadme","wptarget","wptheme","wpthemes","wptimthumbs","wpuser","wpusernames","wpversion","wpvulnerability","wpscanoptions","wpitem#<=>()","wpuser#<=>()","wpitem#==()","wpitem#===()","wptheme#===()","wpuser#===()","array#_grep_()","customoptionparser#add()","object#add_http_protocol()","customoptionparser#add_option()","object#add_trailing_slash()","wpdetector::aggressive_detection()","wpusernames#author_url()","updaterfactory::available_updaters_classes()","object#banner()","wpscanoptions#basic_auth=()","wploginprotection#better_wp_security_url()","wploginprotection#bluetrait_event_viewer_url()","bruteforce#brute_force()","wpitem#changelog_url()","checkerplugin#check_local_vulnerable_files()","wpoptions::check_options()","checkerplugin#check_vuln_ref_urls()","cachefilestore#clean()","wpscanoptions::clean_option()","object#colorize()","wpconfigbackup#config_backup()","wpconfigbackup::config_backup_files()","wptarget#debug_log_url()","wpitem#directory_listing?()","wpenumerator::enumerate()","wpscanoptions#enumerate_all_plugins=()","wpscanoptions#enumerate_all_themes=()","wpscanoptions#enumerate_only_vulnerable_plugins=()","wpscanoptions#enumerate_only_vulnerable_themes=()","wpscanoptions#enumerate_options_from_string()","wpscanoptions#enumerate_plugins=()","wpscanoptions#enumerate_themes=()","wpuser#eql?()","website#error_404_hash()","wpplugin#error_log?()","wpplugin#error_log_url()","uri::escape()","wpitem#extract_name_from_url()","wpusernames#extract_nickname_from_body()","wptheme::find()","wpversion::find()","wpversion::find_from_advanced_fingerprinting()","wpversion::find_from_atom_generator()","wptheme::find_from_css_link()","wpversion::find_from_links_opml()","wpversion::find_from_meta_generator()","wpversion::find_from_rdf_generator()","wpversion::find_from_readme()","wpversion::find_from_rss_generator()","wpversion::find_from_sitemap_generator()","wptheme::find_from_wooframework()","browser#forge_request()","wpfullpathdisclosure#full_path_disclosure_url()","generatelist#generate_full_list()","wpenumerator::generate_items()","generatelist#generate_popular_list()","browser#get()","cachefilestore#get_entry_file_path()","object#get_equal_string_end()","wpitem#get_full_url()","object#get_metasploit_url()","wpusernames#get_nickname_from_response()","wpusernames#get_nickname_from_url()","wpscanoptions::get_opt_long()","generatelist#get_popular_items()","wpitem#get_sub_folder()","updaterfactory::get_updater()","wpitem#get_url_without_filename()","object#green()","array#grep()","website#has_basic_auth?()","wploginprotection#has_better_wp_security_protection?()","wploginprotection#has_bluetrait_event_viewer_protection?()","wpitem#has_changelog?()","wptarget#has_debug_log?()","wpfullpathdisclosure#has_full_path_disclosure?()","wploginprotection#has_limit_login_attempts_protection?()","gitupdater#has_local_changes?()","wploginprotection#has_login_lock_protection?()","wploginprotection#has_login_lockdown_protection?()","wploginprotection#has_login_protection?()","wploginprotection#has_login_security_solution_protection?()","malwares#has_malwares?()","wpscanoptions#has_options?()","wpitem#has_readme?()","wpreadme#has_readme?()","wploginprotection#has_simple_login_lockdown_protection?()","wptimthumbs#has_timthumbs?()","website#has_xml_rpc?()","object#help()","website#homepage_hash()","wpuser#id()","wpuser#id=()","browser::instance()","gitupdater#is_installed?()","svnupdater#is_installed?()","updater#is_installed?()","wpscanoptions::is_long_option?()","wptarget#is_multisite?()","wploginprotection#limit_login_attempts_url()","bruteforce::lines_in_file()","browser#load_config()","wpscanoptions::load_from_arguments()","gitupdater#local_revision_number()","svnupdater#local_revision_number()","updater#local_revision_number()","wploginprotection#login_protection_plugin()","wploginprotection#login_security_solution_url()","wptarget#login_url()","malwares::malware_pattern()","malwares#malwares()","malwares::malwares_file()","browser#max_threads=()","browser#merge_request_params()","wpuser#name()","wpuser#name=()","cachefilestore::new()","checkerplugin::new()","customoptionparser::new()","generatelist::new()","listgeneratorplugin::new()","plugin::new()","plugins::new()","svnparser::new()","updater::new()","wpitem::new()","wpplugin::new()","wptarget::new()","wptheme::new()","wpuser::new()","wpversion::new()","wpvulnerability::new()","wpscanoptions::new()","wpuser#nickname()","wpuser#nickname=()","website#online?()","wpscanoptions::option_to_instance_variable_setter()","customoptionparser::option_to_symbol()","object#output_vulnerabilities()","website::page_hash()","svnparser#parse()","wpdetector::passive_detection()","wpplugins#plugins_from_aggressive_detection()","wpplugins#plugins_from_passive_detection()","browser#post()","wpscanoptions#proxy=()","browser#proxy_auth=()","wpscanoptions#proxy_auth=()","object#puts()","browser#raise_invalid_proxy_auth_format()","cachefilestore#read_entry()","wpitem#readme_url()","wpreadme#readme_url()","object#red()","website#redirection()","plugins#register()","plugin#register_options()","plugins#register_plugin()","wptarget#registration_enabled?()","wptarget#registration_url()","wpusernames#remove_junk_from_nickname()","gitupdater#repo_directory_arguments()","object#require_files_from_directory()","browser::reset()","gitupdater#reset_head()","customoptionparser#results()","website#rss_url()","checkerplugin#run()","listgeneratorplugin#run()","plugin#run()","generatelist#save()","wptarget#search_replace_db_2_exists?()","wptarget#search_replace_db_2_url()","generatelist#set_file_name()","wpscanoptions#set_option_from_cli()","wploginprotection#simple_login_lockdown_url()","wptimthumbs#targets_url_from_theme()","wptarget#theme()","wpthemes#themes_from_aggressive_detection()","wpthemes#themes_from_passive_detection()","wpscanoptions#threads=()","wptimthumbs#timthumbs()","wpscanoptions#to_h()","wpitem#to_s()","gitupdater#update()","svnupdater#update()","updater#update()","wptarget#url()","wpscanoptions#url=()","object#usage()","browser#user_agent()","browser#user_agent_mode=()","wpusernames#usernames()","wptarget::valid_response_codes()","wpitem#version()","wptarget#version()","wpversion::version_pattern()","vulnerable#vulnerabilities()","wpscanoptions#wordlist=()","website#wordpress?()","wptarget#wp_content_dir()","wpitem#wp_org_item?()","wpitem#wp_org_url()","wptarget#wp_plugins_dir()","wptarget#wp_plugins_dir_exists?()","cachefilestore#write_entry()","website#xml_rpc_url()","","","",""],"info":[["Array","","Array.html","",""],["Browser","","Browser.html","",""],["BruteForce","","BruteForce.html","",""],["CacheFileStore","","CacheFileStore.html","",""],["CheckerPlugin","","CheckerPlugin.html","","\n
WPScan - WordPress Security Scanner\nCopyright (C) 2012-2013\n\nThis program is free software: you can redistribute ...
WPScan - WordPress Security Scanner\nCopyright (C) 2012-2013\n\nThis program is free software: you can redistribute ...
\n"],["GenerateList","","GenerateList.html","","
This tool generates a list to use for plugin and theme enumeration\n"],["GitUpdater","","GitUpdater.html","",""],["ListGeneratorPlugin","","ListGeneratorPlugin.html","","\n
WPScan - WordPress Security Scanner\nCopyright (C) 2012-2013\n\nThis program is free software: you can redistribute ...
WPScan - WordPress Security Scanner\nCopyright (C) 2012-2013\n\nThis program is free software: you can redistribute ...
\n"],["Plugins","","Plugins.html","","\n
WPScan - WordPress Security Scanner\nCopyright (C) 2012-2013\n\nThis program is free software: you can redistribute ...
\n"],["SvnParser","","SvnParser.html","","
This Class Parses SVN Repositories via HTTP\n"],["SvnUpdater","","SvnUpdater.html","",""],["URI","","URI.html","",""],["Updater","","Updater.html","","
This class act as an absract one\n"],["UpdaterFactory","","UpdaterFactory.html","",""],["Vulnerable","","Vulnerable.html","",""],["WebSite","","WebSite.html","",""],["WpConfigBackup","","WpConfigBackup.html","",""],["WpDetector","","WpDetector.html","",""],["WpEnumerator","","WpEnumerator.html","","
Enumerate over a given set of items and check if they exist\n"],["WpFullPathDisclosure","","WpFullPathDisclosure.html","",""],["WpItem","","WpItem.html","",""],["WpLoginProtection","","WpLoginProtection.html","",""],["WpOptions","","WpOptions.html","","
Options Hash\n
Options\n
url - The base URL of the WordPress site\n"],["WpPlugin","","WpPlugin.html","",""],["WpPlugins","","WpPlugins.html","",""],["WpReadme","","WpReadme.html","",""],["WpTarget","","WpTarget.html","",""],["WpTheme","","WpTheme.html","",""],["WpThemes","","WpThemes.html","",""],["WpTimthumbs","","WpTimthumbs.html","",""],["WpUser","","WpUser.html","",""],["WpUsernames","","WpUsernames.html","",""],["WpVersion","","WpVersion.html","",""],["WpVulnerability","","WpVulnerability.html","",""],["WpscanOptions","","WpscanOptions.html","",""],["<=>","WpItem","WpItem.html#method-i-3C-3D-3E","(other)","
Url for changelog.txt\n"],["check_local_vulnerable_files","CheckerPlugin","CheckerPlugin.html#method-i-check_local_vulnerable_files","(dir_to_scan)",""],["check_options","WpOptions","WpOptions.html#method-c-check_options","(options)",""],["check_vuln_ref_urls","CheckerPlugin","CheckerPlugin.html#method-i-check_vuln_ref_urls","()",""],["clean","CacheFileStore","CacheFileStore.html#method-i-clean","()",""],["clean_option","WpscanOptions","WpscanOptions.html#method-c-clean_option","(option)","
Will removed the ‘-’ or ‘–’ chars at the beginning of option and replace\nany remaining ‘-’ by ‘_’\n
Checks to see if wp-config.php has a backup See www.feross.org/cmsploit/\nreturn an array of backup config …\n"],["config_backup_files","WpConfigBackup","WpConfigBackup.html#method-c-config_backup_files","()","
Is directory listing enabled?\n"],["enumerate","WpEnumerator","WpEnumerator.html#method-c-enumerate","(options = {}, items = nil)","
Enumerate the given Targets\n
Attributes\n
targets - targets to enumerate\n"],["enumerate_all_plugins=","WpscanOptions","WpscanOptions.html#method-i-enumerate_all_plugins-3D","(enumerate_all_plugins)",""],["enumerate_all_themes=","WpscanOptions","WpscanOptions.html#method-i-enumerate_all_themes-3D","(enumerate_all_themes)",""],["enumerate_only_vulnerable_plugins=","WpscanOptions","WpscanOptions.html#method-i-enumerate_only_vulnerable_plugins-3D","(enumerate_only_vulnerable_plugins)",""],["enumerate_only_vulnerable_themes=","WpscanOptions","WpscanOptions.html#method-i-enumerate_only_vulnerable_themes-3D","(enumerate_only_vulnerable_themes)",""],["enumerate_options_from_string","WpscanOptions","WpscanOptions.html#method-i-enumerate_options_from_string","(value)","
Will set enumerate_* from the string value IE : if value = vp =>\n:enumerate_only_vulnerable_plugins …\n"],["enumerate_plugins=","WpscanOptions","WpscanOptions.html#method-i-enumerate_plugins-3D","(enumerate_plugins)",""],["enumerate_themes=","WpscanOptions","WpscanOptions.html#method-i-enumerate_themes-3D","(enumerate_themes)",""],["eql?","WpUser","WpUser.html#method-i-eql-3F","(other)",""],["error_404_hash","WebSite","WebSite.html#method-i-error_404_hash","()","
Return the MD5 hash of a 404 page\n"],["error_log?","WpPlugin","WpPlugin.html#method-i-error_log-3F","()","
Discover any error_log files created by WordPress These are created by the\nWordPress error_log() function …\n"],["error_log_url","WpPlugin","WpPlugin.html#method-i-error_log_url","()",""],["escape","URI","URI.html#method-c-escape","(str)",""],["extract_name_from_url","WpItem","WpItem.html#method-i-extract_name_from_url","()","
Extract item name from a url\n"],["extract_nickname_from_body","WpUsernames","WpUsernames.html#method-i-extract_nickname_from_body","(body)",""],["find","WpTheme","WpTheme.html#method-c-find","(target_uri)",""],["find","WpVersion","WpVersion.html#method-c-find","(target_uri, wp_content_dir)","
Will use all method self.find_from_* to try to detect the version Once the\nversion is found, it will …\n"],["find_from_advanced_fingerprinting","WpVersion","WpVersion.html#method-c-find_from_advanced_fingerprinting","(options)","
Uses data/wp_versions.xml to try to identify a wordpress version.\n
It does this by using client side file …\n"],["find_from_atom_generator","WpVersion","WpVersion.html#method-c-find_from_atom_generator","(options)","
Attempts to find the WordPress version from, the generator tag in the Atom\nsource.\n"],["find_from_css_link","WpTheme","WpTheme.html#method-c-find_from_css_link","(target_uri)","
Discover the wordpress theme name by parsing the css link rel\n"],["find_from_links_opml","WpVersion","WpVersion.html#method-c-find_from_links_opml","(options)","
Attempts to find the WordPress version from the p-links-opml.php file.\n"],["find_from_meta_generator","WpVersion","WpVersion.html#method-c-find_from_meta_generator","(options)","
Attempts to find the wordpress version from, the generator meta tag in the\nhtml source.\n
The meta tag can …\n"],["find_from_rdf_generator","WpVersion","WpVersion.html#method-c-find_from_rdf_generator","(options)","
Attempts to find WordPress version from, the generator tag in the RDF feed\nsource.\n"],["find_from_readme","WpVersion","WpVersion.html#method-c-find_from_readme","(options)","
Attempts to find the WordPress version from the readme.html file.\n"],["find_from_rss_generator","WpVersion","WpVersion.html#method-c-find_from_rss_generator","(options)","
Attempts to find the WordPress version from, the generator tag in the RSS\nfeed source.\n"],["find_from_sitemap_generator","WpVersion","WpVersion.html#method-c-find_from_sitemap_generator","(options)","
Attempts to find the WordPress version from the sitemap.xml file.\n
Gets the string all elements in stringarray ends with\n"],["get_full_url","WpItem","WpItem.html#method-i-get_full_url","()","
Get the full url for this item\n"],["get_metasploit_url","Object","Object.html#method-i-get_metasploit_url","(module_path)",""],["get_nickname_from_response","WpUsernames","WpUsernames.html#method-i-get_nickname_from_response","(resp)",""],["get_nickname_from_url","WpUsernames","WpUsernames.html#method-i-get_nickname_from_url","(url)",""],["get_opt_long","WpscanOptions","WpscanOptions.html#method-c-get_opt_long","()","
Even if a short option is given (IE : -u), the long one will be returned\n(IE : –url)\n"],["get_popular_items","GenerateList","GenerateList.html#method-i-get_popular_items","(pages)","
Send a HTTP request to the WordPress most popular theme or plugin webpage\nparse the response for the …\n"],["get_sub_folder","WpItem","WpItem.html#method-i-get_sub_folder","()",""],["get_updater","UpdaterFactory","UpdaterFactory.html#method-c-get_updater","(repo_directory)",""],["get_url_without_filename","WpItem","WpItem.html#method-i-get_url_without_filename","()","
Gets the full url for this item without filenames\n"],["green","Object","Object.html#method-i-green","(text)",""],["grep","Array","Array.html#method-i-grep","(regexp)",""],["has_basic_auth?","WebSite","WebSite.html#method-i-has_basic_auth-3F","()",""],["has_better_wp_security_protection?","WpLoginProtection","WpLoginProtection.html#method-i-has_better_wp_security_protection-3F","()","
Check for Full Path Disclosure (FPD)\n"],["has_limit_login_attempts_protection?","WpLoginProtection","WpLoginProtection.html#method-i-has_limit_login_attempts_protection-3F","()","
Thanks to Alip Aswalid for providing this method.\nwordpress.org/extend/plugins/login-lockdown/\n"],["has_login_protection?","WpLoginProtection","WpLoginProtection.html#method-i-has_login_protection-3F","()",""],["has_login_security_solution_protection?","WpLoginProtection","WpLoginProtection.html#method-i-has_login_security_solution_protection-3F","()","
This file comes by default in a wordpress installation, and …\n"],["has_simple_login_lockdown_protection?","WpLoginProtection","WpLoginProtection.html#method-i-has_simple_login_lockdown_protection-3F","()","
Counts the number of lines in the wordlist It can take a couple of minutes\non large wordlists, although …\n"],["load_config","Browser","Browser.html#method-i-load_config","(config_file = nil)","
TODO reload hydra (if the .load_config is called on a browser object, hydra\nwill not have the new @max_threads …\n"],["load_from_arguments","WpscanOptions","WpscanOptions.html#method-c-load_from_arguments","()","
Will load the options from ARGV return WpscanOptions\n"],["local_revision_number","GitUpdater","GitUpdater.html#method-i-local_revision_number","()","
Git has not a revsion number like SVN, so we will take the 7 first chars of\nthe last commit hash\n"],["local_revision_number","SvnUpdater","SvnUpdater.html#method-i-local_revision_number","()",""],["local_revision_number","Updater","Updater.html#method-i-local_revision_number","()",""],["login_protection_plugin","WpLoginProtection","WpLoginProtection.html#method-i-login_protection_plugin","()","
Checks if a login protection plugin is enabled\ncode.google.com/p/wpscan/issues/detail?id=111 return a …\n"],["login_security_solution_url","WpLoginProtection","WpLoginProtection.html#method-i-login_security_solution_url","()",""],["login_url","WpTarget","WpTarget.html#method-i-login_url","()",""],["malware_pattern","Malwares","Malwares.html#method-c-malware_pattern","(url_regex)",""],["malwares","Malwares","Malwares.html#method-i-malwares","(malwares_file_path = nil)","
return array of string (url of malwares found)\n"],["malwares_file","Malwares","Malwares.html#method-c-malwares_file","(malwares_file_path)",""],["max_threads=","Browser","Browser.html#method-i-max_threads-3D","(max_threads)",""],["merge_request_params","Browser","Browser.html#method-i-merge_request_params","(params = {})",""],["name","WpUser","WpUser.html#method-i-name","()",""],["name=","WpUser","WpUser.html#method-i-name-3D","(new_name)",""],["new","CacheFileStore","CacheFileStore.html#method-c-new","(storage_path, serializer = Marshal)","
The serializer must have the 2 methods .load and .dump\n\n
(Marshal and YAML have them)
\n
YAML is Human Readable …\n"],["new","CheckerPlugin","CheckerPlugin.html#method-c-new","()",""],["new","CustomOptionParser","CustomOptionParser.html#method-c-new","(banner = nil, width = 32, indent = ' ' * 4)",""],["new","GenerateList","GenerateList.html#method-c-new","(type, verbose)","
TODO : add a last ‘/ to repo_directory if it’s not present\n"],["new","WpItem","WpItem.html#method-c-new","(options)",""],["new","WpPlugin","WpPlugin.html#method-c-new","(options = {})",""],["new","WpTarget","WpTarget.html#method-c-new","(target_url, options = {})",""],["new","WpTheme","WpTheme.html#method-c-new","(options = {})",""],["new","WpUser","WpUser.html#method-c-new","(name, id, nickname)",""],["new","WpVersion","WpVersion.html#method-c-new","(number, options = {})",""],["new","WpVulnerability","WpVulnerability.html#method-c-new","(title, references, type, metasploit_modules)",""],["new","WpscanOptions","WpscanOptions.html#method-c-new","()",""],["nickname","WpUser","WpUser.html#method-i-nickname","()",""],["nickname=","WpUser","WpUser.html#method-i-nickname-3D","(new_nickname)",""],["online?","WebSite","WebSite.html#method-i-online-3F","()","
Checks if the remote website is up.\n"],["option_to_instance_variable_setter","WpscanOptions","WpscanOptions.html#method-c-option_to_instance_variable_setter","(option)",""],["option_to_symbol","CustomOptionParser","CustomOptionParser.html#method-c-option_to_symbol","(option)","
Return the MD5 hash of the page given by url\n"],["parse","SvnParser","SvnParser.html#method-i-parse","()",""],["passive_detection","WpDetector","WpDetector.html#method-c-passive_detection","(url, type, wp_content_dir)","
plugins and themes can be found in the source code :\n\n
Override for puts to enable logging\n"],["raise_invalid_proxy_auth_format","Browser","Browser.html#method-i-raise_invalid_proxy_auth_format","()",""],["read_entry","CacheFileStore","CacheFileStore.html#method-i-read_entry","(key)",""],["readme_url","WpItem","WpItem.html#method-i-readme_url","()","
Url for readme.txt\n"],["readme_url","WpReadme","WpReadme.html#method-i-readme_url","()",""],["red","Object","Object.html#method-i-red","(text)",""],["redirection","WebSite","WebSite.html#method-i-redirection","(url = nil)","
See if the remote url returns 30x redirect This method is recursive Return\na string with the redirection …\n"],["register","Plugins","Plugins.html#method-i-register","(*plugins)","
Should check wp-login.php if registration is enabled or not\n"],["registration_url","WpTarget","WpTarget.html#method-i-registration_url","()",""],["remove_junk_from_nickname","WpUsernames","WpUsernames.html#method-i-remove_junk_from_nickname","(usernames)",""],["repo_directory_arguments","GitUpdater","GitUpdater.html#method-i-repo_directory_arguments","()",""],["require_files_from_directory","Object","Object.html#method-i-require_files_from_directory","(absolute_dir_path, files_pattern = '*.rb')","
TODO : add an exclude pattern ?\n"],["reset","Browser","Browser.html#method-c-reset","()",""],["reset_head","GitUpdater","GitUpdater.html#method-i-reset_head","()",""],["results","CustomOptionParser","CustomOptionParser.html#method-i-results","(argv = default_argv)","
Will try to find the rss url in the homepage Only the first one found iw\nreturned\n"],["run","CheckerPlugin","CheckerPlugin.html#method-i-run","(options = {})",""],["run","ListGeneratorPlugin","ListGeneratorPlugin.html#method-i-run","(options = {})",""],["run","Plugin","Plugin.html#method-i-run","(options = {})",""],["save","GenerateList","GenerateList.html#method-i-save","(items)","
Save the file\n"],["search_replace_db_2_exists?","WpTarget","WpTarget.html#method-i-search_replace_db_2_exists-3F","()",""],["search_replace_db_2_url","WpTarget","WpTarget.html#method-i-search_replace_db_2_url","()","
Script for replacing strings in wordpress databases reveals databse\ncredentials after hitting submit …\n"],["set_file_name","GenerateList","GenerateList.html#method-i-set_file_name","(type)",""],["set_option_from_cli","WpscanOptions","WpscanOptions.html#method-i-set_option_from_cli","(cli_option, cli_value)","
To string. Adds a version number if detected\n"],["update","GitUpdater","GitUpdater.html#method-i-update","()",""],["update","SvnUpdater","SvnUpdater.html#method-i-update","()",""],["update","Updater","Updater.html#method-i-update","()",""],["url","WpTarget","WpTarget.html#method-i-url","()","
Alias of @uri.to_s\n"],["url=","WpscanOptions","WpscanOptions.html#method-i-url-3D","(url)",""],["usage","Object","Object.html#method-i-usage","()","
return the user agent, according to the user_agent_mode\n"],["user_agent_mode=","Browser","Browser.html#method-i-user_agent_mode-3D","(ua_mode)",""],["usernames","WpUsernames","WpUsernames.html#method-i-usernames","(options = {})","
Enumerate wordpress usernames by using Veronica Valeros’s technique:\nseclists.org/fulldisclosure/2011/May/493 …\n"],["valid_response_codes","WpTarget","WpTarget.html#method-c-valid_response_codes","()","
Used to check if the version is correct: must contain at least one dot.\n"],["vulnerabilities","Vulnerable","Vulnerable.html#method-i-vulnerabilities","()","
@return an array of WpVulnerability (can be empty)\n"],["wordlist=","WpscanOptions","WpscanOptions.html#method-i-wordlist-3D","(wordlist)",""],["wordpress?","WebSite","WebSite.html#method-i-wordpress-3F","()","
check if the remote website is actually running wordpress.\n"],["wp_content_dir","WpTarget","WpTarget.html#method-i-wp_content_dir","()",""],["wp_org_item?","WpItem","WpItem.html#method-i-wp_org_item-3F","()","
returns true if this theme or plugin is hosted on wordpress.org\n"],["wp_org_url","WpItem","WpItem.html#method-i-wp_org_url","()","
The wordpress.org plugins directory URL See:\ngithub.com/wpscanteam/wpscan/issues/100\n"],["wp_plugins_dir","WpTarget","WpTarget.html#method-i-wp_plugins_dir","()",""],["wp_plugins_dir_exists?","WpTarget","WpTarget.html#method-i-wp_plugins_dir_exists-3F","()",""],["write_entry","CacheFileStore","CacheFileStore.html#method-i-write_entry","(key, data_to_store, cache_timeout)",""],["xml_rpc_url","WebSite","WebSite.html#method-i-xml_rpc_url","()",""],["CREDITS","","CREDITS.html","","
*CREDITS*\n
This file is to give credit to WPScan’s contributors. If you feel your name\nshould be in here, …\n"],["Gemfile","","Gemfile.html","","
-Do wordlist password brute force on enumerated users using 50 threads …
+ruby /Users/firefart/Coding/wpscan_master/wpscan.rb –url www.example.com –wordlist darkc0de.lst
+–threads 50
+
+
-Do wordlist password brute force on the ‘admin’ username only … ruby
+/Users/firefart/Coding/wpscan_master/wpscan.rb –url www.example.com –wordlist darkc0de.lst
+–username admin
+
+
-Enumerate installed plugins … ruby
+/Users/firefart/Coding/wpscan_master/wpscan.rb –url www.example.com –enumerate p
+
+
-Enumerate installed themes … ruby
+/Users/firefart/Coding/wpscan_master/wpscan.rb –url www.example.com –enumerate t
+
+
-Enumerate users … ruby /Users/firefart/Coding/wpscan_master/wpscan.rb –url
+www.example.com –enumerate u