cms_scanner 0.0.8 → 0.0.9
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/.travis.yml +1 -0
- data/Gemfile +1 -1
- data/LICENSE +16 -11
- data/cms_scanner.gemspec +5 -5
- data/lib/cms_scanner/finders/confidence.rb +81 -0
- data/lib/cms_scanner/finders/finder.rb +5 -2
- data/lib/cms_scanner/finders/finder/smart_url_checker.rb +74 -0
- data/lib/cms_scanner/finders/finder/smart_url_checker/findings.rb +29 -0
- data/lib/cms_scanner/finders/finding.rb +9 -2
- data/lib/cms_scanner/finders/findings.rb +7 -15
- data/lib/cms_scanner/finders/independent_finders.rb +3 -1
- data/lib/cms_scanner/version.rb +1 -1
- data/spec/app/finders/interesting_files/fantastico_fileslist_spec.rb +1 -1
- data/spec/app/finders/interesting_files/headers_spec.rb +1 -1
- data/spec/app/finders/interesting_files/robots_txt_spec.rb +1 -1
- data/spec/app/finders/interesting_files/search_replace_db_2_spec.rb +1 -1
- data/spec/lib/finders/confidence_spec.rb +39 -0
- data/spec/lib/finders/finder/smart_url_checker/findings_spec.rb +9 -0
- data/spec/lib/finders/findings_spec.rb +9 -20
- data/spec/lib/finders/independent_finders_spec.rb +2 -2
- data/spec/lib/finders/unique_finders_spec.rb +4 -4
- data/spec/shared_examples/finding.rb +1 -1
- metadata +23 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a28cd6b9f81a6ae0f5627f4bcf0fcf16ce537699
|
4
|
+
data.tar.gz: 7224d7f858361411d24e4843cc6b24fe59678d94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b67163e8a50467815e068def06a621266c39e9b42c99e8622fed4ba45849c6bb42f452bce35d4a83d9744565df431e1230da6afddfe6a65e3552e490480844f1
|
7
|
+
data.tar.gz: 0a87c104f27cb7e035d8fce4bc670b2f3267106a3696a9cfb4b75580c146749d7ae368d60a8a9f56b5f21d4c3d5611428496b22cc803a2169fe6d9dfcfad485d
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/LICENSE
CHANGED
@@ -1,14 +1,19 @@
|
|
1
|
-
Copyright (C) 2014 - WPScanTeam
|
1
|
+
Copyright (C) 2014-2015 - WPScanTeam
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
the
|
6
|
-
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
-
GNU General Public License for more details.
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
11
|
+
copies or substantial portions of the Software.
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
|
+
SOFTWARE.
|
data/cms_scanner.gemspec
CHANGED
@@ -14,22 +14,22 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.summary = 'Experimental CMSScanner'
|
15
15
|
s.description = 'Experimental CMSScanner'
|
16
16
|
s.homepage = 'https://github.com/wpscanteam/CMSScanner'
|
17
|
-
s.license = '
|
17
|
+
s.license = 'MIT'
|
18
18
|
|
19
19
|
s.files = `git ls-files -z`.split("\x0")
|
20
20
|
s.executables = s.files.grep(/^bin\//) { |f| File.basename(f) }
|
21
21
|
s.test_files = s.files.grep(/^(test|spec|features)\//)
|
22
22
|
s.require_path = 'lib'
|
23
23
|
|
24
|
-
s.add_dependency 'opt_parse_validator', '~> 0.0.
|
25
|
-
s.add_dependency 'typhoeus', '~> 0.
|
24
|
+
s.add_dependency 'opt_parse_validator', '~> 0.0.5'
|
25
|
+
s.add_dependency 'typhoeus', '~> 0.7'
|
26
26
|
s.add_dependency 'nokogiri', '~> 1.6.3'
|
27
27
|
s.add_dependency 'addressable', '~> 2.3.6'
|
28
28
|
s.add_dependency 'activesupport', '~> 4.1'
|
29
29
|
|
30
|
-
s.add_development_dependency 'rake'
|
30
|
+
s.add_development_dependency 'rake', '~> 10.4'
|
31
31
|
s.add_development_dependency 'rspec', '~> 3.1'
|
32
|
-
s.add_development_dependency 'rspec-its'
|
32
|
+
s.add_development_dependency 'rspec-its', '~> 1.1'
|
33
33
|
s.add_development_dependency 'bundler', '~> 1.6'
|
34
34
|
s.add_development_dependency 'rubocop', '~> 0.28'
|
35
35
|
s.add_development_dependency 'webmock', '>= 1.18'
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module CMSScanner
|
2
|
+
module Finders
|
3
|
+
# Confidence
|
4
|
+
class Confidence < Numeric
|
5
|
+
attr_reader :value
|
6
|
+
|
7
|
+
def initialize(value)
|
8
|
+
@value = value
|
9
|
+
end
|
10
|
+
|
11
|
+
# @param [ Integer, Confidence ] other
|
12
|
+
#
|
13
|
+
# TODO: rework the formula which is weak when the value to add is < the current confidence
|
14
|
+
# e.g: 90 + 50 + 30 => 82
|
15
|
+
#
|
16
|
+
# @return [ Confidence ] A new Confidence
|
17
|
+
def +(other)
|
18
|
+
return Confidence.new(100) if @value == 100
|
19
|
+
|
20
|
+
to_add = other_value(other)
|
21
|
+
new_value = (@value + to_add) / 1.5
|
22
|
+
new_value = 100 if new_value > 100 || to_add == 100
|
23
|
+
|
24
|
+
Confidence.new(new_value.floor)
|
25
|
+
end
|
26
|
+
|
27
|
+
#
|
28
|
+
## Convenient Methods
|
29
|
+
#
|
30
|
+
#:nocov:
|
31
|
+
def to_s
|
32
|
+
@value.to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
def to_json
|
36
|
+
@value.to_json
|
37
|
+
end
|
38
|
+
|
39
|
+
# @param [ Integer, Confidence ] other
|
40
|
+
def other_value(other)
|
41
|
+
other.is_a?(Confidence) ? other.value : other
|
42
|
+
end
|
43
|
+
|
44
|
+
# @param [ Integer, Confidence ] other
|
45
|
+
def ==(other)
|
46
|
+
@value == other_value(other)
|
47
|
+
end
|
48
|
+
|
49
|
+
# @param [ Integer, Confidence ] other
|
50
|
+
def eql?(other)
|
51
|
+
@value.eql?(other_value(other))
|
52
|
+
end
|
53
|
+
|
54
|
+
# @param [ Integer, Confidence ] other
|
55
|
+
def <(other)
|
56
|
+
@value < other_value(other)
|
57
|
+
end
|
58
|
+
|
59
|
+
# @param [ Integer, Confidence ] other
|
60
|
+
def <=(other)
|
61
|
+
@value <= other_value(other)
|
62
|
+
end
|
63
|
+
|
64
|
+
# @param [ Integer, Confidence ] other
|
65
|
+
def >(other)
|
66
|
+
@value > other_value(other)
|
67
|
+
end
|
68
|
+
|
69
|
+
# @param [ Integer, Confidence ] other
|
70
|
+
def >=(other)
|
71
|
+
@value >= other_value(other)
|
72
|
+
end
|
73
|
+
|
74
|
+
# @param [ Integer, Confidence ] other
|
75
|
+
def <=>(other)
|
76
|
+
@value <=> other_value(other)
|
77
|
+
end
|
78
|
+
#:nocov:
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -1,9 +1,11 @@
|
|
1
|
+
require 'cms_scanner/finders/finder/smart_url_checker'
|
2
|
+
|
1
3
|
module CMSScanner
|
2
4
|
module Finders
|
3
5
|
# Finder
|
4
6
|
class Finder
|
5
7
|
# Constants for common found_by
|
6
|
-
DIRECT_ACCESS = 'Direct Access (
|
8
|
+
DIRECT_ACCESS = 'Direct Access (Aggressive Detection)'
|
7
9
|
|
8
10
|
attr_accessor :target
|
9
11
|
|
@@ -20,7 +22,8 @@ module CMSScanner
|
|
20
22
|
end
|
21
23
|
|
22
24
|
def found_by
|
23
|
-
"#{self.class.to_s.demodulize
|
25
|
+
"#{self.class.to_s.demodulize.underscore.titleize} " \
|
26
|
+
"(#{caller_locations(1, 1)[0].label.capitalize} Detection)"
|
24
27
|
end
|
25
28
|
end
|
26
29
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'cms_scanner/finders/finder/smart_url_checker/findings'
|
2
|
+
|
3
|
+
module CMSScanner
|
4
|
+
module Finders
|
5
|
+
class Finder
|
6
|
+
# Smart URL Checker
|
7
|
+
module SmartURLChecker
|
8
|
+
# @param [ Array<String> ] urls
|
9
|
+
# @param [ Hash ] opts
|
10
|
+
#
|
11
|
+
# @return []
|
12
|
+
def process_urls(_urls, _opts = {})
|
13
|
+
fail NotImplementedError
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param [ Hash ] opts
|
17
|
+
#
|
18
|
+
# @return [ Array<Finding> ]
|
19
|
+
def passive(opts = {})
|
20
|
+
process_urls(passive_urls(opts), opts)
|
21
|
+
end
|
22
|
+
|
23
|
+
# @param [ Hash ] opts
|
24
|
+
#
|
25
|
+
# @return [ Array<String> ]
|
26
|
+
def passive_urls(_opts = {})
|
27
|
+
urls = []
|
28
|
+
homepage = NS::Browser.get_and_follow_location(target.url).html
|
29
|
+
|
30
|
+
homepage.xpath(passive_urls_xpath).each do |node|
|
31
|
+
url = node['href'].strip
|
32
|
+
# case of relative URLs
|
33
|
+
url = target.url(url) unless url =~ /\Ahttps?:/i
|
34
|
+
|
35
|
+
next unless target.in_scope?(url)
|
36
|
+
|
37
|
+
urls << url
|
38
|
+
end
|
39
|
+
|
40
|
+
urls.uniq
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return [ String ]
|
44
|
+
def passive_urls_xpath
|
45
|
+
fail NotImplementedError
|
46
|
+
end
|
47
|
+
|
48
|
+
# @param [ Hash ] opts
|
49
|
+
#
|
50
|
+
# @return [ Array<Finding> ]
|
51
|
+
def aggressive(opts = {})
|
52
|
+
# To avoid scanning the same twice
|
53
|
+
urls = aggressive_urls(opts)
|
54
|
+
urls -= passive_urls(opts) if opts[:mode] == :mixed
|
55
|
+
|
56
|
+
process_urls(urls, opts)
|
57
|
+
end
|
58
|
+
|
59
|
+
# @param [ Hash ] opts
|
60
|
+
#
|
61
|
+
# @return [ Array<String> ]
|
62
|
+
def aggressive_urls(_opts = {})
|
63
|
+
fail NotImplementedError
|
64
|
+
end
|
65
|
+
|
66
|
+
# @return [ String ]
|
67
|
+
def found_by
|
68
|
+
"#{self.class.to_s.demodulize.underscore.titleize} " \
|
69
|
+
"(#{caller_locations[7].label.capitalize} Detection)"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module CMSScanner
|
2
|
+
module Finders
|
3
|
+
class Finder
|
4
|
+
module SmartURLChecker
|
5
|
+
# Findings
|
6
|
+
class Findings < Array
|
7
|
+
def <<(finding)
|
8
|
+
each do |f|
|
9
|
+
next unless f == finding && f.found_by == finding.found_by
|
10
|
+
|
11
|
+
# This makes sure entries added are unique
|
12
|
+
# and prevent pages redirecting to the same one to be added twice
|
13
|
+
entries_to_add = finding.interesting_entries - f.interesting_entries
|
14
|
+
return self if entries_to_add.empty?
|
15
|
+
|
16
|
+
entries_to_add.each { |entry| f.interesting_entries << entry }
|
17
|
+
|
18
|
+
f.confidence += finding.confidence
|
19
|
+
|
20
|
+
return self
|
21
|
+
end
|
22
|
+
|
23
|
+
super(finding) if finding # prevent nil values to be added
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'cms_scanner/finders/confidence'
|
2
|
+
|
1
3
|
module CMSScanner
|
2
4
|
module Finders
|
3
5
|
# Finding
|
@@ -22,9 +24,14 @@ module CMSScanner
|
|
22
24
|
@interesting_entries ||= []
|
23
25
|
end
|
24
26
|
|
25
|
-
# @return [
|
27
|
+
# @return [ Confidence ]
|
26
28
|
def confidence
|
27
|
-
@confidence ||= 0
|
29
|
+
@confidence ||= Confidence.new(0)
|
30
|
+
end
|
31
|
+
|
32
|
+
# @param [ Integer, Confidence ] value
|
33
|
+
def confidence=(value)
|
34
|
+
@confidence = value.is_a?(Confidence) ? value : Confidence.new(value)
|
28
35
|
end
|
29
36
|
|
30
37
|
# @param [ Hash ] opts
|
@@ -3,27 +3,19 @@ module CMSScanner
|
|
3
3
|
# Findings container
|
4
4
|
class Findings < Array
|
5
5
|
# Override to include the confirmed_by logic
|
6
|
-
|
6
|
+
#
|
7
|
+
# @param [ Finding ] finding
|
8
|
+
def <<(finding)
|
7
9
|
each do |found|
|
8
|
-
next unless found ==
|
10
|
+
next unless found == finding
|
9
11
|
|
10
|
-
found.confirmed_by <<
|
11
|
-
|
12
|
-
confidence = (found.confidence + other.confidence) / 1.5
|
13
|
-
confidence = 100 if confidence > 100 || other.confidence == 100
|
14
|
-
|
15
|
-
found.confidence = confidence.floor unless found.confidence == 100
|
12
|
+
found.confirmed_by << finding
|
13
|
+
found.confidence += finding.confidence
|
16
14
|
|
17
15
|
return self
|
18
16
|
end
|
19
17
|
|
20
|
-
super(
|
21
|
-
end
|
22
|
-
|
23
|
-
# Append the elements of other into self AND returns self
|
24
|
-
# This is not the default behaviour of Array#+ but it's intended
|
25
|
-
def +(other)
|
26
|
-
other.each { |f| self << f }
|
18
|
+
super(finding)
|
27
19
|
end
|
28
20
|
end
|
29
21
|
end
|
data/lib/cms_scanner/version.rb
CHANGED
@@ -57,7 +57,7 @@ describe CMSScanner::Finders::InterestingFile::FantasticoFileslist do
|
|
57
57
|
@expected = CMSScanner::FantasticoFileslist.new(
|
58
58
|
file,
|
59
59
|
confidence: 100,
|
60
|
-
found_by: '
|
60
|
+
found_by: 'Fantastico Fileslist (Aggressive Detection)'
|
61
61
|
)
|
62
62
|
end
|
63
63
|
end
|
@@ -28,7 +28,7 @@ describe CMSScanner::Finders::InterestingFile::Headers do
|
|
28
28
|
|
29
29
|
context 'when headers' do
|
30
30
|
it 'returns the result' do
|
31
|
-
opts = { confidence: 100, found_by: 'Headers (
|
31
|
+
opts = { confidence: 100, found_by: 'Headers (Passive Detection)' }
|
32
32
|
@expected = CMSScanner::Headers.new(url, opts)
|
33
33
|
end
|
34
34
|
end
|
@@ -46,7 +46,7 @@ describe CMSScanner::Finders::InterestingFile::RobotsTxt do
|
|
46
46
|
it 'returns the InterestingFile result' do
|
47
47
|
@expected = CMSScanner::RobotsTxt.new(robots_txt,
|
48
48
|
confidence: 100,
|
49
|
-
found_by: '
|
49
|
+
found_by: 'Robots Txt (Aggressive Detection)')
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
@@ -44,7 +44,7 @@ describe CMSScanner::Finders::InterestingFile::SearchReplaceDB2 do
|
|
44
44
|
@expected = CMSScanner::InterestingFile.new(
|
45
45
|
file,
|
46
46
|
confidence: 100,
|
47
|
-
found_by: '
|
47
|
+
found_by: 'Search Replace Db2 (Aggressive Detection)'
|
48
48
|
)
|
49
49
|
end
|
50
50
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CMSScanner::Finders::Confidence do
|
4
|
+
subject(:confidence) { described_class.new(number) }
|
5
|
+
|
6
|
+
describe '#new' do
|
7
|
+
let(:number) { 10 }
|
8
|
+
|
9
|
+
its(:value) { should eq 10 }
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#+' do
|
13
|
+
context 'when the confidence is already at 100' do
|
14
|
+
let(:number) { 100 }
|
15
|
+
|
16
|
+
it 'returns 100' do
|
17
|
+
expect(confidence + 50).to eq 100
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'when the confidence is below 100' do
|
22
|
+
context 'when it reaches 100' do
|
23
|
+
let(:number) { 90 }
|
24
|
+
|
25
|
+
it 'returns 100' do
|
26
|
+
expect(confidence + 50 + 80).to eq 100
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'when it satys below 100' do
|
31
|
+
let(:number) { 50 }
|
32
|
+
|
33
|
+
it 'returns the new value' do
|
34
|
+
expect(confidence + 50).to eq 66
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -3,45 +3,34 @@ require 'dummy_finding'
|
|
3
3
|
|
4
4
|
describe CMSScanner::Finders::Findings do
|
5
5
|
subject(:findings) { described_class.new }
|
6
|
-
let(:
|
6
|
+
let(:finding) { CMSScanner::DummyFinding }
|
7
7
|
|
8
8
|
describe '#<<' do
|
9
9
|
after { expect(findings).to eq @expected }
|
10
10
|
|
11
|
-
context 'when
|
11
|
+
context 'when no findings already in' do
|
12
12
|
it 'adds it' do
|
13
|
-
findings << 'empty-test'
|
14
|
-
@expected =
|
13
|
+
findings << finding.new('empty-test')
|
14
|
+
@expected = [finding.new('empty-test')]
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
context 'when
|
19
|
-
let(:confirmed) {
|
18
|
+
context 'when findings already in' do
|
19
|
+
let(:confirmed) { finding.new('confirmed') }
|
20
20
|
|
21
|
-
before { findings <<
|
21
|
+
before { findings << finding.new('test') << confirmed }
|
22
22
|
|
23
23
|
it 'adds a confirmed result correctly' do
|
24
24
|
confirmed_dup = confirmed.dup
|
25
25
|
confirmed_dup.confidence = 100
|
26
26
|
|
27
|
-
findings <<
|
27
|
+
findings << finding.new('test2')
|
28
28
|
findings << confirmed_dup
|
29
29
|
|
30
30
|
confirmed.confirmed_by = confirmed_dup
|
31
31
|
|
32
|
-
@expected = [] <<
|
32
|
+
@expected = [] << finding.new('test') << confirmed << finding.new('test2')
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
37
|
-
describe '#+' do
|
38
|
-
after { expect(findings).to eq @expected }
|
39
|
-
|
40
|
-
it 'adds it/them' do
|
41
|
-
# Dummy assignement to avoid the 'Operator used in void context'
|
42
|
-
_ = findings + %w(test1 test2)
|
43
|
-
|
44
|
-
@expected = %w(test1 test2)
|
45
|
-
end
|
46
|
-
end
|
47
36
|
end
|
@@ -10,8 +10,8 @@ describe CMSScanner::Finders::IndependentFinders do
|
|
10
10
|
let(:expected_aggressive) { finding.new('test', found_by: 'override', confidence: 100) }
|
11
11
|
let(:expected_passive) do
|
12
12
|
[
|
13
|
-
finding.new('test', found_by: '
|
14
|
-
finding.new('spotted', found_by: '
|
13
|
+
finding.new('test', found_by: 'Dummy Finder (Passive Detection)'),
|
14
|
+
finding.new('spotted', found_by: 'No Aggressive Result (Passive Detection)', confidence: 10)
|
15
15
|
]
|
16
16
|
end
|
17
17
|
|
@@ -45,7 +45,7 @@ describe CMSScanner::Finders::UniqueFinders do
|
|
45
45
|
expect(finders[1]).to receive(:aggressive).ordered
|
46
46
|
expect(finders[2]).to receive(:aggressive).ordered.and_return(dummy2_aggressive)
|
47
47
|
|
48
|
-
@expected = finding.new('v1', confidence: 100, found_by: 'Dummy (
|
48
|
+
@expected = finding.new('v1', confidence: 100, found_by: 'Dummy (Passive Detection)')
|
49
49
|
@expected.confirmed_by << finding.new('v1', confidence: 100, found_by: 'override')
|
50
50
|
@expected.confirmed_by << finding.new('v1', confidence: 90)
|
51
51
|
end
|
@@ -62,7 +62,7 @@ describe CMSScanner::Finders::UniqueFinders do
|
|
62
62
|
finders.each { |f| expect(f).to_not receive(:aggressive) }
|
63
63
|
|
64
64
|
@expected = finding.new('v2', confidence: 10,
|
65
|
-
found_by: '
|
65
|
+
found_by: 'No Aggressive (Passive Detection)')
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
@@ -95,7 +95,7 @@ describe CMSScanner::Finders::UniqueFinders do
|
|
95
95
|
expect(finders[1]).to_not receive(:aggressive)
|
96
96
|
expect(finders[2]).to_not receive(:aggressive)
|
97
97
|
|
98
|
-
@expected = finding.new('v1', confidence: 100, found_by: 'Dummy (
|
98
|
+
@expected = finding.new('v1', confidence: 100, found_by: 'Dummy (Passive Detection)')
|
99
99
|
@expected.confirmed_by << finding.new('v1', confidence: 100, found_by: 'override')
|
100
100
|
end
|
101
101
|
end
|
@@ -111,7 +111,7 @@ describe CMSScanner::Finders::UniqueFinders do
|
|
111
111
|
finders.each { |f| expect(f).to_not receive(:aggressive) }
|
112
112
|
|
113
113
|
@expected = finding.new('v2', confidence: 10,
|
114
|
-
found_by: '
|
114
|
+
found_by: 'No Aggressive (Passive Detection)')
|
115
115
|
end
|
116
116
|
end
|
117
117
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- WPScanTeam - Erwan Le Rousseau
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opt_parse_validator
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.0.
|
19
|
+
version: 0.0.5
|
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.0.
|
26
|
+
version: 0.0.5
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: typhoeus
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: '0.7'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: '0.7'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: nokogiri
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,16 +84,16 @@ dependencies:
|
|
84
84
|
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '10.4'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '10.4'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -112,16 +112,16 @@ dependencies:
|
|
112
112
|
name: rspec-its
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '1.1'
|
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: '
|
124
|
+
version: '1.1'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: bundler
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -239,7 +239,10 @@ files:
|
|
239
239
|
- lib/cms_scanner/controllers.rb
|
240
240
|
- lib/cms_scanner/errors/auth_errors.rb
|
241
241
|
- lib/cms_scanner/finders.rb
|
242
|
+
- lib/cms_scanner/finders/confidence.rb
|
242
243
|
- lib/cms_scanner/finders/finder.rb
|
244
|
+
- lib/cms_scanner/finders/finder/smart_url_checker.rb
|
245
|
+
- lib/cms_scanner/finders/finder/smart_url_checker/findings.rb
|
243
246
|
- lib/cms_scanner/finders/finding.rb
|
244
247
|
- lib/cms_scanner/finders/findings.rb
|
245
248
|
- lib/cms_scanner/finders/independent_finder.rb
|
@@ -319,6 +322,8 @@ files:
|
|
319
322
|
- spec/lib/cms_scanner_spec.rb
|
320
323
|
- spec/lib/controller_spec.rb
|
321
324
|
- spec/lib/controllers_spec.rb
|
325
|
+
- spec/lib/finders/confidence_spec.rb
|
326
|
+
- spec/lib/finders/finder/smart_url_checker/findings_spec.rb
|
322
327
|
- spec/lib/finders/findings_spec.rb
|
323
328
|
- spec/lib/finders/independent_finders_spec.rb
|
324
329
|
- spec/lib/finders/unique_finder_spec.rb
|
@@ -354,7 +359,7 @@ files:
|
|
354
359
|
- spec/spec_helper.rb
|
355
360
|
homepage: https://github.com/wpscanteam/CMSScanner
|
356
361
|
licenses:
|
357
|
-
-
|
362
|
+
- MIT
|
358
363
|
metadata: {}
|
359
364
|
post_install_message:
|
360
365
|
rdoc_options: []
|
@@ -372,7 +377,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
372
377
|
version: '0'
|
373
378
|
requirements: []
|
374
379
|
rubyforge_project:
|
375
|
-
rubygems_version: 2.
|
380
|
+
rubygems_version: 2.4.5
|
376
381
|
signing_key:
|
377
382
|
specification_version: 4
|
378
383
|
summary: Experimental CMSScanner
|
@@ -435,6 +440,8 @@ test_files:
|
|
435
440
|
- spec/lib/cms_scanner_spec.rb
|
436
441
|
- spec/lib/controller_spec.rb
|
437
442
|
- spec/lib/controllers_spec.rb
|
443
|
+
- spec/lib/finders/confidence_spec.rb
|
444
|
+
- spec/lib/finders/finder/smart_url_checker/findings_spec.rb
|
438
445
|
- spec/lib/finders/findings_spec.rb
|
439
446
|
- spec/lib/finders/independent_finders_spec.rb
|
440
447
|
- spec/lib/finders/unique_finder_spec.rb
|