wpscan 3.5.4 → 3.5.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/password_attack.rb +20 -7
- data/app/controllers/wp_version.rb +1 -1
- data/app/finders/plugins/body_pattern.rb +1 -1
- data/app/finders/plugins/comment.rb +1 -1
- data/app/finders/plugins/config_parser.rb +1 -1
- data/app/finders/plugins/header_pattern.rb +1 -1
- data/app/finders/plugins/javascript_var.rb +1 -1
- data/app/finders/plugins/query_parameter.rb +1 -1
- data/app/finders/plugins/xpath.rb +1 -1
- data/app/finders/users/rss_generator.rb +1 -1
- data/app/finders/wp_version.rb +1 -1
- data/app/views/cli/enumeration/config_backups.erb +1 -1
- data/app/views/cli/enumeration/db_exports.erb +1 -1
- data/lib/wpscan/finders/dynamic_finder/version/body_pattern.rb +1 -1
- data/lib/wpscan/finders/dynamic_finder/version/comment.rb +1 -1
- data/lib/wpscan/finders/dynamic_finder/version/config_parser.rb +1 -1
- data/lib/wpscan/finders/dynamic_finder/version/header_pattern.rb +1 -1
- data/lib/wpscan/finders/dynamic_finder/version/javascript_var.rb +1 -1
- data/lib/wpscan/finders/dynamic_finder/version/query_parameter.rb +1 -1
- data/lib/wpscan/finders/dynamic_finder/version/xpath.rb +1 -1
- data/lib/wpscan/finders/dynamic_finder/wp_item_version.rb +7 -7
- data/lib/wpscan/finders/dynamic_finder/wp_version.rb +5 -5
- data/lib/wpscan/version.rb +1 -1
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7598b5dd35df74f49ca06db60fc8c40b636c9539e8b1543d5d649052520a48d3
|
4
|
+
data.tar.gz: a50e8653b39a843f2e9b02cb9506d1249b2a34c5d469aaa25e4774b7133ce1a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ed1bdc24f4ab7147a0c558564f7ce9d32e0310dcd6d44590f9e2e2c936dd0c5c0932b9a0bd82b12460ce5027cdbe81aaa90e9069d904c534b76e78c771b09da
|
7
|
+
data.tar.gz: b0f0ca51823c56afbed135324657602dc137f7089f34555df5977aa3ec3b0406544cde065a5ee2d1c58a36a776acb134b7760f8f5f5304e39a2b187391d3c680
|
@@ -65,30 +65,43 @@ module WPScan
|
|
65
65
|
|
66
66
|
case ParsedCli.password_attack
|
67
67
|
when :wp_login
|
68
|
-
|
68
|
+
Finders::Passwords::WpLogin.new(target)
|
69
69
|
when :xmlrpc
|
70
70
|
raise Error::XMLRPCNotDetected unless xmlrpc
|
71
71
|
|
72
|
-
|
72
|
+
Finders::Passwords::XMLRPC.new(xmlrpc)
|
73
73
|
when :xmlrpc_multicall
|
74
74
|
raise Error::XMLRPCNotDetected unless xmlrpc
|
75
75
|
|
76
|
-
|
76
|
+
Finders::Passwords::XMLRPCMulticall.new(xmlrpc)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# @return [ Boolean ]
|
81
|
+
def xmlrpc_get_users_blogs_enabled?
|
82
|
+
if xmlrpc&.enabled? &&
|
83
|
+
xmlrpc.available_methods.include?('wp.getUsersBlogs') &&
|
84
|
+
xmlrpc.method_call('wp.getUsersBlogs', [SecureRandom.hex[0, 6], SecureRandom.hex[0, 4]])
|
85
|
+
.run.body !~ /XML\-RPC services are disabled/
|
86
|
+
|
87
|
+
true
|
88
|
+
else
|
89
|
+
false
|
77
90
|
end
|
78
91
|
end
|
79
92
|
|
80
93
|
# @return [ CMSScanner::Finders::Finder ]
|
81
94
|
def attacker_from_automatic_detection
|
82
|
-
if
|
95
|
+
if xmlrpc_get_users_blogs_enabled?
|
83
96
|
wp_version = target.wp_version
|
84
97
|
|
85
98
|
if wp_version && wp_version < '4.4'
|
86
|
-
|
99
|
+
Finders::Passwords::XMLRPCMulticall.new(xmlrpc)
|
87
100
|
else
|
88
|
-
|
101
|
+
Finders::Passwords::XMLRPC.new(xmlrpc)
|
89
102
|
end
|
90
103
|
else
|
91
|
-
|
104
|
+
Finders::Passwords::WpLogin.new(target)
|
92
105
|
end
|
93
106
|
end
|
94
107
|
|
@@ -4,7 +4,7 @@ module WPScan
|
|
4
4
|
module Finders
|
5
5
|
module Plugins
|
6
6
|
# Plugins finder from Dynamic Finder 'BodyPattern'
|
7
|
-
class BodyPattern <
|
7
|
+
class BodyPattern < Finders::DynamicFinder::WpItems::Finder
|
8
8
|
DEFAULT_CONFIDENCE = 30
|
9
9
|
|
10
10
|
# @param [ Hash ] opts The options from the #passive, #aggressive methods
|
@@ -4,7 +4,7 @@ module WPScan
|
|
4
4
|
module Finders
|
5
5
|
module Plugins
|
6
6
|
# Plugins finder from the Dynamic Finder 'Comment'
|
7
|
-
class Comment <
|
7
|
+
class Comment < Finders::DynamicFinder::WpItems::Finder
|
8
8
|
DEFAULT_CONFIDENCE = 30
|
9
9
|
|
10
10
|
# @param [ Hash ] opts The options from the #passive, #aggressive methods
|
@@ -4,7 +4,7 @@ module WPScan
|
|
4
4
|
module Finders
|
5
5
|
module Plugins
|
6
6
|
# Plugins finder from Dynamic Finder 'ConfigParser'
|
7
|
-
class ConfigParser <
|
7
|
+
class ConfigParser < Finders::DynamicFinder::WpItems::Finder
|
8
8
|
DEFAULT_CONFIDENCE = 40
|
9
9
|
|
10
10
|
# @param [ Hash ] opts The options from the #passive, #aggressive methods
|
@@ -4,7 +4,7 @@ module WPScan
|
|
4
4
|
module Finders
|
5
5
|
module Plugins
|
6
6
|
# Plugins finder from Dynamic Finder 'HeaderPattern'
|
7
|
-
class HeaderPattern <
|
7
|
+
class HeaderPattern < Finders::DynamicFinder::WpItems::Finder
|
8
8
|
DEFAULT_CONFIDENCE = 30
|
9
9
|
|
10
10
|
# @param [ Hash ] opts
|
@@ -4,7 +4,7 @@ module WPScan
|
|
4
4
|
module Finders
|
5
5
|
module Plugins
|
6
6
|
# Plugins finder from the Dynamic Finder 'JavascriptVar'
|
7
|
-
class JavascriptVar <
|
7
|
+
class JavascriptVar < Finders::DynamicFinder::WpItems::Finder
|
8
8
|
DEFAULT_CONFIDENCE = 60
|
9
9
|
|
10
10
|
# @param [ Hash ] opts The options from the #passive, #aggressive methods
|
@@ -4,7 +4,7 @@ module WPScan
|
|
4
4
|
module Finders
|
5
5
|
module Plugins
|
6
6
|
# Plugins finder from Dynamic Finder 'QueryParameter'
|
7
|
-
class QueryParameter <
|
7
|
+
class QueryParameter < Finders::DynamicFinder::WpItems::Finder
|
8
8
|
DEFAULT_CONFIDENCE = 10
|
9
9
|
|
10
10
|
def passive(_opts = {})
|
@@ -4,7 +4,7 @@ module WPScan
|
|
4
4
|
module Finders
|
5
5
|
module Plugins
|
6
6
|
# Plugins finder from the Dynamic Finder 'Xpath'
|
7
|
-
class Xpath <
|
7
|
+
class Xpath < Finders::DynamicFinder::WpItems::Finder
|
8
8
|
DEFAULT_CONFIDENCE = 40
|
9
9
|
|
10
10
|
# @param [ Hash ] opts The options from the #passive, #aggressive methods
|
@@ -6,7 +6,7 @@ module WPScan
|
|
6
6
|
# Users disclosed from the dc:creator field in the RSS
|
7
7
|
# The names disclosed are display names, however depending on the configuration of the blog,
|
8
8
|
# they can be the same than usernames
|
9
|
-
class RSSGenerator <
|
9
|
+
class RSSGenerator < Finders::WpVersion::RSSGenerator
|
10
10
|
def process_urls(urls, _opts = {})
|
11
11
|
found = []
|
12
12
|
|
data/app/finders/wp_version.rb
CHANGED
@@ -28,7 +28,7 @@ module WPScan
|
|
28
28
|
# @param [ WPScan::Target ] target
|
29
29
|
def initialize(target)
|
30
30
|
(%w[RSSGenerator AtomGenerator RDFGenerator] +
|
31
|
-
|
31
|
+
DB::DynamicFinders::Wordpress.versions_finders_configs.keys +
|
32
32
|
%w[Readme UniqueFingerprinting]
|
33
33
|
).each do |finder_name|
|
34
34
|
finders << WpVersion.const_get(finder_name.to_sym).new(target)
|
@@ -6,7 +6,7 @@ module WPScan
|
|
6
6
|
module Version
|
7
7
|
# Version finder using Body Pattern method. Tipically used when the response is not
|
8
8
|
# an HTML doc and Xpath can't be used
|
9
|
-
class BodyPattern <
|
9
|
+
class BodyPattern < Finders::DynamicFinder::Version::Finder
|
10
10
|
# @return [ Hash ]
|
11
11
|
def self.child_class_constants
|
12
12
|
@child_class_constants ||= super().merge(PATTERN: nil, CONFIDENCE: 60)
|
@@ -6,7 +6,7 @@ module WPScan
|
|
6
6
|
module Version
|
7
7
|
# Version finder in Comment, which is basically an Xpath one with a default
|
8
8
|
# Xpath of //comment()
|
9
|
-
class Comment <
|
9
|
+
class Comment < Finders::DynamicFinder::Version::Xpath
|
10
10
|
# @return [ Hash ]
|
11
11
|
def self.child_class_constants
|
12
12
|
@child_class_constants ||= super().merge(PATTERN: nil, XPATH: '//comment()')
|
@@ -6,7 +6,7 @@ module WPScan
|
|
6
6
|
module Version
|
7
7
|
# Version finder using by parsing config files, such as composer.json
|
8
8
|
# and so on
|
9
|
-
class ConfigParser <
|
9
|
+
class ConfigParser < Finders::DynamicFinder::Version::Finder
|
10
10
|
ALLOWED_PARSERS = [JSON, YAML].freeze
|
11
11
|
|
12
12
|
def self.child_class_constants
|
@@ -5,7 +5,7 @@ module WPScan
|
|
5
5
|
module DynamicFinder
|
6
6
|
module Version
|
7
7
|
# Version finder using Header Pattern method
|
8
|
-
class HeaderPattern <
|
8
|
+
class HeaderPattern < Finders::DynamicFinder::Version::Finder
|
9
9
|
# @return [ Hash ]
|
10
10
|
def self.child_class_constants
|
11
11
|
@child_class_constants ||= super().merge(HEADER: nil, PATTERN: nil, CONFIDENCE: 60)
|
@@ -5,7 +5,7 @@ module WPScan
|
|
5
5
|
module DynamicFinder
|
6
6
|
module Version
|
7
7
|
# Version finder using JavaScript Variable method
|
8
|
-
class JavascriptVar <
|
8
|
+
class JavascriptVar < Finders::DynamicFinder::Version::Finder
|
9
9
|
# @return [ Hash ]
|
10
10
|
def self.child_class_constants
|
11
11
|
@child_class_constants ||= super().merge(
|
@@ -5,7 +5,7 @@ module WPScan
|
|
5
5
|
module DynamicFinder
|
6
6
|
module Version
|
7
7
|
# Version finder using QueryParameter method
|
8
|
-
class QueryParameter <
|
8
|
+
class QueryParameter < Finders::DynamicFinder::Version::Finder
|
9
9
|
# @return [ Hash ]
|
10
10
|
def self.child_class_constants
|
11
11
|
@child_class_constants ||= super().merge(
|
@@ -5,7 +5,7 @@ module WPScan
|
|
5
5
|
module DynamicFinder
|
6
6
|
module Version
|
7
7
|
# Version finder using Xpath method
|
8
|
-
class Xpath <
|
8
|
+
class Xpath < Finders::DynamicFinder::Version::Finder
|
9
9
|
# @return [ Hash ]
|
10
10
|
def self.child_class_constants
|
11
11
|
@child_class_constants ||= super().merge(
|
@@ -4,22 +4,22 @@ module WPScan
|
|
4
4
|
module Finders
|
5
5
|
module DynamicFinder
|
6
6
|
module WpItemVersion
|
7
|
-
class BodyPattern <
|
7
|
+
class BodyPattern < Finders::DynamicFinder::Version::BodyPattern
|
8
8
|
end
|
9
9
|
|
10
|
-
class Comment <
|
10
|
+
class Comment < Finders::DynamicFinder::Version::Comment
|
11
11
|
end
|
12
12
|
|
13
|
-
class ConfigParser <
|
13
|
+
class ConfigParser < Finders::DynamicFinder::Version::ConfigParser
|
14
14
|
end
|
15
15
|
|
16
|
-
class HeaderPattern <
|
16
|
+
class HeaderPattern < Finders::DynamicFinder::Version::HeaderPattern
|
17
17
|
end
|
18
18
|
|
19
|
-
class JavascriptVar <
|
19
|
+
class JavascriptVar < Finders::DynamicFinder::Version::JavascriptVar
|
20
20
|
end
|
21
21
|
|
22
|
-
class QueryParameter <
|
22
|
+
class QueryParameter < Finders::DynamicFinder::Version::QueryParameter
|
23
23
|
# @return [ Regexp ]
|
24
24
|
def path_pattern
|
25
25
|
# TODO: consider the target.blog.themes_dir if the target is a Theme (maybe implement a WpItem#item_dir ?)
|
@@ -37,7 +37,7 @@ module WPScan
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
class Xpath <
|
40
|
+
class Xpath < Finders::DynamicFinder::Version::Xpath
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -12,23 +12,23 @@ module WPScan
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
class BodyPattern <
|
15
|
+
class BodyPattern < Finders::DynamicFinder::Version::BodyPattern
|
16
16
|
include Finder
|
17
17
|
end
|
18
18
|
|
19
|
-
class Comment <
|
19
|
+
class Comment < Finders::DynamicFinder::Version::Comment
|
20
20
|
include Finder
|
21
21
|
end
|
22
22
|
|
23
|
-
class HeaderPattern <
|
23
|
+
class HeaderPattern < Finders::DynamicFinder::Version::HeaderPattern
|
24
24
|
include Finder
|
25
25
|
end
|
26
26
|
|
27
|
-
class JavascriptVar <
|
27
|
+
class JavascriptVar < Finders::DynamicFinder::Version::JavascriptVar
|
28
28
|
include Finder
|
29
29
|
end
|
30
30
|
|
31
|
-
class QueryParameter <
|
31
|
+
class QueryParameter < Finders::DynamicFinder::Version::QueryParameter
|
32
32
|
include Finder
|
33
33
|
|
34
34
|
# @return [ Hash ]
|
data/lib/wpscan/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wpscan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.5.
|
4
|
+
version: 3.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- WPScanTeam
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cms_scanner
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.5.
|
19
|
+
version: 0.5.3
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.5.
|
26
|
+
version: 0.5.3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,28 +114,28 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.
|
117
|
+
version: 0.72.0
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
124
|
+
version: 0.72.0
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rubocop-performance
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 1.
|
131
|
+
version: 1.4.0
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 1.
|
138
|
+
version: 1.4.0
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: simplecov
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|