wpscan 3.4.5 → 3.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,
|