metasploit-runner 0.0.6 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5c1f3e540898c891a4d9473fde87b342eb1b31c1
4
- data.tar.gz: 3c540a76097bab3eeea6a50a6ad05831df2f9035
3
+ metadata.gz: 3aa74a612b220bdf4518066c980c75bc676a768a
4
+ data.tar.gz: aa3574a74021210c57a9510cb082ae07924e8133
5
5
  SHA512:
6
- metadata.gz: 6f8c38817ad0c37fb49f29359b667bb14a73cd51d4c5117ce5ac4a9c093f0b7b755d3345a4563ec9b895433d63b5e9ea7c2a58f66e00315976add00fc2965041
7
- data.tar.gz: a1fec8df21779de8811c181cf4b78d8e78e1b3cffec5687f46cf24722bfadce85621d4f518981dec1f58ce4fc8965cbbbb449085f2277edd0d1d4b0aad6bb28f
6
+ metadata.gz: c242eb34af6da8d8dd0e773230eb4d660567286f65f5435748ac025124fa0951b7dc3e47d427c2a124800aa61eeb2afd56a346a065536b1bbc5829fa7be4815f
7
+ data.tar.gz: 61f2ae1bc235e8eacd839a1b11a4f7c6614a6776e777bf827487d7ffd2cb2cc34a5d7ed81c5dced766202930a67cfbbeae0bdf65f98fa707e16469ddf5cbcf9c
@@ -1,3 +1,3 @@
1
1
  module MetasploitPenTestScript
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -13,6 +13,7 @@ module CONSTANTS
13
13
  USING_DEFAULT_SSL_MESSAGE = '[*] Using SSL=TRUE'
14
14
  IMPORTING_DATA_MESSAGE = '[*] Importing scan data from Nexpose...'
15
15
  SCANNING_MESSAGE = '[*] Scanning all your things with WebScan...'
16
+ AUDIT_MESSAGE = '[*] Performing web audit...'
16
17
  EXPLOIT_MESSAGE = '[*] Exploiting all your things...'
17
18
  REQUIRED_WORKSPACE_MESSAGE = 'PWNED! Workspace Name is required'
18
19
  SKIPPING_IMPORT_MESSAGE = '[*] Nexpose Console option was not passed, skipping Nexpose Import'
@@ -16,6 +16,8 @@ module Metasploit
16
16
 
17
17
  do_metasploit_scan(rpc_client, run_details)
18
18
 
19
+ do_metasploit_audit(rpc_client, run_details)
20
+
19
21
  do_metasploit_exploit(rpc_client, run_details)
20
22
  end
21
23
 
@@ -47,6 +49,18 @@ module Metasploit
47
49
  wait_for_task_to_stop_running(rpc_client, CONSTANTS::SCANNING_MESSAGE, scan['task_id'])
48
50
  end
49
51
 
52
+ def self.do_metasploit_audit(rpc_client, run_details)
53
+ audit = rpc_client.call('pro.start_webaudit', {
54
+ 'workspace' => run_details.workspace_name,
55
+ 'DS_URLS' => run_details.device_ip_to_scan,
56
+ 'DS_MAX_REQUESTS' => run_details.audit_max_requests,
57
+ 'DS_MAX_MINUTES' => run_details.audit_max_minutes,
58
+ 'DS_MAX_THREADS' => run_details.audit_max_threads,
59
+ 'DS_MAX_INSTANCES' => run_details.audit_max_instances
60
+ })
61
+ wait_for_task_to_stop_running(rpc_client, CONSTANTS::AUDIT_MESSAGE, audit['task_id'])
62
+ end
63
+
50
64
  def self.do_metasploit_exploit(rpc_client, run_details)
51
65
  sploit = rpc_client.call('pro.start_exploit', {'workspace' => run_details.workspace_name})
52
66
  wait_for_task_to_stop_running(rpc_client, CONSTANTS::EXPLOIT_MESSAGE, sploit['task_id'])
@@ -65,4 +79,4 @@ module Metasploit
65
79
  wait_for_task_to_stop_running(rpc_client, status_message, task_id) if status == CONSTANTS::RUNNING_IMPORT_STATUS
66
80
  end
67
81
  end
