dradis-wpscan 3.17.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.
@@ -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,7 @@
1
+ # Hook to the framework base clases
2
+ require 'dradis-plugins'
3
+
4
+ # Load this add-on's engine
5
+ require 'dradis/plugins/wpscan'
6
+
7
+ require 'multi_json'
@@ -0,0 +1,11 @@
1
+ module Dradis
2
+ module Plugins
3
+ module Wpscan
4
+ end
5
+ end
6
+ end
7
+
8
+ require 'dradis/plugins/wpscan/engine'
9
+ require 'dradis/plugins/wpscan/field_processor'
10
+ require 'dradis/plugins/wpscan/importer'
11
+ require 'dradis/plugins/wpscan/version'
@@ -0,0 +1,13 @@
1
+ module Dradis
2
+ module Plugins
3
+ module Wpscan
4
+ class Engine < ::Rails::Engine
5
+ isolate_namespace Dradis::Plugins::Wpscan
6
+
7
+ include ::Dradis::Plugins::Base
8
+ description 'Processes WPScan JSON output'
9
+ provides :upload
10
+ end
11
+ end
12
+ end
13
+ 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,13 @@
1
+ require_relative 'gem_version'
2
+
3
+ module Dradis
4
+ module Plugins
5
+ module Wpscan
6
+ # Returns the version of the currently loaded WPScan as a
7
+ # <tt>Gem::Version</tt>.
8
+ def self.version
9
+ gem_version
10
+ end
11
+ end
12
+ end
13
+ 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
@@ -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
+ }