cms_scanner 0.0.37.12 → 0.0.38.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 +4 -4
- data/app/controllers/core.rb +5 -5
- data/app/finders/interesting_findings/fantastico_fileslist.rb +1 -1
- data/app/finders/interesting_findings/robots_txt.rb +1 -1
- data/app/finders/interesting_findings/search_replace_db_2.rb +1 -1
- data/app/finders/interesting_findings/xml_rpc.rb +1 -1
- data/app/models/headers.rb +1 -1
- data/app/models/interesting_finding.rb +1 -1
- data/app/models/version.rb +1 -1
- data/cms_scanner.gemspec +9 -10
- data/lib/cms_scanner.rb +2 -2
- data/lib/cms_scanner/browser/options.rb +3 -3
- data/lib/cms_scanner/cache/file_store.rb +5 -3
- data/lib/cms_scanner/finders/finder.rb +4 -2
- data/lib/cms_scanner/finders/finder/smart_url_checker.rb +3 -3
- data/lib/cms_scanner/finders/finding.rb +1 -0
- data/lib/cms_scanner/formatter.rb +3 -3
- data/lib/cms_scanner/target.rb +34 -5
- data/lib/cms_scanner/target/scope.rb +1 -1
- data/lib/cms_scanner/version.rb +1 -1
- metadata +47 -47
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a268201443a7ffead0d0a0d4070cd8ae295081bd
|
4
|
+
data.tar.gz: f6b9f3e7e3779b6f05759d556d2c1da282db2ddd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 927269d831ec38b8615c92a0c29fafb3c2eb27e827140368d01d2e522a3440c3751df0cefac16e063e5d039ea6decfbdac23be0abb19ac0409cc311ed143e5b3
|
7
|
+
data.tar.gz: 313fa9f6958d7838f88744d7cb29db154be90f408cfccbbc960a2b202490a71145da0ec404272bff1944c44b0874bb0ec36066cda0d9d8ad6d2f835e64e6df3b
|
data/app/controllers/core.rb
CHANGED
@@ -29,13 +29,13 @@ module CMSScanner
|
|
29
29
|
|
30
30
|
case res.code
|
31
31
|
when 0
|
32
|
-
|
32
|
+
raise TargetDownError, res
|
33
33
|
when 401
|
34
|
-
|
34
|
+
raise HTTPAuthRequiredError
|
35
35
|
when 403
|
36
|
-
|
36
|
+
raise AccessForbiddenError
|
37
37
|
when 407
|
38
|
-
|
38
|
+
raise ProxyAuthRequiredError
|
39
39
|
end
|
40
40
|
|
41
41
|
# Checks for redirects
|
@@ -44,7 +44,7 @@ module CMSScanner
|
|
44
44
|
|
45
45
|
return if target.in_scope?(effective_url)
|
46
46
|
|
47
|
-
|
47
|
+
raise HTTPRedirectError, effective_url unless parsed_options[:ignore_main_redirect]
|
48
48
|
|
49
49
|
target.homepage_res = res
|
50
50
|
end
|
@@ -12,7 +12,7 @@ module CMSScanner
|
|
12
12
|
def aggressive(_opts = {})
|
13
13
|
res = NS::Browser.get(url)
|
14
14
|
|
15
|
-
return unless res
|
15
|
+
return unless res&.code == 200 && !res.body.empty?
|
16
16
|
return unless res.headers && res.headers['Content-Type'] =~ %r{\Atext/plain}
|
17
17
|
|
18
18
|
NS::FantasticoFileslist.new(url, confidence: 70, found_by: found_by)
|
@@ -12,7 +12,7 @@ module CMSScanner
|
|
12
12
|
def aggressive(_opts = {})
|
13
13
|
res = NS::Browser.get(url)
|
14
14
|
|
15
|
-
return unless res
|
15
|
+
return unless res&.code == 200 && res.body =~ /(?:user-agent|(?:dis)?allow):/i
|
16
16
|
|
17
17
|
NS::RobotsTxt.new(url, confidence: 100, found_by: found_by)
|
18
18
|
end
|
@@ -12,7 +12,7 @@ module CMSScanner
|
|
12
12
|
def aggressive(_opts = {})
|
13
13
|
res = NS::Browser.get(url)
|
14
14
|
|
15
|
-
return unless res
|
15
|
+
return unless res&.code == 200 && res.body =~ /by interconnect/i
|
16
16
|
|
17
17
|
NS::InterestingFinding.new(url, confidence: 100,
|
18
18
|
found_by: found_by,
|
@@ -46,7 +46,7 @@ module CMSScanner
|
|
46
46
|
|
47
47
|
res = NS::Browser.get(potential_url)
|
48
48
|
|
49
|
-
next unless res
|
49
|
+
next unless res&.body =~ /XML-RPC server accepts POST requests only/i
|
50
50
|
|
51
51
|
return NS::XMLRPC.new(potential_url,
|
52
52
|
confidence: 100,
|
data/app/models/headers.rb
CHANGED
@@ -21,7 +21,7 @@ module CMSScanner
|
|
21
21
|
def entries
|
22
22
|
res = NS::Browser.get(url)
|
23
23
|
|
24
|
-
return [] unless res && res.headers['Content-Type'] =~ %r{\Atext/plain;}i
|
24
|
+
return [] unless res && res.headers['Content-Type'] =~ %r{\Atext/plain;}i # rubocop:disable Style/SafeNavigation
|
25
25
|
|
26
26
|
res.body.split("\n").reject { |s| s.strip.empty? }
|
27
27
|
end
|
data/app/models/version.rb
CHANGED
data/cms_scanner.gemspec
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# coding: utf-8
|
2
1
|
lib = File.expand_path('../lib', __FILE__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
3
|
|
@@ -8,7 +7,7 @@ Gem::Specification.new do |s|
|
|
8
7
|
s.name = 'cms_scanner'
|
9
8
|
s.version = CMSScanner::VERSION
|
10
9
|
s.platform = Gem::Platform::RUBY
|
11
|
-
s.required_ruby_version = '>= 2.
|
10
|
+
s.required_ruby_version = '>= 2.3'
|
12
11
|
s.authors = ['WPScanTeam']
|
13
12
|
s.email = ['team@wpscan.org']
|
14
13
|
s.summary = 'CMS Scanner Framework (experimental)'
|
@@ -32,24 +31,24 @@ Gem::Specification.new do |s|
|
|
32
31
|
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
33
32
|
s.require_path = 'lib'
|
34
33
|
|
35
|
-
s.add_dependency 'typhoeus', '~> 1.3.0'
|
36
34
|
s.add_dependency 'nokogiri', '~> 1.8.0'
|
37
|
-
s.add_dependency '
|
35
|
+
s.add_dependency 'opt_parse_validator', '~> 0.0.14.0'
|
38
36
|
s.add_dependency 'public_suffix', '~> 3.0.0'
|
39
37
|
s.add_dependency 'ruby-progressbar', '~> 1.9.0'
|
40
|
-
s.add_dependency '
|
38
|
+
s.add_dependency 'typhoeus', '~> 1.3.0'
|
39
|
+
s.add_dependency 'yajl-ruby', '~> 1.3.0' # Better JSON parser regarding memory usage
|
41
40
|
|
42
41
|
# Already required by opt_parse_validator
|
43
42
|
# so version restriction loosen to avoid potential future conflicts
|
44
|
-
s.add_dependency 'addressable', '~> 2.5'
|
45
43
|
s.add_dependency 'activesupport', '~> 5.0'
|
44
|
+
s.add_dependency 'addressable', '~> 2.5'
|
46
45
|
|
46
|
+
s.add_development_dependency 'bundler', '~> 1.6'
|
47
|
+
s.add_development_dependency 'coveralls', '~> 0.8.0'
|
47
48
|
s.add_development_dependency 'rake', '~> 12.0'
|
48
49
|
s.add_development_dependency 'rspec', '~> 3.7.0'
|
49
50
|
s.add_development_dependency 'rspec-its', '~> 1.2.0'
|
50
|
-
s.add_development_dependency '
|
51
|
-
s.add_development_dependency 'rubocop', '~> 0.50.0'
|
52
|
-
s.add_development_dependency 'webmock', '~> 1.22.0'
|
51
|
+
s.add_development_dependency 'rubocop', '~> 0.51.0'
|
53
52
|
s.add_development_dependency 'simplecov', '~> 0.14.0' # Can't update to 0.15 as it breaks coveralls dep
|
54
|
-
s.add_development_dependency '
|
53
|
+
s.add_development_dependency 'webmock', '~> 3.1.0'
|
55
54
|
end
|
data/lib/cms_scanner.rb
CHANGED
@@ -103,11 +103,11 @@ module CMSScanner
|
|
103
103
|
@run_error = e
|
104
104
|
|
105
105
|
formatter.output('@usage', msg: e.message)
|
106
|
-
rescue
|
106
|
+
rescue StandardError, SignalException => e
|
107
107
|
@run_error = e
|
108
108
|
|
109
109
|
formatter.output('@scan_aborted',
|
110
|
-
reason: e.message,
|
110
|
+
reason: e.is_a?(Interrupt) ? 'Canceled by User' : e.message,
|
111
111
|
trace: e.backtrace,
|
112
112
|
verbose: controllers.first.parsed_options[:verbose])
|
113
113
|
ensure
|
@@ -44,7 +44,7 @@ module CMSScanner
|
|
44
44
|
#
|
45
45
|
# @param [ Integer ] number
|
46
46
|
def max_threads=(number)
|
47
|
-
@max_threads = number.to_i
|
47
|
+
@max_threads = number.to_i.positive? && throttle.zero? ? number.to_i : 1
|
48
48
|
|
49
49
|
hydra.max_concurrency = @max_threads
|
50
50
|
end
|
@@ -79,11 +79,11 @@ module CMSScanner
|
|
79
79
|
def throttle=(value)
|
80
80
|
@throttle = value.to_i.abs / 1000.0
|
81
81
|
|
82
|
-
self.max_threads = 1 if @throttle
|
82
|
+
self.max_threads = 1 if @throttle.positive?
|
83
83
|
end
|
84
84
|
|
85
85
|
def trottle!
|
86
|
-
sleep(throttle) if throttle
|
86
|
+
sleep(throttle) if throttle.positive?
|
87
87
|
end
|
88
88
|
end
|
89
89
|
end
|
@@ -34,7 +34,7 @@ module CMSScanner
|
|
34
34
|
return if expired_entry?(key)
|
35
35
|
|
36
36
|
serializer.load(File.read(file_path))
|
37
|
-
rescue
|
37
|
+
rescue StandardError
|
38
38
|
nil
|
39
39
|
end
|
40
40
|
|
@@ -42,7 +42,7 @@ module CMSScanner
|
|
42
42
|
# @param [ Mixed ] data_to_store
|
43
43
|
# @param [ Integer ] cache_ttl
|
44
44
|
def write_entry(key, data_to_store, cache_ttl)
|
45
|
-
return unless cache_ttl.to_i
|
45
|
+
return unless cache_ttl.to_i.positive?
|
46
46
|
|
47
47
|
File.write(entry_path(key), serializer.dump(data_to_store))
|
48
48
|
File.write(entry_expiration_path(key), Time.now.to_i + cache_ttl)
|
@@ -68,7 +68,9 @@ module CMSScanner
|
|
68
68
|
#
|
69
69
|
# @return [ Boolean ]
|
70
70
|
def expired_entry?(key)
|
71
|
-
File.read(entry_expiration_path(key)).to_i <= Time.now.to_i
|
71
|
+
File.read(entry_expiration_path(key)).to_i <= Time.now.to_i
|
72
|
+
rescue StandardError
|
73
|
+
true
|
72
74
|
end
|
73
75
|
end
|
74
76
|
end
|
@@ -47,13 +47,15 @@ module CMSScanner
|
|
47
47
|
@hydra ||= browser.hydra
|
48
48
|
end
|
49
49
|
|
50
|
-
|
50
|
+
# @param [ String, Symbol ] klass
|
51
|
+
# @return [ String ]
|
52
|
+
def found_by(klass = self)
|
51
53
|
caller_locations.each do |call|
|
52
54
|
label = call.label
|
53
55
|
|
54
56
|
next unless %w[aggressive passive].include? label
|
55
57
|
|
56
|
-
return "#{titleize} (#{label.capitalize} Detection)"
|
58
|
+
return "#{klass.titleize} (#{label.capitalize} Detection)"
|
57
59
|
end
|
58
60
|
nil
|
59
61
|
end
|
@@ -10,7 +10,7 @@ module CMSScanner
|
|
10
10
|
#
|
11
11
|
# @return []
|
12
12
|
def process_urls(_urls, _opts = {})
|
13
|
-
|
13
|
+
raise NotImplementedError
|
14
14
|
end
|
15
15
|
|
16
16
|
# @param [ Hash ] opts
|
@@ -29,7 +29,7 @@ module CMSScanner
|
|
29
29
|
|
30
30
|
# @return [ String ]
|
31
31
|
def passive_urls_xpath
|
32
|
-
|
32
|
+
raise NotImplementedError
|
33
33
|
end
|
34
34
|
|
35
35
|
# @param [ Hash ] opts
|
@@ -47,7 +47,7 @@ module CMSScanner
|
|
47
47
|
#
|
48
48
|
# @return [ Array<String> ]
|
49
49
|
def aggressive_urls(_opts = {})
|
50
|
-
|
50
|
+
raise NotImplementedError
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
@@ -38,6 +38,7 @@ module CMSScanner
|
|
38
38
|
FINDING_OPTS.each { |opt| send("#{opt}=", opts[opt]) if opts.key?(opt) }
|
39
39
|
end
|
40
40
|
|
41
|
+
# TODO: maybe also check for interesting_entries and confirmed_by ?
|
41
42
|
def eql?(other)
|
42
43
|
self == other && confidence == other.confidence && found_by == other.found_by
|
43
44
|
end
|
@@ -109,11 +109,11 @@ module CMSScanner
|
|
109
109
|
if tpl[0, 1] == '@' # Global Template
|
110
110
|
tpl = tpl.delete('@')
|
111
111
|
else
|
112
|
-
|
112
|
+
raise 'The controller_name can not be nil' unless controller_name
|
113
113
|
tpl = "#{controller_name}/#{tpl}"
|
114
114
|
end
|
115
115
|
|
116
|
-
|
116
|
+
raise "Wrong tpl format: '#{tpl}'" unless tpl =~ %r{\A[\w/_]+\z}
|
117
117
|
|
118
118
|
views_directories.reverse_each do |dir|
|
119
119
|
formats.each do |format|
|
@@ -123,7 +123,7 @@ module CMSScanner
|
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
126
|
-
|
126
|
+
raise "View not found for #{format}/#{tpl}"
|
127
127
|
end
|
128
128
|
|
129
129
|
# @return [ Array<String> ] The directories to look into for views
|
data/lib/cms_scanner/target.rb
CHANGED
@@ -35,16 +35,17 @@ module CMSScanner
|
|
35
35
|
false
|
36
36
|
end
|
37
37
|
|
38
|
+
# @param [ String ] xpath
|
38
39
|
# @param [ Regexp ] pattern
|
39
40
|
# @param [ Typhoeus::Response, String ] page
|
40
41
|
#
|
41
|
-
# @return [ Array<Array<MatchData, Nokogiri::XML::
|
42
|
-
# @yield
|
43
|
-
def
|
42
|
+
# @return [ Array<Array<MatchData, Nokogiri::XML::Element>> ]
|
43
|
+
# @yield [ MatchData, Nokogiri::XML::Element ]
|
44
|
+
def xpath_pattern_from_page(xpath, pattern, page = nil)
|
44
45
|
page = NS::Browser.get(url(page)) unless page.is_a?(Typhoeus::Response)
|
45
46
|
matches = []
|
46
47
|
|
47
|
-
page.html.xpath(
|
48
|
+
page.html.xpath(xpath).each do |node|
|
48
49
|
next unless node.text.strip =~ pattern
|
49
50
|
|
50
51
|
yield Regexp.last_match, node if block_given?
|
@@ -55,6 +56,28 @@ module CMSScanner
|
|
55
56
|
matches
|
56
57
|
end
|
57
58
|
|
59
|
+
# @param [ Regexp ] pattern
|
60
|
+
# @param [ Typhoeus::Response, String ] page
|
61
|
+
#
|
62
|
+
# @return [ Array<Array<MatchData, Nokogiri::XML::Comment>> ]
|
63
|
+
# @yield [ MatchData, Nokogiri::XML::Comment ]
|
64
|
+
def comments_from_page(pattern, page = nil)
|
65
|
+
xpath_pattern_from_page('//comment()', pattern, page) do |match, node|
|
66
|
+
yield match, node if block_given?
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# @param [ Regexp ] pattern
|
71
|
+
# @param [ Typhoeus::Response, String ] page
|
72
|
+
#
|
73
|
+
# @return [ Array<Array<MatchData, Nokogiri::XML::Element>> ]
|
74
|
+
# @yield [ MatchData, Nokogiri::XML::Element ]
|
75
|
+
def javascripts_from_page(pattern, page = nil)
|
76
|
+
xpath_pattern_from_page('//script', pattern, page) do |match, node|
|
77
|
+
yield match, node if block_given?
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
58
81
|
# @param [ Typhoeus::Response, String ] page
|
59
82
|
# @param [ String ] xpath
|
60
83
|
# @param [ Array<String> ] attributes
|
@@ -72,7 +95,13 @@ module CMSScanner
|
|
72
95
|
|
73
96
|
next unless attr_value && !attr_value.empty?
|
74
97
|
|
75
|
-
tag_uri
|
98
|
+
tag_uri = begin
|
99
|
+
uri.join(attr_value.strip)
|
100
|
+
rescue StandardError
|
101
|
+
# Skip potential malformed URLs etc.
|
102
|
+
next
|
103
|
+
end
|
104
|
+
|
76
105
|
tag_uri_string = tag_uri.to_s
|
77
106
|
|
78
107
|
next unless tag_uri.host
|
data/lib/cms_scanner/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cms_scanner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.38.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- WPScanTeam
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: typhoeus
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 1.3.0
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 1.3.0
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: nokogiri
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,19 +25,19 @@ dependencies:
|
|
39
25
|
- !ruby/object:Gem::Version
|
40
26
|
version: 1.8.0
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
28
|
+
name: opt_parse_validator
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - "~>"
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
33
|
+
version: 0.0.14.0
|
48
34
|
type: :runtime
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
38
|
- - "~>"
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
40
|
+
version: 0.0.14.0
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: public_suffix
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,33 +67,33 @@ dependencies:
|
|
81
67
|
- !ruby/object:Gem::Version
|
82
68
|
version: 1.9.0
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
70
|
+
name: typhoeus
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
73
|
- - "~>"
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
75
|
+
version: 1.3.0
|
90
76
|
type: :runtime
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
80
|
- - "~>"
|
95
81
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
82
|
+
version: 1.3.0
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
84
|
+
name: yajl-ruby
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
87
|
- - "~>"
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
89
|
+
version: 1.3.0
|
104
90
|
type: :runtime
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
94
|
- - "~>"
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
96
|
+
version: 1.3.0
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: activesupport
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,89 +109,103 @@ dependencies:
|
|
123
109
|
- !ruby/object:Gem::Version
|
124
110
|
version: '5.0'
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
112
|
+
name: addressable
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
128
114
|
requirements:
|
129
115
|
- - "~>"
|
130
116
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
117
|
+
version: '2.5'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '2.5'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: bundler
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.6'
|
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: '
|
138
|
+
version: '1.6'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: coveralls
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
145
|
+
version: 0.8.0
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
152
|
+
version: 0.8.0
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
154
|
+
name: rake
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
157
|
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
159
|
+
version: '12.0'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
166
|
+
version: '12.0'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
168
|
+
name: rspec
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
171
|
- - "~>"
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
173
|
+
version: 3.7.0
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
178
|
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version:
|
180
|
+
version: 3.7.0
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
182
|
+
name: rspec-its
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
185
|
- - "~>"
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version:
|
187
|
+
version: 1.2.0
|
188
188
|
type: :development
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
192
|
- - "~>"
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version:
|
194
|
+
version: 1.2.0
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
196
|
+
name: rubocop
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
198
198
|
requirements:
|
199
199
|
- - "~>"
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version:
|
201
|
+
version: 0.51.0
|
202
202
|
type: :development
|
203
203
|
prerelease: false
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
206
|
- - "~>"
|
207
207
|
- !ruby/object:Gem::Version
|
208
|
-
version:
|
208
|
+
version: 0.51.0
|
209
209
|
- !ruby/object:Gem::Dependency
|
210
210
|
name: simplecov
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -221,19 +221,19 @@ dependencies:
|
|
221
221
|
- !ruby/object:Gem::Version
|
222
222
|
version: 0.14.0
|
223
223
|
- !ruby/object:Gem::Dependency
|
224
|
-
name:
|
224
|
+
name: webmock
|
225
225
|
requirement: !ruby/object:Gem::Requirement
|
226
226
|
requirements:
|
227
227
|
- - "~>"
|
228
228
|
- !ruby/object:Gem::Version
|
229
|
-
version:
|
229
|
+
version: 3.1.0
|
230
230
|
type: :development
|
231
231
|
prerelease: false
|
232
232
|
version_requirements: !ruby/object:Gem::Requirement
|
233
233
|
requirements:
|
234
234
|
- - "~>"
|
235
235
|
- !ruby/object:Gem::Version
|
236
|
-
version:
|
236
|
+
version: 3.1.0
|
237
237
|
description: Framework to provide an easy way to implement CMS Scanners
|
238
238
|
email:
|
239
239
|
- team@wpscan.org
|
@@ -358,7 +358,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
358
358
|
requirements:
|
359
359
|
- - ">="
|
360
360
|
- !ruby/object:Gem::Version
|
361
|
-
version: 2.
|
361
|
+
version: '2.3'
|
362
362
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
363
363
|
requirements:
|
364
364
|
- - ">="
|