cms_scanner 0.0.35.1 → 0.0.36
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/models/interesting_finding.rb +1 -1
- data/app/models/version.rb +1 -1
- data/lib/cms_scanner.rb +2 -0
- data/lib/cms_scanner/controllers.rb +1 -1
- data/lib/cms_scanner/finders.rb +1 -0
- data/lib/cms_scanner/finders/base_finders.rb +42 -0
- data/lib/cms_scanner/finders/finding.rb +2 -3
- data/lib/cms_scanner/finders/independent_finder.rb +2 -4
- data/lib/cms_scanner/finders/independent_finders.rb +1 -35
- data/lib/cms_scanner/finders/same_type_finders.rb +1 -3
- data/lib/cms_scanner/finders/unique_finders.rb +1 -3
- data/lib/cms_scanner/formatter.rb +4 -1
- data/lib/cms_scanner/references.rb +16 -11
- data/lib/cms_scanner/version.rb +1 -1
- data/lib/cms_scanner/vulnerability.rb +0 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4bfb8bab5a963e2803fa4991564f4affe3e7415d
|
4
|
+
data.tar.gz: 50faf8b01e45138166d74d3b4d769dbf5bf828ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a49537023c9c2ba55ab12641dc6fb9407e357e88ca358b1c9428d533bb984df8f1f6e07e7218c9195cd9459f20da24c4f4e268c63ae30bc75a083db5fae58309
|
7
|
+
data.tar.gz: 7ad19781bcda3f02d744eb0eceb0b3e43289cc3d323950df3b2060b051426053cf1ef3957c9ae5df417ce5f18006881e908b3cbcca6b9e63afc1981a07856d77
|
data/app/models/version.rb
CHANGED
data/lib/cms_scanner.rb
CHANGED
@@ -3,6 +3,7 @@ require 'opt_parse_validator'
|
|
3
3
|
require 'typhoeus'
|
4
4
|
require 'nokogiri'
|
5
5
|
require 'active_support/inflector'
|
6
|
+
require 'active_support/concern'
|
6
7
|
require 'addressable/uri'
|
7
8
|
require 'public_suffix'
|
8
9
|
require 'ruby-progressbar'
|
@@ -26,6 +27,7 @@ require 'cms_scanner/version'
|
|
26
27
|
require 'cms_scanner/controller'
|
27
28
|
require 'cms_scanner/controllers'
|
28
29
|
require 'cms_scanner/formatter'
|
30
|
+
require 'cms_scanner/references'
|
29
31
|
require 'cms_scanner/finders'
|
30
32
|
require 'cms_scanner/vulnerability'
|
31
33
|
|
@@ -14,7 +14,7 @@ module CMSScanner
|
|
14
14
|
def register_options_files
|
15
15
|
[Dir.home, Dir.pwd].each do |dir|
|
16
16
|
option_parser.options_files.supported_extensions.each do |ext|
|
17
|
-
@option_parser.options_files <<
|
17
|
+
@option_parser.options_files << Pathname.new(dir).join(".#{NS.app_name}", "cli_options.#{ext}").to_s
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
data/lib/cms_scanner/finders.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'cms_scanner/finders/finder'
|
2
2
|
require 'cms_scanner/finders/finding'
|
3
3
|
require 'cms_scanner/finders/findings'
|
4
|
+
require 'cms_scanner/finders/base_finders'
|
4
5
|
require 'cms_scanner/finders/independent_finders'
|
5
6
|
require 'cms_scanner/finders/independent_finder'
|
6
7
|
require 'cms_scanner/finders/unique_finders'
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module CMSScanner
|
2
|
+
module Finders
|
3
|
+
# Base class container for the Finders (i.e IndependentFinders etc)
|
4
|
+
class BaseFinders < Array
|
5
|
+
# @return [ Findings ]
|
6
|
+
def findings
|
7
|
+
@findings ||= NS::Finders::Findings.new
|
8
|
+
end
|
9
|
+
|
10
|
+
# Should be implemented in child classes
|
11
|
+
def run; end
|
12
|
+
|
13
|
+
protected
|
14
|
+
|
15
|
+
# @param [ Symbol ] mode :mixed, :passive or :aggressive
|
16
|
+
# @return [ Array<Symbol> ] The symbols to call for the mode
|
17
|
+
def symbols_from_mode(mode)
|
18
|
+
symbols = [:passive, :aggressive]
|
19
|
+
|
20
|
+
return symbols if mode.nil? || mode == :mixed
|
21
|
+
symbols.include?(mode) ? [*mode] : []
|
22
|
+
end
|
23
|
+
|
24
|
+
# @param [ CMSScanner::Finders::Finder ] finder
|
25
|
+
# @param [ Symbol ] symbol See return values of #symbols_from_mode
|
26
|
+
# @param [ Hash ] opts
|
27
|
+
def run_finder(finder, symbol, opts)
|
28
|
+
[*finder.send(symbol, opts.merge(found: findings))].compact.each do |found|
|
29
|
+
findings << found
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Allow child classes to filter the findings, such as return the best one
|
34
|
+
# or remove the low confidence ones.
|
35
|
+
#
|
36
|
+
# @return [ Findings ]
|
37
|
+
def filter_findings
|
38
|
+
findings
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -1,12 +1,11 @@
|
|
1
|
-
require 'cms_scanner/references'
|
2
|
-
|
3
1
|
module CMSScanner
|
4
2
|
module Finders
|
5
3
|
# Finding
|
6
4
|
module Finding
|
7
5
|
# Fix for "Double/Dynamic Inclusion Problem"
|
8
6
|
def self.included(base)
|
9
|
-
base.
|
7
|
+
base.include References
|
8
|
+
super(base)
|
10
9
|
end
|
11
10
|
|
12
11
|
FINDING_OPTS = [:confidence, :confirmed_by, :references, :found_by, :interesting_entries]
|
@@ -2,11 +2,9 @@ module CMSScanner
|
|
2
2
|
module Finders
|
3
3
|
# Independent Finder
|
4
4
|
module IndependentFinder
|
5
|
-
|
6
|
-
base.extend(ClassMethods)
|
7
|
-
end
|
5
|
+
extend ActiveSupport::Concern
|
8
6
|
|
9
|
-
#
|
7
|
+
# See ActiveSupport::Concern
|
10
8
|
module ClassMethods
|
11
9
|
def find(target, opts = {})
|
12
10
|
new(target).find(opts)
|
@@ -1,15 +1,9 @@
|
|
1
1
|
module CMSScanner
|
2
2
|
module Finders
|
3
|
-
# Independent Finders container
|
4
3
|
# This class is designed to handle independent results
|
5
4
|
# which are not related with each others
|
6
5
|
# e.g: interesting files
|
7
|
-
class IndependentFinders <
|
8
|
-
# @return [ Findings ]
|
9
|
-
def findings
|
10
|
-
@findings ||= NS::Finders::Findings.new
|
11
|
-
end
|
12
|
-
|
6
|
+
class IndependentFinders < BaseFinders
|
13
7
|
# @param [ Hash ] opts
|
14
8
|
# @option opts [ Symbol ] mode :mixed, :passive or :aggressive
|
15
9
|
#
|
@@ -25,34 +19,6 @@ module CMSScanner
|
|
25
19
|
|
26
20
|
filter_findings
|
27
21
|
end
|
28
|
-
|
29
|
-
protected
|
30
|
-
|
31
|
-
# @param [ Symbol ] mode :mixed, :passive or :aggressive
|
32
|
-
# @return [ Array<Symbol> ] The symbols to call for the mode
|
33
|
-
def symbols_from_mode(mode)
|
34
|
-
symbols = [:passive, :aggressive]
|
35
|
-
|
36
|
-
return symbols if mode.nil? || mode == :mixed
|
37
|
-
symbols.include?(mode) ? [*mode] : []
|
38
|
-
end
|
39
|
-
|
40
|
-
# @param [ CMSScanner::Finders::Finder ] finder
|
41
|
-
# @param [ Symbol ] symbol See return values of #symbols_from_mode
|
42
|
-
# @param [ Hash ] opts
|
43
|
-
def run_finder(finder, symbol, opts)
|
44
|
-
[*finder.send(symbol, opts.merge(found: findings))].compact.each do |found|
|
45
|
-
findings << found
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
# Allow child classes to filter the findings, such as return the best one
|
50
|
-
# or remove the low confidence ones.
|
51
|
-
#
|
52
|
-
# @return [ Findings ]
|
53
|
-
def filter_findings
|
54
|
-
findings
|
55
|
-
end
|
56
22
|
end
|
57
23
|
end
|
58
24
|
end
|
@@ -1,10 +1,8 @@
|
|
1
1
|
module CMSScanner
|
2
2
|
module Finders
|
3
|
-
# Same Type Finders container
|
4
|
-
#
|
5
3
|
# This class is designed to handle same type results, such as enumeration of plugins,
|
6
4
|
# themes etc.
|
7
|
-
class SameTypeFinders <
|
5
|
+
class SameTypeFinders < BaseFinders
|
8
6
|
# @param [ Hash ] opts
|
9
7
|
# @option opts [ Symbol ] :mode :mixed, :passive or :aggressive
|
10
8
|
# @option opts [ Boolean ] :sort Wether or not to sort the findings
|
@@ -1,11 +1,9 @@
|
|
1
1
|
module CMSScanner
|
2
2
|
module Finders
|
3
|
-
# Unique Finders container
|
4
|
-
#
|
5
3
|
# This class is designed to return a unique result such as a version
|
6
4
|
# Note: Finders contained can return multiple results but the #run will only
|
7
5
|
# returned the best finding
|
8
|
-
class UniqueFinders <
|
6
|
+
class UniqueFinders < BaseFinders
|
9
7
|
# @param [ Hash ] opts
|
10
8
|
# @option opts [ Symbol ] :mode :mixed, :passive or :aggressive
|
11
9
|
# @option opts [ Int ] :confidence_threshold If a finding's confidence reaches this value,
|
@@ -128,7 +128,10 @@ module CMSScanner
|
|
128
128
|
|
129
129
|
# @return [ Array<String> ] The directories to look into for views
|
130
130
|
def views_directories
|
131
|
-
@views_directories ||= [
|
131
|
+
@views_directories ||= [
|
132
|
+
APP_DIR, NS::APP_DIR,
|
133
|
+
File.join(Dir.home, ".#{NS.app_name}"), File.join(Dir.pwd, ".#{NS.app_name}")
|
134
|
+
].uniq.reduce([]) { |a, e| a << Pathname.new(e).join('views').to_s }
|
132
135
|
end
|
133
136
|
end
|
134
137
|
end
|
@@ -1,16 +1,21 @@
|
|
1
1
|
module CMSScanner
|
2
2
|
# References related to the issue
|
3
3
|
module References
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
# See ActiveSupport::Concern
|
7
|
+
module ClassMethods
|
8
|
+
# @return [ Array<Symbol> ]
|
9
|
+
def references_keys
|
10
|
+
@references_keys ||= [:cve, :secunia, :osvdb, :exploitdb, :url, :metasploit, :packetstorm, :securityfocus]
|
11
|
+
end
|
7
12
|
end
|
8
13
|
|
9
14
|
# @param [ Hash ] refs
|
10
15
|
def references=(refs)
|
11
16
|
@references = {}
|
12
17
|
|
13
|
-
references_keys.each do |key|
|
18
|
+
self.class.references_keys.each do |key|
|
14
19
|
@references[key] = [*refs[key]].map(&:to_s) if refs.key?(key)
|
15
20
|
end
|
16
21
|
end
|
@@ -28,7 +33,7 @@ module CMSScanner
|
|
28
33
|
|
29
34
|
# @return [ Array<String> ] The CVEs
|
30
35
|
def cves
|
31
|
-
|
36
|
+
references[:cve] || []
|
32
37
|
end
|
33
38
|
|
34
39
|
# @return [ Array<String> ]
|
@@ -43,7 +48,7 @@ module CMSScanner
|
|
43
48
|
|
44
49
|
# @return [ Array<String> ] The Secunia IDs
|
45
50
|
def secunia_ids
|
46
|
-
|
51
|
+
references[:secunia] || []
|
47
52
|
end
|
48
53
|
|
49
54
|
# @return [ Array<String> ]
|
@@ -58,7 +63,7 @@ module CMSScanner
|
|
58
63
|
|
59
64
|
# @return [ Array<String> ] The OSVDB IDs
|
60
65
|
def osvdb_ids
|
61
|
-
|
66
|
+
references[:osvdb] || []
|
62
67
|
end
|
63
68
|
|
64
69
|
# @return [ Array<String> ]
|
@@ -73,7 +78,7 @@ module CMSScanner
|
|
73
78
|
|
74
79
|
# @return [ Array<String> ] The ExploitDB ID
|
75
80
|
def exploitdb_ids
|
76
|
-
|
81
|
+
references[:exploitdb] || []
|
77
82
|
end
|
78
83
|
|
79
84
|
# @return [ Array<String> ]
|
@@ -88,12 +93,12 @@ module CMSScanner
|
|
88
93
|
|
89
94
|
# @return [ String<Array> ]
|
90
95
|
def urls
|
91
|
-
|
96
|
+
references[:url] || []
|
92
97
|
end
|
93
98
|
|
94
99
|
# @return [ Array<String> ] The metasploit modules
|
95
100
|
def msf_modules
|
96
|
-
|
101
|
+
references[:metasploit] || []
|
97
102
|
end
|
98
103
|
|
99
104
|
# @return [ Array<String> ]
|
@@ -123,7 +128,7 @@ module CMSScanner
|
|
123
128
|
|
124
129
|
# @return [ Array<String> ] The Security Focus IDs
|
125
130
|
def securityfocus_ids
|
126
|
-
|
131
|
+
references[:securityfocus] || []
|
127
132
|
end
|
128
133
|
|
129
134
|
# @return [ Array<String> ]
|
data/lib/cms_scanner/version.rb
CHANGED
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.36
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- WPScanTeam
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opt_parse_validator
|
@@ -263,6 +263,7 @@ files:
|
|
263
263
|
- lib/cms_scanner/errors/http.rb
|
264
264
|
- lib/cms_scanner/exit_code.rb
|
265
265
|
- lib/cms_scanner/finders.rb
|
266
|
+
- lib/cms_scanner/finders/base_finders.rb
|
266
267
|
- lib/cms_scanner/finders/finder.rb
|
267
268
|
- lib/cms_scanner/finders/finder/enumerator.rb
|
268
269
|
- lib/cms_scanner/finders/finder/fingerprinter.rb
|