wpscan 3.4.5 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +21 -14
- data/app/app.rb +2 -0
- data/app/controllers.rb +2 -0
- data/app/controllers/aliases.rb +2 -0
- data/app/controllers/core.rb +6 -4
- data/app/controllers/custom_directories.rb +3 -1
- data/app/controllers/enumeration.rb +6 -0
- data/app/controllers/enumeration/cli_options.rb +2 -0
- data/app/controllers/enumeration/enum_methods.rb +2 -0
- data/app/controllers/main_theme.rb +2 -0
- data/app/controllers/password_attack.rb +6 -4
- data/app/controllers/wp_version.rb +2 -0
- data/app/finders.rb +2 -0
- data/app/finders/config_backups.rb +2 -0
- data/app/finders/config_backups/known_filenames.rb +4 -3
- data/app/finders/db_exports.rb +2 -0
- data/app/finders/db_exports/known_locations.rb +15 -3
- data/app/finders/interesting_findings.rb +2 -0
- data/app/finders/interesting_findings/backup_db.rb +5 -4
- data/app/finders/interesting_findings/debug_log.rb +3 -1
- data/app/finders/interesting_findings/duplicator_installer_log.rb +6 -5
- data/app/finders/interesting_findings/emergency_pwd_reset_script.rb +6 -4
- data/app/finders/interesting_findings/full_path_disclosure.rb +3 -1
- data/app/finders/interesting_findings/mu_plugins.rb +4 -2
- data/app/finders/interesting_findings/multisite.rb +3 -1
- data/app/finders/interesting_findings/readme.rb +8 -6
- data/app/finders/interesting_findings/registration.rb +3 -1
- data/app/finders/interesting_findings/tmm_db_migrate.rb +4 -2
- data/app/finders/interesting_findings/upload_directory_listing.rb +3 -1
- data/app/finders/interesting_findings/upload_sql_dump.rb +8 -10
- data/app/finders/interesting_findings/wp_cron.rb +3 -1
- data/app/finders/main_theme.rb +2 -0
- data/app/finders/main_theme/css_style.rb +3 -1
- data/app/finders/main_theme/urls_in_homepage.rb +3 -1
- data/app/finders/main_theme/woo_framework_meta_generator.rb +3 -1
- data/app/finders/medias.rb +2 -0
- data/app/finders/medias/attachment_brute_forcing.rb +3 -1
- data/app/finders/passwords.rb +2 -0
- data/app/finders/passwords/wp_login.rb +4 -1
- data/app/finders/passwords/xml_rpc.rb +2 -0
- data/app/finders/passwords/xml_rpc_multicall.rb +4 -2
- data/app/finders/plugin_version.rb +4 -2
- data/app/finders/plugin_version/readme.rb +9 -5
- data/app/finders/plugins.rb +2 -0
- data/app/finders/plugins/body_pattern.rb +3 -1
- data/app/finders/plugins/comment.rb +3 -1
- data/app/finders/plugins/config_parser.rb +3 -1
- data/app/finders/plugins/header_pattern.rb +3 -1
- data/app/finders/plugins/javascript_var.rb +3 -1
- data/app/finders/plugins/known_locations.rb +10 -8
- data/app/finders/plugins/query_parameter.rb +2 -0
- data/app/finders/plugins/urls_in_homepage.rb +3 -1
- data/app/finders/plugins/xpath.rb +3 -1
- data/app/finders/theme_version.rb +4 -2
- data/app/finders/theme_version/style.rb +3 -1
- data/app/finders/theme_version/woo_framework_meta_generator.rb +3 -1
- data/app/finders/themes.rb +2 -0
- data/app/finders/themes/known_locations.rb +12 -10
- data/app/finders/themes/urls_in_homepage.rb +3 -1
- data/app/finders/timthumb_version.rb +3 -1
- data/app/finders/timthumb_version/bad_request.rb +3 -1
- data/app/finders/timthumbs.rb +2 -0
- data/app/finders/timthumbs/known_locations.rb +12 -3
- data/app/finders/users.rb +2 -0
- data/app/finders/users/author_id_brute_forcing.rb +3 -1
- data/app/finders/users/author_posts.rb +3 -1
- data/app/finders/users/login_error_messages.rb +3 -1
- data/app/finders/users/oembed_api.rb +6 -4
- data/app/finders/users/rss_generator.rb +7 -5
- data/app/finders/users/wp_json_api.rb +16 -6
- data/app/finders/users/yoast_seo_author_sitemap.rb +6 -4
- data/app/finders/wp_items.rb +2 -0
- data/app/finders/wp_items/urls_in_homepage.rb +2 -0
- data/app/finders/wp_version.rb +2 -0
- data/app/finders/wp_version/atom_generator.rb +2 -0
- data/app/finders/wp_version/rdf_generator.rb +2 -0
- data/app/finders/wp_version/readme.rb +4 -2
- data/app/finders/wp_version/rss_generator.rb +2 -0
- data/app/finders/wp_version/unique_fingerprinting.rb +3 -1
- data/app/models.rb +8 -0
- data/app/models/config_backup.rb +6 -2
- data/app/models/db_export.rb +6 -2
- data/app/models/interesting_finding.rb +36 -32
- data/app/models/media.rb +6 -2
- data/app/models/plugin.rb +25 -17
- data/app/models/theme.rb +83 -75
- data/app/models/timthumb.rb +58 -54
- data/app/models/wp_item.rb +140 -128
- data/app/models/wp_version.rb +47 -44
- data/app/models/xml_rpc.rb +18 -14
- data/app/views/cli/wp_item.erb +0 -3
- data/app/views/json/wp_item.erb +0 -1
- data/bin/wpscan +1 -0
- data/lib/wpscan.rb +2 -0
- data/lib/wpscan/browser.rb +2 -0
- data/lib/wpscan/controller.rb +2 -0
- data/lib/wpscan/controllers.rb +2 -0
- data/lib/wpscan/db.rb +2 -0
- data/lib/wpscan/db/dynamic_finders/base.rb +2 -0
- data/lib/wpscan/db/dynamic_finders/plugin.rb +4 -5
- data/lib/wpscan/db/dynamic_finders/theme.rb +2 -0
- data/lib/wpscan/db/dynamic_finders/wordpress.rb +2 -0
- data/lib/wpscan/db/fingerprints.rb +2 -0
- data/lib/wpscan/db/plugin.rb +2 -0
- data/lib/wpscan/db/plugins.rb +2 -0
- data/lib/wpscan/db/theme.rb +2 -0
- data/lib/wpscan/db/themes.rb +2 -0
- data/lib/wpscan/db/updater.rb +4 -2
- data/lib/wpscan/db/wp_item.rb +2 -0
- data/lib/wpscan/db/wp_items.rb +2 -0
- data/lib/wpscan/db/wp_version.rb +2 -0
- data/lib/wpscan/errors.rb +7 -1
- data/lib/wpscan/errors/http.rb +27 -23
- data/lib/wpscan/errors/update.rb +8 -4
- data/lib/wpscan/errors/wordpress.rb +24 -14
- data/lib/wpscan/errors/xmlrpc.rb +8 -4
- data/lib/wpscan/finders.rb +2 -0
- data/lib/wpscan/finders/dynamic_finder/finder.rb +2 -0
- data/lib/wpscan/finders/dynamic_finder/version/body_pattern.rb +2 -0
- data/lib/wpscan/finders/dynamic_finder/version/comment.rb +2 -0
- data/lib/wpscan/finders/dynamic_finder/version/config_parser.rb +2 -0
- data/lib/wpscan/finders/dynamic_finder/version/finder.rb +4 -2
- data/lib/wpscan/finders/dynamic_finder/version/header_pattern.rb +2 -0
- data/lib/wpscan/finders/dynamic_finder/version/javascript_var.rb +2 -0
- data/lib/wpscan/finders/dynamic_finder/version/query_parameter.rb +2 -0
- data/lib/wpscan/finders/dynamic_finder/version/xpath.rb +2 -0
- data/lib/wpscan/finders/dynamic_finder/wp_item_version.rb +2 -0
- data/lib/wpscan/finders/dynamic_finder/wp_items/finder.rb +4 -2
- data/lib/wpscan/finders/dynamic_finder/wp_version.rb +4 -2
- data/lib/wpscan/finders/finder/wp_version/smart_url_checker.rb +4 -2
- data/lib/wpscan/helper.rb +2 -0
- data/lib/wpscan/references.rb +2 -0
- data/lib/wpscan/target.rb +12 -1
- data/lib/wpscan/target/platform/wordpress.rb +15 -1
- data/lib/wpscan/target/platform/wordpress/custom_directories.rb +23 -3
- data/lib/wpscan/version.rb +3 -1
- data/lib/wpscan/vulnerability.rb +2 -0
- data/lib/wpscan/vulnerable.rb +2 -0
- metadata +35 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: f64d1fca83669eeb095fb99cbcbbc2a57a8967ef680bda9d754074b771bfc8dd
|
|
4
|
+
data.tar.gz: f6835052a919b6dcbefade7ec3e47e0719bdad7192e91061b742082031378886
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 148e26a2d52135e120e47cc557c7fe79a1f96c42ad3f15f6ac92eb020900fcea1dc94056c2cf8a0731fe4d60541a79e1d1353e5fd597464b92ae3dad8f18cbad
|
|
7
|
+
data.tar.gz: fcb7e45a14d14728824761e075d55a76174972be46311957cb724c85b29a05b460a80fa21012c832585fc3351ab4a34a8932c777b34fc3c7c12a5dc708ead417
|
data/README.md
CHANGED
|
@@ -1,9 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://wpscan.org/">
|
|
3
|
+
<img src="https://raw.githubusercontent.com/wpscanteam/wpscan/gh-pages/images/wpscan_logo.png" alt="WPScan logo">
|
|
4
|
+
</a>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<h3 align="center">WPScan</h3>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
WordPress Vulnerability Scanner
|
|
11
|
+
<br>
|
|
12
|
+
<br>
|
|
13
|
+
<a href="https://wpscan.org/" title="homepage" target="_blank">Homepage</a> - <a href="https://wpscan.io/" title="wpscan.io" target="_blank">WPScan.io</a> - <a href="https://wpvulndb.com/" title="vulnerability database" target="_blank">Vulnerability Database</a> - <a href="https://wordpress.org/plugins/wpscan/" title="wordpress plugin" target="_blank">WordPress Plugin</a>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center">
|
|
17
|
+
<a href="https://badge.fury.io/rb/wpscan" target="_blank"><img src="https://badge.fury.io/rb/wpscan.svg"></a>
|
|
18
|
+
<a href="https://travis-ci.org/wpscanteam/wpscan" target="_blank"><img src="https://travis-ci.org/wpscanteam/wpscan.svg?branch=master"></a>
|
|
19
|
+
<a href="https://codeclimate.com/github/wpscanteam/wpscan" target="_blank"><img src="https://codeclimate.com/github/wpscanteam/wpscan/badges/gpa.svg"></a>
|
|
20
|
+
<a href="https://www.patreon.com/wpscan" target="_blank"><img src="https://img.shields.io/badge/patreon-donate-green.svg"></a>
|
|
21
|
+
</p>
|
|
7
22
|
|
|
8
23
|
# INSTALL
|
|
9
24
|
|
|
@@ -110,14 +125,6 @@ wpscan --url https://target.tld/ --enumerate u1-100
|
|
|
110
125
|
|
|
111
126
|
** replace u1-100 with a range of your choice.
|
|
112
127
|
|
|
113
|
-
# PROJECT HOME
|
|
114
|
-
|
|
115
|
-
[https://wpscan.org](https://wpscan.org)
|
|
116
|
-
|
|
117
|
-
# VULNERABILITY DATABASE
|
|
118
|
-
|
|
119
|
-
[https://wpvulndb.com](https://wpvulndb.com)
|
|
120
|
-
|
|
121
128
|
# LICENSE
|
|
122
129
|
|
|
123
130
|
## WPScan Public Source License
|
data/app/app.rb
CHANGED
data/app/controllers.rb
CHANGED
data/app/controllers/aliases.rb
CHANGED
data/app/controllers/core.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module WPScan
|
|
2
4
|
module Controller
|
|
3
5
|
# Specific Core controller to include WordPress checks
|
|
@@ -25,7 +27,7 @@ module WPScan
|
|
|
25
27
|
# @return [ Boolean ]
|
|
26
28
|
def update_db_required?
|
|
27
29
|
if local_db.missing_files?
|
|
28
|
-
raise MissingDatabaseFile if parsed_options[:update] == false
|
|
30
|
+
raise Error::MissingDatabaseFile if parsed_options[:update] == false
|
|
29
31
|
|
|
30
32
|
return true
|
|
31
33
|
end
|
|
@@ -62,7 +64,7 @@ module WPScan
|
|
|
62
64
|
# Raises errors if the target is hosted on wordpress.com or is not running WordPress
|
|
63
65
|
# Also check if the homepage_url is still the install url
|
|
64
66
|
def check_wordpress_state
|
|
65
|
-
raise
|
|
67
|
+
raise Error::WordPressHosted if target.wordpress_hosted?
|
|
66
68
|
|
|
67
69
|
if Addressable::URI.parse(target.homepage_url).path =~ %r{/wp-admin/install.php$}i
|
|
68
70
|
|
|
@@ -71,7 +73,7 @@ module WPScan
|
|
|
71
73
|
exit(WPScan::ExitCode::VULNERABLE)
|
|
72
74
|
end
|
|
73
75
|
|
|
74
|
-
raise
|
|
76
|
+
raise Error::NotWordPress unless target.wordpress?(parsed_options[:detection_mode]) || parsed_options[:force]
|
|
75
77
|
end
|
|
76
78
|
|
|
77
79
|
# Loads the related server module in the target
|
|
@@ -95,7 +97,7 @@ module WPScan
|
|
|
95
97
|
mod = CMSScanner::Target::Server.const_get(server)
|
|
96
98
|
|
|
97
99
|
target.extend mod
|
|
98
|
-
|
|
100
|
+
Model::WpItem.include mod
|
|
99
101
|
|
|
100
102
|
server
|
|
101
103
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module WPScan
|
|
2
4
|
module Controller
|
|
3
5
|
# Controller to ensure that the wp-content and wp-plugins
|
|
@@ -16,7 +18,7 @@ module WPScan
|
|
|
16
18
|
|
|
17
19
|
return if target.content_dir
|
|
18
20
|
|
|
19
|
-
raise
|
|
21
|
+
raise Error::WpContentDirNotDetected
|
|
20
22
|
end
|
|
21
23
|
end
|
|
22
24
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require_relative 'enumeration/cli_options'
|
|
2
4
|
require_relative 'enumeration/enum_methods'
|
|
3
5
|
|
|
@@ -8,6 +10,10 @@ module WPScan
|
|
|
8
10
|
def before_scan
|
|
9
11
|
DB::DynamicFinders::Plugin.create_versions_finders
|
|
10
12
|
DB::DynamicFinders::Theme.create_versions_finders
|
|
13
|
+
|
|
14
|
+
# Force the Garbage Collector to run due to the above method being
|
|
15
|
+
# quite heavy in objects allocation
|
|
16
|
+
GC.start
|
|
11
17
|
end
|
|
12
18
|
|
|
13
19
|
def run
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module WPScan
|
|
2
4
|
module Controller
|
|
3
5
|
# Password Attack Controller
|
|
@@ -52,7 +54,7 @@ module WPScan
|
|
|
52
54
|
@attacker ||= attacker_from_cli_options || attacker_from_automatic_detection
|
|
53
55
|
end
|
|
54
56
|
|
|
55
|
-
# @return [
|
|
57
|
+
# @return [ Model::XMLRPC ]
|
|
56
58
|
def xmlrpc
|
|
57
59
|
@xmlrpc ||= target.xmlrpc
|
|
58
60
|
end
|
|
@@ -65,11 +67,11 @@ module WPScan
|
|
|
65
67
|
when :wp_login
|
|
66
68
|
WPScan::Finders::Passwords::WpLogin.new(target)
|
|
67
69
|
when :xmlrpc
|
|
68
|
-
raise XMLRPCNotDetected unless xmlrpc
|
|
70
|
+
raise Error::XMLRPCNotDetected unless xmlrpc
|
|
69
71
|
|
|
70
72
|
WPScan::Finders::Passwords::XMLRPC.new(xmlrpc)
|
|
71
73
|
when :xmlrpc_multicall
|
|
72
|
-
raise XMLRPCNotDetected unless xmlrpc
|
|
74
|
+
raise Error::XMLRPCNotDetected unless xmlrpc
|
|
73
75
|
|
|
74
76
|
WPScan::Finders::Passwords::XMLRPCMulticall.new(xmlrpc)
|
|
75
77
|
end
|
|
@@ -95,7 +97,7 @@ module WPScan
|
|
|
95
97
|
return target.users unless parsed_options[:usernames]
|
|
96
98
|
|
|
97
99
|
parsed_options[:usernames].reduce([]) do |acc, elem|
|
|
98
|
-
acc <<
|
|
100
|
+
acc << Model::User.new(elem.chomp)
|
|
99
101
|
end
|
|
100
102
|
end
|
|
101
103
|
|
data/app/finders.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module WPScan
|
|
2
4
|
module Finders
|
|
3
5
|
module ConfigBackups
|
|
@@ -13,11 +15,10 @@ module WPScan
|
|
|
13
15
|
def aggressive(opts = {})
|
|
14
16
|
found = []
|
|
15
17
|
|
|
16
|
-
enumerate(potential_urls(opts), opts) do |res|
|
|
17
|
-
# Might need to improve that
|
|
18
|
+
enumerate(potential_urls(opts), opts.merge(check_full_response: 200)) do |res|
|
|
18
19
|
next unless res.body =~ /define/i && res.body !~ /<\s?html/i
|
|
19
20
|
|
|
20
|
-
found <<
|
|
21
|
+
found << Model::ConfigBackup.new(res.request.url, found_by: DIRECT_ACCESS, confidence: 100)
|
|
21
22
|
end
|
|
22
23
|
|
|
23
24
|
found
|
data/app/finders/db_exports.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module WPScan
|
|
2
4
|
module Finders
|
|
3
5
|
module DbExports
|
|
@@ -6,6 +8,8 @@ module WPScan
|
|
|
6
8
|
class KnownLocations < CMSScanner::Finders::Finder
|
|
7
9
|
include CMSScanner::Finders::Finder::Enumerator
|
|
8
10
|
|
|
11
|
+
SQL_PATTERN = /(?:DROP|(?:UN)?LOCK|CREATE) TABLE|INSERT INTO/.freeze
|
|
12
|
+
|
|
9
13
|
# @param [ Hash ] opts
|
|
10
14
|
# @option opts [ String ] :list
|
|
11
15
|
# @option opts [ Boolean ] :show_progression
|
|
@@ -14,15 +18,23 @@ module WPScan
|
|
|
14
18
|
def aggressive(opts = {})
|
|
15
19
|
found = []
|
|
16
20
|
|
|
17
|
-
enumerate(potential_urls(opts), opts) do |res|
|
|
18
|
-
|
|
21
|
+
enumerate(potential_urls(opts), opts.merge(check_full_response: 200)) do |res|
|
|
22
|
+
if res.effective_url.end_with?('.zip')
|
|
23
|
+
next unless res.headers['Content-Type'] =~ %r{\Aapplication/zip}i
|
|
24
|
+
else
|
|
25
|
+
next unless res.body =~ SQL_PATTERN
|
|
26
|
+
end
|
|
19
27
|
|
|
20
|
-
found <<
|
|
28
|
+
found << Model::DbExport.new(res.request.url, found_by: DIRECT_ACCESS, confidence: 100)
|
|
21
29
|
end
|
|
22
30
|
|
|
23
31
|
found
|
|
24
32
|
end
|
|
25
33
|
|
|
34
|
+
def full_request_params
|
|
35
|
+
@full_request_params ||= { headers: { 'Range' => 'bytes=0-3000' } }
|
|
36
|
+
end
|
|
37
|
+
|
|
26
38
|
# @param [ Hash ] opts
|
|
27
39
|
# @option opts [ String ] :list Mandatory
|
|
28
40
|
#
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module WPScan
|
|
2
4
|
module Finders
|
|
3
5
|
module InterestingFindings
|
|
@@ -6,13 +8,12 @@ module WPScan
|
|
|
6
8
|
# @return [ InterestingFinding ]
|
|
7
9
|
def aggressive(_opts = {})
|
|
8
10
|
path = 'wp-content/backup-db/'
|
|
9
|
-
|
|
10
|
-
res = Browser.get(url)
|
|
11
|
+
res = target.head_and_get(path, [200, 403])
|
|
11
12
|
|
|
12
13
|
return unless [200, 403].include?(res.code) && !target.homepage_or_404?(res)
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
url,
|
|
15
|
+
Model::BackupDB.new(
|
|
16
|
+
target.url(path),
|
|
16
17
|
confidence: 70,
|
|
17
18
|
found_by: DIRECT_ACCESS,
|
|
18
19
|
interesting_entries: target.directory_listing_entries(path),
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module WPScan
|
|
2
4
|
module Finders
|
|
3
5
|
module InterestingFindings
|
|
@@ -9,7 +11,7 @@ module WPScan
|
|
|
9
11
|
|
|
10
12
|
return unless target.debug_log?(path)
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
Model::DebugLog.new(
|
|
13
15
|
target.url(path),
|
|
14
16
|
confidence: 100, found_by: DIRECT_ACCESS,
|
|
15
17
|
references: { url: 'https://codex.wordpress.org/Debugging_in_WordPress' }
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module WPScan
|
|
2
4
|
module Finders
|
|
3
5
|
module InterestingFindings
|
|
@@ -5,13 +7,12 @@ module WPScan
|
|
|
5
7
|
class DuplicatorInstallerLog < CMSScanner::Finders::Finder
|
|
6
8
|
# @return [ InterestingFinding ]
|
|
7
9
|
def aggressive(_opts = {})
|
|
8
|
-
|
|
9
|
-
res = Browser.get(url)
|
|
10
|
+
path = 'installer-log.txt'
|
|
10
11
|
|
|
11
|
-
return unless
|
|
12
|
+
return unless target.head_and_get(path).body =~ /DUPLICATOR INSTALL-LOG/
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
url,
|
|
14
|
+
Model::DuplicatorInstallerLog.new(
|
|
15
|
+
target.url(path),
|
|
15
16
|
confidence: 100,
|
|
16
17
|
found_by: DIRECT_ACCESS,
|
|
17
18
|
references: { url: 'https://www.exploit-db.com/ghdb/3981/' }
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module WPScan
|
|
2
4
|
module Finders
|
|
3
5
|
module InterestingFindings
|
|
@@ -5,13 +7,13 @@ module WPScan
|
|
|
5
7
|
class EmergencyPwdResetScript < CMSScanner::Finders::Finder
|
|
6
8
|
# @return [ InterestingFinding ]
|
|
7
9
|
def aggressive(_opts = {})
|
|
8
|
-
|
|
9
|
-
res =
|
|
10
|
+
path = 'emergency.php'
|
|
11
|
+
res = target.head_and_get(path)
|
|
10
12
|
|
|
11
13
|
return unless res.code == 200 && !target.homepage_or_404?(res)
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
url,
|
|
15
|
+
Model::EmergencyPwdResetScript.new(
|
|
16
|
+
target.url(path),
|
|
15
17
|
confidence: res.body =~ /password/i ? 100 : 40,
|
|
16
18
|
found_by: DIRECT_ACCESS,
|
|
17
19
|
references: {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module WPScan
|
|
2
4
|
module Finders
|
|
3
5
|
module InterestingFindings
|
|
@@ -10,7 +12,7 @@ module WPScan
|
|
|
10
12
|
|
|
11
13
|
return if fpd_entries.empty?
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
Model::FullPathDisclosure.new(
|
|
14
16
|
target.url(path),
|
|
15
17
|
confidence: 100,
|
|
16
18
|
found_by: DIRECT_ACCESS,
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module WPScan
|
|
2
4
|
module Finders
|
|
3
5
|
module InterestingFindings
|
|
@@ -12,7 +14,7 @@ module WPScan
|
|
|
12
14
|
|
|
13
15
|
url = target.url('wp-content/mu-plugins/')
|
|
14
16
|
|
|
15
|
-
return
|
|
17
|
+
return Model::MuPlugins.new(
|
|
16
18
|
url,
|
|
17
19
|
confidence: 70,
|
|
18
20
|
found_by: 'URLs In Homepage (Passive Detection)',
|
|
@@ -35,7 +37,7 @@ module WPScan
|
|
|
35
37
|
|
|
36
38
|
target.mu_plugins = true
|
|
37
39
|
|
|
38
|
-
|
|
40
|
+
Model::MuPlugins.new(
|
|
39
41
|
url,
|
|
40
42
|
confidence: 80,
|
|
41
43
|
found_by: DIRECT_ACCESS,
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module WPScan
|
|
2
4
|
module Finders
|
|
3
5
|
module InterestingFindings
|
|
@@ -15,7 +17,7 @@ module WPScan
|
|
|
15
17
|
|
|
16
18
|
target.multisite = true
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
Model::Multisite.new(
|
|
19
21
|
url,
|
|
20
22
|
confidence: 100,
|
|
21
23
|
found_by: DIRECT_ACCESS,
|