68
- end
82
+ end
@@ -35,6 +35,22 @@ class ExploitRunDescription
35
35
  @@device_ip_to_scan_value = value
36
36
  end
37
37
 
38
+ def audit_max_requests
39
+ 1000
40
+ end
41
+
42
+ def audit_max_minutes
43
+ 3
44
+ end
45
+
46
+ def audit_max_threads
47
+ 5
48
+ end
49
+
50
+ def audit_max_instances
51
+ 3
52
+ end
53
+
38
54
  def device_ip_to_scan
39
55
  "http://#{@@device_ip_to_scan_value}"
40
56
  end
@@ -67,4 +83,4 @@ class ExploitRunDescription
67
83
  (value_to_check.nil? || value_to_check.empty?) ? default : value_to_check
68
84
  end
69
85
 
70
- end
86
+ end
data/spec/exploit_spec.rb CHANGED
@@ -17,6 +17,11 @@ describe 'exploit' do
17
17
  @expected_webscan_task_id = '12'
18
18
  @expected_import_task_id = '1'
19
19
  @expected_exploit_task_id = '13'
20
+ @expected_audit_task_id = '14'
21
+ @expected_audit_max_requests = 1000
22
+ @expected_audit_max_minutes = 3
23
+ @expected_audit_max_threads = 5
24
+ @expected_audit_max_instances = 3
20
25
  @mock_rpc_client = get_mock_rpc_client
21
26
  @mock_device_ip_to_scan = '127.0.0.1'
22
27
  @mock_device_url_to_scan = "http://#{@mock_device_ip_to_scan}"
@@ -137,8 +142,8 @@ describe 'exploit' do
137
142
  .once
138
143
  .ordered
139
144
 
140
- #Expecting 5 because we are mocking 4 above and the global :call mock in get_mock_rpc_client
141
- expect(Metasploit::Exploit).to receive(:sleep).with(3).exactly(6).times
145
+ #Expecting 7 because we are mocking 6 above and the global :call mock in get_mock_rpc_client
146
+ expect(Metasploit::Exploit).to receive(:sleep).with(3).exactly(7).times
142
147
 
143
148
  Metasploit::Exploit.start(@expected_connection, @expected_port, @expected_uri, @expected_ssl, @expected_token, @expected_workspace_name, @expected_nexpose_console_name, @mock_device_ip_to_scan)
144
149
  end
@@ -197,8 +202,82 @@ describe 'exploit' do
197
202
  .once
198
203
  .ordered
199
204
 
