dradis-wpscan 3.17.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 +8 -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.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 +167 -0
data/README.md
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# WPScan add-on for Dradis
|
2
|
+
|
3
|
+
[![Build Status](https://secure.travis-ci.org/dradis/dradis-wpscan.png?branch=master)](http://travis-ci.org/dradis/dradis-wpscan) [![Code Climate](https://codeclimate.com/github/dradis/dradis-wpscan.png)](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 = 17
|
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
|
+
}
|