dradis-wpscan 3.18.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 +7 -0
- data/.github/issue_template.md +16 -0
- data/.github/pull_request_template.md +36 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/CHANGELOG.md +13 -0
- data/CONTRIBUTING.md +3 -0
- data/Gemfile +23 -0
- data/LICENSE +339 -0
- data/README.md +27 -0
- data/Rakefile +1 -0
- data/dradis-wpscan.gemspec +34 -0
- data/lib/dradis-wpscan.rb +7 -0
- data/lib/dradis/plugins/wpscan.rb +11 -0
- data/lib/dradis/plugins/wpscan/engine.rb +13 -0
- data/lib/dradis/plugins/wpscan/field_processor.rb +21 -0
- data/lib/dradis/plugins/wpscan/gem_version.rb +19 -0
- data/lib/dradis/plugins/wpscan/importer.rb +193 -0
- data/lib/dradis/plugins/wpscan/version.rb +13 -0
- data/lib/tasks/thorfile.rb +23 -0
- data/output.json +323 -0
- data/spec/fixtures/files/invalid.json +25 -0
- data/spec/fixtures/files/sample.json +481 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/wpscan_upload_spec.rb +58 -0
- data/templates/evidence.fields +1 -0
- data/templates/evidence.sample +481 -0
- data/templates/evidence.template +2 -0
- data/templates/scan_info.fields +8 -0
- data/templates/scan_info.sample +30 -0
- data/templates/scan_info.template +34 -0
- data/templates/vulnerability.fields +6 -0
- data/templates/vulnerability.sample +481 -0
- data/templates/vulnerability.template +18 -0
- metadata +168 -0
data/README.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# WPScan add-on for Dradis
|
|
2
|
+
|
|
3
|
+
[](http://travis-ci.org/dradis/dradis-wpscan) [](https://codeclimate.com/github/dradis/dradis-wpscan.png)
|
|
4
|
+
|
|
5
|
+
Upload [WPScan](https://wpscan.org/) security scanner JSON output into Dradis.
|
|
6
|
+
|
|
7
|
+
The add-on requires [Dradis CE](https://dradisframework.com/ce/) > 3.0, or [Dradis Pro](https://dradisframework.com/pro/).
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## More information
|
|
11
|
+
|
|
12
|
+
See the Dradis Framework's [README.md](https://github.com/dradis/dradisframework/blob/master/README.md)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## Contributing
|
|
16
|
+
|
|
17
|
+
See the Dradis Framework's [CONTRIBUTING.md](https://github.com/dradis/dradisframework/blob/master/CONTRIBUTING.md)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
## License
|
|
21
|
+
|
|
22
|
+
Dradis Framework and all its components are released under [GNU General Public License version 2.0](http://www.gnu.org/licenses/old-licenses/gpl-2.0.html) as published by the Free Software Foundation and appearing in the file LICENSE included in the packaging of this file.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
## Feature requests and bugs
|
|
26
|
+
|
|
27
|
+
Please use the [Dradis Framework issue tracker](https://github.com/dradis/dradis-ce/issues) for add-on improvements and bug reports.
|
data/Rakefile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'bundler/gem_tasks'
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
$:.push File.expand_path('../lib', __FILE__)
|
|
2
|
+
require 'dradis/plugins/wpscan/version'
|
|
3
|
+
version = Dradis::Plugins::Wpscan::VERSION::STRING
|
|
4
|
+
|
|
5
|
+
# Describe your gem and declare its dependencies:
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.platform = Gem::Platform::RUBY
|
|
8
|
+
spec.name = 'dradis-wpscan'
|
|
9
|
+
spec.version = version
|
|
10
|
+
spec.summary = 'WPScan add-on for the Dradis Framework.'
|
|
11
|
+
spec.description = 'This add-on allows you to upload and parse output produced from the WPScan WordPress security scanner into Dradis.'
|
|
12
|
+
|
|
13
|
+
spec.license = 'GPL-2'
|
|
14
|
+
|
|
15
|
+
spec.authors = ['Christian Mehlmauer', 'Daniel Martin', 'Erwan', 'Ryan Dewhurst']
|
|
16
|
+
spec.email = ['etd@nomejortu.com']
|
|
17
|
+
spec.homepage = 'http://dradisframework.org'
|
|
18
|
+
|
|
19
|
+
spec.files = `git ls-files`.split($\)
|
|
20
|
+
spec.executables = spec.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
|
21
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
22
|
+
|
|
23
|
+
# By not including Rails as a dependency, we can use the gem with different
|
|
24
|
+
# versions of Rails (a sure recipe for disaster, I'm sure), which is needed
|
|
25
|
+
# until we bump Dradis Pro to 4.1.
|
|
26
|
+
# s.add_dependency 'rails', '~> 4.1.1'
|
|
27
|
+
spec.add_dependency 'dradis-plugins', '~> 3.6'
|
|
28
|
+
spec.add_dependency 'multi_json'
|
|
29
|
+
|
|
30
|
+
spec.add_development_dependency 'bundler'
|
|
31
|
+
spec.add_development_dependency 'rake', '~> 12.3.3'
|
|
32
|
+
spec.add_development_dependency 'rspec-rails'
|
|
33
|
+
spec.add_development_dependency 'combustion', '~> 0.5.2'
|
|
34
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Dradis
|
|
2
|
+
module Plugins
|
|
3
|
+
module Wpscan
|
|
4
|
+
class FieldProcessor < Dradis::Plugins::Upload::FieldProcessor
|
|
5
|
+
# No need to implement anything here
|
|
6
|
+
# def post_initialize(args={})
|
|
7
|
+
# end
|
|
8
|
+
|
|
9
|
+
def value(args={})
|
|
10
|
+
field = args[:field]
|
|
11
|
+
|
|
12
|
+
# fields in the template are of the form <foo>.<field>, where <foo>
|
|
13
|
+
# is common across all fields for a given template (and meaningless).
|
|
14
|
+
type, name, attribute = field.split('.')
|
|
15
|
+
|
|
16
|
+
@data.key?(name) ? @data[name] : 'n/a'
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Dradis
|
|
2
|
+
module Plugins
|
|
3
|
+
module Wpscan
|
|
4
|
+
# Returns the version of the currently loaded Dradis as a <tt>Gem::Version</tt>
|
|
5
|
+
def self.gem_version
|
|
6
|
+
Gem::Version.new VERSION::STRING
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
module VERSION
|
|
10
|
+
MAJOR = 3
|
|
11
|
+
MINOR = 18
|
|
12
|
+
TINY = 0
|
|
13
|
+
PRE = nil
|
|
14
|
+
|
|
15
|
+
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
module Dradis::Plugins::Wpscan
|
|
2
|
+
class Importer < Dradis::Plugins::Upload::Importer
|
|
3
|
+
# The framework will call this function if the user selects this plugin from
|
|
4
|
+
# the dropdown list and uploads a file.
|
|
5
|
+
# @returns true if the operation was successful, false otherwise
|
|
6
|
+
def import(params={})
|
|
7
|
+
|
|
8
|
+
file_content = File.read( params[:file] )
|
|
9
|
+
|
|
10
|
+
# Parse the uploaded file into a Ruby Hash
|
|
11
|
+
logger.info { "Parsing WPScan output from #{ params[:file] }..." }
|
|
12
|
+
data = MultiJson.decode(file_content)
|
|
13
|
+
logger.info { 'Done.' }
|
|
14
|
+
|
|
15
|
+
# Do a sanity check to confirm the user uploaded the right file
|
|
16
|
+
# format.
|
|
17
|
+
if data['target_url'].nil?
|
|
18
|
+
error = "ERROR: No 'target_url' field present in the provided " \
|
|
19
|
+
"JSON data. Are you sure you uploaded a WPScan JSON output file?"
|
|
20
|
+
logger.fatal { error }
|
|
21
|
+
content_service.create_note text: error
|
|
22
|
+
return false
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Initial data normalisation
|
|
26
|
+
data = parse_json( data )
|
|
27
|
+
|
|
28
|
+
# Create a node based on the target_url
|
|
29
|
+
node = create_node( data )
|
|
30
|
+
|
|
31
|
+
# Parse vulnerability data and make more human readable.
|
|
32
|
+
# NOTE: You need an API token for the WPVulnDB vulnerability data.
|
|
33
|
+
parse_known_vulnerabilities( data, node )
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# Add bespoke/config vulnerabilities to Dradis
|
|
37
|
+
#
|
|
38
|
+
# TODO: Can we add severity to issues?
|
|
39
|
+
#
|
|
40
|
+
# Note: No API key needed.
|
|
41
|
+
parse_config_vulnerabilities( data, node )
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def parse_json( data )
|
|
45
|
+
# Parse scan info data and make more human readable.
|
|
46
|
+
data['wpscan_version'] = data.dig('banner', 'version')
|
|
47
|
+
data['start_time'] = DateTime.strptime(data['start_time'].to_s,'%s')
|
|
48
|
+
data['elapsed'] = "#{data["elapsed"]} seconds"
|
|
49
|
+
data['wordpress_version'] = data.dig('version', 'number') if data['version']
|
|
50
|
+
data['plugins_string'] = data['plugins'].keys.join("\n") if data['plugins']
|
|
51
|
+
data['themes_string'] = data['themes'].keys.join("\n") if data['themes']
|
|
52
|
+
data['users'] = data['users'].keys.join("\n") if data['users']
|
|
53
|
+
|
|
54
|
+
data
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def create_node( data )
|
|
58
|
+
node = content_service.create_node(label: data['target_url'], type: :host)
|
|
59
|
+
|
|
60
|
+
# Define Node properties
|
|
61
|
+
if node.respond_to?(:properties)
|
|
62
|
+
node.set_property(:start_url, data['target_url'])
|
|
63
|
+
#node.set_property(:start_time, data['start_time'])
|
|
64
|
+
node.set_property(:scan_time, data['elapsed'])
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
scan_info = template_service.process_template(template: 'scan_info', data: data)
|
|
68
|
+
content_service.create_note text: scan_info, node: node
|
|
69
|
+
|
|
70
|
+
node
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def parse_known_vulnerabilities( data, node )
|
|
75
|
+
vulnerabilities = []
|
|
76
|
+
|
|
77
|
+
# WordPress Vulnerabilities
|
|
78
|
+
if data['version'] && data['version']['status'] == 'insecure'
|
|
79
|
+
data['version']['vulnerabilities'].each do |vulnerability_data|
|
|
80
|
+
vulnerabilities << parse_vulnerability( vulnerability_data )
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Plugin Vulnerabilities
|
|
85
|
+
if data['plugins']
|
|
86
|
+
data['plugins'].each do |key, plugin|
|
|
87
|
+
if plugin['vulnerabilities']
|
|
88
|
+
plugin['vulnerabilities'].each do |vulnerability_data|
|
|
89
|
+
vulnerabilities << parse_vulnerability( vulnerability_data )
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Theme Vulnerabilities
|
|
96
|
+
if data['themes']
|
|
97
|
+
data['themes'].each do |key, theme|
|
|
98
|
+
if theme['vulnerabilities']
|
|
99
|
+
theme['vulnerabilities'].each do |vulnerability_data|
|
|
100
|
+
vulnerabilities << parse_vulnerability( vulnerability_data )
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Add vulnerabilities from WPVulnDB to Dradis
|
|
107
|
+
vulnerabilities.each do |vulnerability|
|
|
108
|
+
logger.info { "Adding vulnerability: #{vulnerability['title']}" }
|
|
109
|
+
|
|
110
|
+
vulnerability_template = template_service.process_template(template: 'vulnerability', data: vulnerability)
|
|
111
|
+
issue = content_service.create_issue(text: vulnerability_template, id: vulnerability['wpvulndb_id'], node: node)
|
|
112
|
+
|
|
113
|
+
if vulnerability['evidence']
|
|
114
|
+
evidence_content = template_service.process_template(template: 'evidence', data: vulnerability)
|
|
115
|
+
content_service.create_evidence(issue: issue, node: node, content: vulnerability['evidence'])
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def parse_config_vulnerabilities( data, node )
|
|
121
|
+
vulnerabilities = []
|
|
122
|
+
|
|
123
|
+
if data['config_backups']
|
|
124
|
+
data['config_backups'].each do |url, value|
|
|
125
|
+
vulnerability = {}
|
|
126
|
+
vulnerability['title'] = 'WordPress Configuration Backup Found'
|
|
127
|
+
vulnerability['evidence'] = url
|
|
128
|
+
|
|
129
|
+
vulnerabilities << vulnerability
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
if data['db_exports']
|
|
134
|
+
data['db_exports'].each do |url, value|
|
|
135
|
+
vulnerability = {}
|
|
136
|
+
vulnerability['title'] = 'Database Backup File Found'
|
|
137
|
+
vulnerability['evidence'] = url
|
|
138
|
+
|
|
139
|
+
vulnerabilities << vulnerability
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
if data['timthumbs']
|
|
144
|
+
data['timthumbs'].each do |url, value|
|
|
145
|
+
unless value['vulnerabilities'].empty?
|
|
146
|
+
vulnerability = {}
|
|
147
|
+
vulnerability['title'] = "Timthumb RCE File Found"
|
|
148
|
+
vulnerability['evidence'] = url
|
|
149
|
+
|
|
150
|
+
vulnerabilities << vulnerability
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
if data['password_attack']
|
|
156
|
+
data['password_attack'].each do |user|
|
|
157
|
+
vulnerability = {}
|
|
158
|
+
vulnerability['title'] = "WordPres Weak User Password Found"
|
|
159
|
+
vulnerability['evidence'] = "#{user[0]}:#{user[1]['password']}"
|
|
160
|
+
|
|
161
|
+
vulnerabilities << vulnerability
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# Add WordPress configuration vulnerabilities to Dradis
|
|
166
|
+
vulnerabilities.each do |vulnerability|
|
|
167
|
+
logger.info { "Adding vulnerability: #{vulnerability['title']}" }
|
|
168
|
+
|
|
169
|
+
vulnerability_template = template_service.process_template(template: 'vulnerability', data: vulnerability)
|
|
170
|
+
issue = content_service.create_issue(text: vulnerability_template, id: "wpscan_#{rand(999999)}")
|
|
171
|
+
|
|
172
|
+
if vulnerability['evidence']
|
|
173
|
+
evidence_content = template_service.process_template(template: 'evidence', data: vulnerability)
|
|
174
|
+
content_service.create_evidence(issue: issue, node: node, content: vulnerability['evidence'])
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def parse_vulnerability( vulnerability_data )
|
|
180
|
+
wpvulndb_url = 'https://wpvulndb.com/vulnerabilities/'
|
|
181
|
+
|
|
182
|
+
vulnerability = {}
|
|
183
|
+
vulnerability['title'] = vulnerability_data['title']
|
|
184
|
+
vulnerability['fixed_in'] = vulnerability_data['fixed_in'] if vulnerability_data['fixed_in']
|
|
185
|
+
vulnerability['cve'] = 'CVE-' + vulnerability_data['references']['cve'][0] if vulnerability_data['references']['cve']
|
|
186
|
+
vulnerability['url'] = vulnerability_data['references']['url'].join("\n") if vulnerability_data['references']['url']
|
|
187
|
+
vulnerability['wpvulndb_url'] = wpvulndb_url + vulnerability_data['references']['wpvulndb'][0]
|
|
188
|
+
vulnerability['wpvulndb_id'] = vulnerability_data['references']['wpvulndb'][0]
|
|
189
|
+
|
|
190
|
+
vulnerability
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class WpscanTasks < Thor
|
|
2
|
+
include Rails.application.config.dradis.thor_helper_module
|
|
3
|
+
|
|
4
|
+
namespace "dradis:plugins:wpscan"
|
|
5
|
+
|
|
6
|
+
desc "upload FILE", "upload WPScan results in JSON format"
|
|
7
|
+
long_desc "This plugin expects a JSON file generated by WPScan using: -f "\
|
|
8
|
+
"json -o results.json"
|
|
9
|
+
def upload(file_path)
|
|
10
|
+
require 'config/environment'
|
|
11
|
+
|
|
12
|
+
unless File.exists?(file_path)
|
|
13
|
+
$stderr.puts "** the file [#{file_path}] does not exist"
|
|
14
|
+
exit(-1)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
detect_and_set_project_scope
|
|
18
|
+
|
|
19
|
+
importer = Dradis::Plugins::Wpscan::Importer.new(task_options)
|
|
20
|
+
importer.import(file: file_path)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
data/output.json
ADDED
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
{
|
|
2
|
+
"banner": {
|
|
3
|
+
"description": "WordPress Security Scanner by the WPScan Team",
|
|
4
|
+
"version": "3.7.5",
|
|
5
|
+
"authors": [
|
|
6
|
+
"@_WPScan_",
|
|
7
|
+
"@ethicalhack3r",
|
|
8
|
+
"@erwan_lr",
|
|
9
|
+
"@_FireFart_"
|
|
10
|
+
],
|
|
11
|
+
"sponsor": "WPScan.io - Online WordPress Vulnerability Scanner"
|
|
12
|
+
},
|
|
13
|
+
"start_time": 1573482044,
|
|
14
|
+
"start_memory": 50507776,
|
|
15
|
+
"target_url": "http://www.lagardelanguages.com/",
|
|
16
|
+
"effective_url": "http://www.lagardelanguages.com/",
|
|
17
|
+
"interesting_findings": [
|
|
18
|
+
{
|
|
19
|
+
"url": "http://www.lagardelanguages.com/",
|
|
20
|
+
"to_s": "http://www.lagardelanguages.com/",
|
|
21
|
+
"type": "headers",
|
|
22
|
+
"found_by": "Headers (Passive Detection)",
|
|
23
|
+
"confidence": 100,
|
|
24
|
+
"confirmed_by": {
|
|
25
|
+
|
|
26
|
+
},
|
|
27
|
+
"references": {
|
|
28
|
+
|
|
29
|
+
},
|
|
30
|
+
"interesting_entries": [
|
|
31
|
+
"Server: nginx"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"url": "http://www.lagardelanguages.com/robots.txt",
|
|
36
|
+
"to_s": "http://www.lagardelanguages.com/robots.txt",
|
|
37
|
+
"type": "robots_txt",
|
|
38
|
+
"found_by": "Robots Txt (Aggressive Detection)",
|
|
39
|
+
"confidence": 100,
|
|
40
|
+
"confirmed_by": {
|
|
41
|
+
|
|
42
|
+
},
|
|
43
|
+
"references": {
|
|
44
|
+
|
|
45
|
+
},
|
|
46
|
+
"interesting_entries": [
|
|
47
|
+
"/wp-admin/",
|
|
48
|
+
"/wp-admin/admin-ajax.php"
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"url": "http://www.lagardelanguages.com/xmlrpc.php",
|
|
53
|
+
"to_s": "http://www.lagardelanguages.com/xmlrpc.php",
|
|
54
|
+
"type": "xmlrpc",
|
|
55
|
+
"found_by": "Headers (Passive Detection)",
|
|
56
|
+
"confidence": 100,
|
|
57
|
+
"confirmed_by": {
|
|
58
|
+
"Link Tag (Passive Detection)": {
|
|
59
|
+
"confidence": 30
|
|
60
|
+
},
|
|
61
|
+
"Direct Access (Aggressive Detection)": {
|
|
62
|
+
"confidence": 100
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"references": {
|
|
66
|
+
"url": [
|
|
67
|
+
"http://codex.wordpress.org/XML-RPC_Pingback_API"
|
|
68
|
+
],
|
|
69
|
+
"metasploit": [
|
|
70
|
+
"auxiliary/scanner/http/wordpress_ghost_scanner",
|
|
71
|
+
"auxiliary/dos/http/wordpress_xmlrpc_dos",
|
|
72
|
+
"auxiliary/scanner/http/wordpress_xmlrpc_login",
|
|
73
|
+
"auxiliary/scanner/http/wordpress_pingback_access"
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
"interesting_entries": [
|
|
77
|
+
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"url": "http://www.lagardelanguages.com/readme.html",
|
|
82
|
+
"to_s": "http://www.lagardelanguages.com/readme.html",
|
|
83
|
+
"type": "readme",
|
|
84
|
+
"found_by": "Direct Access (Aggressive Detection)",
|
|
85
|
+
"confidence": 100,
|
|
86
|
+
"confirmed_by": {
|
|
87
|
+
|
|
88
|
+
},
|
|
89
|
+
"references": {
|
|
90
|
+
|
|
91
|
+
},
|
|
92
|
+
"interesting_entries": [
|
|
93
|
+
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"url": "http://www.lagardelanguages.com/wp-cron.php",
|
|
98
|
+
"to_s": "http://www.lagardelanguages.com/wp-cron.php",
|
|
99
|
+
"type": "wp_cron",
|
|
100
|
+
"found_by": "Direct Access (Aggressive Detection)",
|
|
101
|
+
"confidence": 60,
|
|
102
|
+
"confirmed_by": {
|
|
103
|
+
|
|
104
|
+
},
|
|
105
|
+
"references": {
|
|
106
|
+
"url": [
|
|
107
|
+
"https://www.iplocation.net/defend-wordpress-from-ddos",
|
|
108
|
+
"https://github.com/wpscanteam/wpscan/issues/1299"
|
|
109
|
+
]
|
|
110
|
+
},
|
|
111
|
+
"interesting_entries": [
|
|
112
|
+
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
],
|
|
116
|
+
"version": {
|
|
117
|
+
"number": "5.1.3",
|
|
118
|
+
"release_date": "2019-10-14",
|
|
119
|
+
"status": "latest",
|
|
120
|
+
"found_by": "Rss Generator (Passive Detection)",
|
|
121
|
+
"confidence": 100,
|
|
122
|
+
"interesting_entries": [
|
|
123
|
+
"http://www.lagardelanguages.com/feed/, <generator>https://wordpress.org/?v=5.1.3</generator>",
|
|
124
|
+
"http://www.lagardelanguages.com/comments/feed/, <generator>https://wordpress.org/?v=5.1.3</generator>",
|
|
125
|
+
"http://www.lagardelanguages.com/sample-page/feed/, <generator>https://wordpress.org/?v=5.1.3</generator>"
|
|
126
|
+
],
|
|
127
|
+
"confirmed_by": {
|
|
128
|
+
|
|
129
|
+
},
|
|
130
|
+
"vulnerabilities": [
|
|
131
|
+
|
|
132
|
+
]
|
|
133
|
+
},
|
|
134
|
+
"main_theme": {
|
|
135
|
+
"slug": "liquorice",
|
|
136
|
+
"location": "http://www.lagardelanguages.com/wp-content/themes/liquorice/",
|
|
137
|
+
"latest_version": "2.3",
|
|
138
|
+
"last_updated": "2013-05-30T00:00:00.000Z",
|
|
139
|
+
"outdated": false,
|
|
140
|
+
"readme_url": "http://www.lagardelanguages.com/wp-content/themes/liquorice/readme.txt",
|
|
141
|
+
"directory_listing": false,
|
|
142
|
+
"error_log_url": null,
|
|
143
|
+
"style_url": "http://www.lagardelanguages.com/wp-content/themes/liquorice/style.css",
|
|
144
|
+
"style_name": "Liquorice",
|
|
145
|
+
"style_uri": "http://www.nudgedesign.ca/wordpress-themes/liquorice",
|
|
146
|
+
"description": "A simple and clean vintage looking theme for you to build on using Google's font API Lobster font. Custom background feature enabled.",
|
|
147
|
+
"author": "Nudge Design",
|
|
148
|
+
"author_uri": "http://www.nudgedesign.ca",
|
|
149
|
+
"template": null,
|
|
150
|
+
"license": "GNU General Public License v2.0",
|
|
151
|
+
"license_uri": "http://www.gnu.org/licenses/gpl-2.0.html",
|
|
152
|
+
"tags": "custom-background, two-columns, fixed-width, right-sidebar, light, brown, orange, blue",
|
|
153
|
+
"text_domain": null,
|
|
154
|
+
"found_by": "Css Style In Homepage (Passive Detection)",
|
|
155
|
+
"confidence": 100,
|
|
156
|
+
"interesting_entries": [
|
|
157
|
+
|
|
158
|
+
],
|
|
159
|
+
"confirmed_by": {
|
|
160
|
+
"Css Style In 404 Page (Passive Detection)": {
|
|
161
|
+
"confidence": 70,
|
|
162
|
+
"interesting_entries": [
|
|
163
|
+
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
"vulnerabilities": [
|
|
168
|
+
|
|
169
|
+
],
|
|
170
|
+
"version": {
|
|
171
|
+
"number": "2.3",
|
|
172
|
+
"confidence": 80,
|
|
173
|
+
"found_by": "Style (Passive Detection)",
|
|
174
|
+
"interesting_entries": [
|
|
175
|
+
"http://www.lagardelanguages.com/wp-content/themes/liquorice/style.css, Match: 'Version: 2.3'"
|
|
176
|
+
],
|
|
177
|
+
"confirmed_by": {
|
|
178
|
+
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
"parents": [
|
|
182
|
+
|
|
183
|
+
]
|
|
184
|
+
},
|
|
185
|
+
"plugins": {
|
|
186
|
+
"all-in-one-seo-pack": {
|
|
187
|
+
"slug": "all-in-one-seo-pack",
|
|
188
|
+
"location": "http://www.lagardelanguages.com/wp-content/plugins/all-in-one-seo-pack/",
|
|
189
|
+
"latest_version": "3.2.10",
|
|
190
|
+
"last_updated": "2019-10-17T15:07:00.000Z",
|
|
191
|
+
"outdated": true,
|
|
192
|
+
"readme_url": null,
|
|
193
|
+
"directory_listing": null,
|
|
194
|
+
"error_log_url": null,
|
|
195
|
+
"found_by": "Comment (Passive Detection)",
|
|
196
|
+
"confidence": 30,
|
|
197
|
+
"interesting_entries": [
|
|
198
|
+
|
|
199
|
+
],
|
|
200
|
+
"confirmed_by": {
|
|
201
|
+
|
|
202
|
+
},
|
|
203
|
+
"vulnerabilities": [
|
|
204
|
+
|
|
205
|
+
],
|
|
206
|
+
"version": {
|
|
207
|
+
"number": "3.1",
|
|
208
|
+
"confidence": 100,
|
|
209
|
+
"found_by": "Comment (Passive Detection)",
|
|
210
|
+
"interesting_entries": [
|
|
211
|
+
"http://www.lagardelanguages.com/, Match: 'All in One SEO Pack 3.1 by'"
|
|
212
|
+
],
|
|
213
|
+
"confirmed_by": {
|
|
214
|
+
"Readme - Stable Tag (Aggressive Detection)": {
|
|
215
|
+
"confidence": 80,
|
|
216
|
+
"interesting_entries": [
|
|
217
|
+
"http://www.lagardelanguages.com/wp-content/plugins/all-in-one-seo-pack/readme.txt"
|
|
218
|
+
]
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
"qtranslate": {
|
|
224
|
+
"slug": "qtranslate",
|
|
225
|
+
"location": "http://www.lagardelanguages.com/wp-content/plugins/qtranslate/",
|
|
226
|
+
"latest_version": null,
|
|
227
|
+
"last_updated": null,
|
|
228
|
+
"outdated": false,
|
|
229
|
+
"readme_url": null,
|
|
230
|
+
"directory_listing": null,
|
|
231
|
+
"error_log_url": null,
|
|
232
|
+
"found_by": "Urls In Homepage (Passive Detection)",
|
|
233
|
+
"confidence": 100,
|
|
234
|
+
"interesting_entries": [
|
|
235
|
+
|
|
236
|
+
],
|
|
237
|
+
"confirmed_by": {
|
|
238
|
+
"Urls In 404 Page (Passive Detection)": {
|
|
239
|
+
"confidence": 80,
|
|
240
|
+
"interesting_entries": [
|
|
241
|
+
|
|
242
|
+
]
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
"vulnerabilities": [
|
|
246
|
+
|
|
247
|
+
],
|
|
248
|
+
"version": null
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
"config_backups": {
|
|
252
|
+
"http://www.lagardelanguages.com/wp-config.txt": {
|
|
253
|
+
"found_by": "Direct Access (Aggressive Detection)",
|
|
254
|
+
"confidence": 100,
|
|
255
|
+
"interesting_entries": [
|
|
256
|
+
|
|
257
|
+
],
|
|
258
|
+
"confirmed_by": {
|
|
259
|
+
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
},
|
|
263
|
+
"users": {
|
|
264
|
+
"marie": {
|
|
265
|
+
"id": null,
|
|
266
|
+
"found_by": "Rss Generator (Passive Detection)",
|
|
267
|
+
"confidence": 100,
|
|
268
|
+
"interesting_entries": [
|
|
269
|
+
|
|
270
|
+
],
|
|
271
|
+
"confirmed_by": {
|
|
272
|
+
"Wp Json Api (Aggressive Detection)": {
|
|
273
|
+
"confidence": 100,
|
|
274
|
+
"interesting_entries": [
|
|
275
|
+
"http://www.lagardelanguages.com/wp-json/wp/v2/users/?per_page=100&page=1"
|
|
276
|
+
]
|
|
277
|
+
},
|
|
278
|
+
"Oembed API - Author URL (Aggressive Detection)": {
|
|
279
|
+
"confidence": 90,
|
|
280
|
+
"interesting_entries": [
|
|
281
|
+
"http://www.lagardelanguages.com/wp-json/oembed/1.0/embed?url=http://www.lagardelanguages.com/&format=json"
|
|
282
|
+
]
|
|
283
|
+
},
|
|
284
|
+
"Rss Generator (Aggressive Detection)": {
|
|
285
|
+
"confidence": 50,
|
|
286
|
+
"interesting_entries": [
|
|
287
|
+
|
|
288
|
+
]
|
|
289
|
+
},
|
|
290
|
+
"Author Id Brute Forcing - Author Pattern (Aggressive Detection)": {
|
|
291
|
+
"confidence": 100,
|
|
292
|
+
"interesting_entries": [
|
|
293
|
+
|
|
294
|
+
]
|
|
295
|
+
},
|
|
296
|
+
"Login Error Messages (Aggressive Detection)": {
|
|
297
|
+
"confidence": 100,
|
|
298
|
+
"interesting_entries": [
|
|
299
|
+
|
|
300
|
+
]
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
"password_attack": {
|
|
306
|
+
"marie": {
|
|
307
|
+
"password": "polluxtip"
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
"vuln_api": {
|
|
311
|
+
"error": "No WPVulnDB API Token given, as a result vulnerability data has not been output.\nYou can get a free API token with 50 daily requests by registering at https://wpvulndb.com/users/sign_up."
|
|
312
|
+
},
|
|
313
|
+
"stop_time": 1573482053,
|
|
314
|
+
"elapsed": 8,
|
|
315
|
+
"requests_done": 47,
|
|
316
|
+
"cached_requests": 52,
|
|
317
|
+
"data_sent": 19085,
|
|
318
|
+
"data_sent_humanised": "18.638 KB",
|
|
319
|
+
"data_received": 42204,
|
|
320
|
+
"data_received_humanised": "41.215 KB",
|
|
321
|
+
"used_memory": 200556544,
|
|
322
|
+
"used_memory_humanised": "191.266 MB"
|
|
323
|
+
}
|