200
- #Expecting 6 because we are mocking 4 above and the global :call mock in get_mock_rpc_client
201
- expect(Metasploit::Exploit).to receive(:sleep).with(3).exactly(6).times
205
+ #Expecting 7 because we are mocking 6 above and the global :call mock in get_mock_rpc_client
206
+ expect(Metasploit::Exploit).to receive(:sleep).with(3).exactly(7).times
207
+
208
+ Metasploit::Exploit.start(@expected_connection, @expected_port, @expected_uri, @expected_ssl, @expected_token, @expected_workspace_name, @expected_nexpose_console_name, @mock_device_ip_to_scan)
209
+ end
210
+ end
211
+ end
212
+
213
+ describe 'start an audit' do
214
+
215
+ it 'should kick off an audit' do
216
+ expect(@mock_rpc_client).to receive(:call)
217
+ .with('pro.start_webaudit', {
218
+ 'workspace' => @expected_workspace_name,
219
+ 'DS_URLS' => @mock_device_url_to_scan,
220
+ 'DS_MAX_REQUESTS' => @expected_audit_max_requests,
221
+ 'DS_MAX_MINUTES' => @expected_audit_max_minutes,
222
+ 'DS_MAX_THREADS' => @expected_audit_max_threads,
223
+ 'DS_MAX_INSTANCES' => @expected_audit_max_instances
224
+ })
225
+
226
+ Metasploit::Exploit.start(@expected_connection, @expected_port, @expected_uri, @expected_ssl, @expected_token, @expected_workspace_name, @expected_nexpose_console_name, @mock_device_ip_to_scan)
227
+ end
228
+
229
+ describe 'wait for audit to be over' do
230
+ before(:each) do
231
+
232
+ expect(@mock_rpc_client).to receive(:call)
233
+ .with('pro.start_webaudit', {
234
+ 'workspace' => @expected_workspace_name,
235
+ 'DS_URLS' => @mock_device_url_to_scan,
236
+ 'DS_MAX_REQUESTS' => @expected_audit_max_requests,
237
+ 'DS_MAX_MINUTES' => @expected_audit_max_minutes,
238
+ 'DS_MAX_THREADS' => @expected_audit_max_threads,
239
+ 'DS_MAX_INSTANCES' => @expected_audit_max_instances
240
+ })
241
+ .and_return({'task_id' => @expected_audit_task_id})
242
+ end
243
+
244
+ it 'should call to check the status of the audit' do
245
+ expect(@mock_rpc_client).to receive(:call).with('pro.task_status', @expected_audit_task_id)
246
+
247
+ Metasploit::Exploit.start(@expected_connection, @expected_port, @expected_uri, @expected_ssl, @expected_token, @expected_workspace_name, @expected_nexpose_console_name, @mock_device_ip_to_scan)
248
+ end
249
+
250
+ it 'should call to check the status until it is not running' do
251
+ expect(@mock_rpc_client).to receive(:call)
252
+ .with('pro.task_status', @expected_audit_task_id)
253
+ .and_return({'14'=>{'status' => 'running', 'progress' => 3, 'info' => 'Auditing your website'}})
254
+ .exactly(3).times
255
+ .ordered
256
+
257
+ expect(@mock_rpc_client).to receive(:call)
258
+ .with('pro.task_status', @expected_audit_task_id)
259
+ .and_return({'14'=>{'status' => 'not running', 'progress' => 100, 'info' => 'Complete'}})
260
+ .once
261
+ .ordered
262
+
263
+ Metasploit::Exploit.start(@expected_connection, @expected_port, @expected_uri, @expected_ssl, @expected_token, @expected_workspace_name, @expected_nexpose_console_name, @mock_device_ip_to_scan)
264
+ end
265
+
266
+ it 'should sleep for 3 seconds if the status is still running' do
267
+ expect(@mock_rpc_client).to receive(:call)
268
+ .with('pro.task_status', @expected_audit_task_id)
269
+ .and_return({'14'=>{'status' => 'running', 'progress' => 3, 'info' => 'Auditing your website'}})
270
+ .exactly(3).times
271
+ .ordered
272
+
273
+ expect(@mock_rpc_client).to receive(:call)
274
+ .with('pro.task_status', @expected_audit_task_id)
275
+ .and_return({'14'=>{'status' => 'not running', 'progress' => 100, 'info' => 'Complete'}})
276
+ .once
277
+ .ordered
278
+
279
+ #Expecting 7 because we are mocking 6 above and the global :call mock in get_mock_rpc_client
280
+ expect(Metasploit::Exploit).to receive(:sleep).with(3).exactly(7).times
202
281
 
203
282
  Metasploit::Exploit.start(@expected_connection, @expected_port, @expected_uri, @expected_ssl, @expected_token, @expected_workspace_name, @expected_nexpose_console_name, @mock_device_ip_to_scan)
204
283
  end
@@ -257,14 +336,15 @@ describe 'exploit' do
257
336
  .once
258
337
  .ordered
259
338
 
260
- #Expecting 6 because we are mocking 4 above and the global :call mock in get_mock_rpc_client
261
- expect(Metasploit::Exploit).to receive(:sleep).with(3).exactly(6).times
339
+ #Expecting 7 because we are mocking 6 above and the global :call mock in get_mock_rpc_client
340
+ expect(Metasploit::Exploit).to receive(:sleep).with(3).exactly(7).times
262
341
 
263
342
  Metasploit::Exploit.start(@expected_connection, @expected_port, @expected_uri, @expected_ssl, @expected_token, @expected_workspace_name, @expected_nexpose_console_name, @mock_device_ip_to_scan)
264
343
  end
265
344
  end
266
345
  end
267
346
 
347
+
268
348
  end
269
349
  end
270
350
 
@@ -281,4 +361,4 @@ def get_mock_rpc_client
281
361
  .and_return(mock_rpc_client)
282
362
 
283
363
  mock_rpc_client
284
- end
364
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metasploit-runner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Gibson