metasploit-runner 0.2.4 → 0.2.5

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: 7c64681c2203eed651d897863f6acd420abed4d9
4
- data.tar.gz: 68228e2fe22e7bea7358d0a25bfb03aa85bbdf28
3
+ metadata.gz: 44b990805ebdd61623403a4830225f3d9bdaa3f9
4
+ data.tar.gz: 71522f5c6ae49c2595d018d43fc179bb7864339c
5
5
  SHA512:
6
- metadata.gz: 773aa5020c5fd2b2b930e42a89df9b633bbed3d908c76510e5bb31f9719c221129bd6d2a3c4af724a29626b8ffcb462045f86babef3c776f02c90cfd300fa214
7
- data.tar.gz: b5f95158a6bd8a2a7cfed821ce152819b0c788318ce41e26e900d8b8e8432e815e29ece8f75f4fffdf1f582eb5094eb692bb94fff04dafcbcd00e69d0fe8e55e
6
+ metadata.gz: 2ba81f7d13ec19e6ff343c076d59b3f94997030569afc75cba1da50725fb250aec9f78efe4629297b0055141630103ac144207fe16164208c38e0a5f173cfb55
7
+ data.tar.gz: c8619e0b553700d9b79d2a6380c3bd42ac04caaa82eeab382fe65d2ab7c0de91c2d21c56fb0ff1839bd9946bb0eaaa7879f5be98c54dec160e40440e5f1756cb
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'msfrpc-client', '1.0.2'
21
+ spec.add_dependency 'msfrpc-client', '1.1.1'
22
22
 
23
23
  spec.add_development_dependency 'bundler'
24
24
  spec.add_development_dependency 'rake'
@@ -17,7 +17,8 @@ if ARGV.grep(/^--/).empty?
17
17
  'use_os_filter' => ARGV[8],
18
18
  'module_filter' => ARGV[9],
19
19
  'report_type' => ARGV[10],
20
- 'whitelist_hosts' => ARGV[11]
20
+ 'whitelist_hosts' => ARGV[11],
21
+ 'ssl_version' => ARGV[12]
21
22
  })
22
23
  else
23
24
  Metasploit::Exploit.start(ARGV)
@@ -2,6 +2,7 @@ connection_url: 'sploit.mydomain.com'
2
2
  port: '3790'
3
3
  uri: '/api/1.0'
4
4
  use_ssl: 'true'
5
+ ssl_version: 'TLS1'
5
6
  token: 'asdlkjhsdfuw1228340asdasf8'
6
7
  workspace_name: 'mycoolsoftware-build-28'
7
8
  nexpose_console_name: 'nexpose-console-1'
@@ -1,3 +1,3 @@
1
1
  module MetasploitPenTestScript
2
- VERSION = "0.2.4"
2
+ VERSION = "0.2.5"
3
3
  end
@@ -4,6 +4,7 @@ class CommandLineArgumentParser
4
4
  def self.parse(args)
5
5
  options = {}
6
6
  options['use_ssl'] = false
7
+ options['ssl_version'] = 'TLS1'
7
8
  options['use_os_filter'] = false
8
9
  options['exploit_speed'] = 5
9
10
  options['limit_sessions'] = false
@@ -28,6 +29,10 @@ class CommandLineArgumentParser
28
29
  options['use_ssl'] = true
29
30
  end
30
31
 
32
+ opts.on('--ssl-version SSL-VERSION', 'SSL Version when using SSL') do |ssl_version|
33
+ options['ssl_version'] = ssl_version
34
+ end
35
+
31
36
  opts.on('--token TOKEN', 'Access token for Metasploit') do |token|
32
37
  options['token'] = token
33
38
  end
@@ -3,6 +3,7 @@ module CONSTANTS
3
3
  DEFAULT_URI = '/api/1.0'
4
4
  DEFAULT_SSL = true
5
5
  DEFAULT_OS_FILTER = false
6
+ DEFAULT_SSL_VERSION = 'TLS1'
6
7
  RUNNING_IMPORT_STATUS = 'running'
7
8
  EXPLOIT_RUNNING_MESSAGE = 'running'
8
9
  REQUIRED_TOKEN_MESSAGE = 'PWNED! Token is required'
@@ -13,6 +14,7 @@ module CONSTANTS
13
14
  SUCCESSFUL_CONNECTION_MESSAGE = '[*] Sucessfully authenticated to the Metasploit server'
14
15
  USING_DEFAULT_SSL_MESSAGE = '[*] Using SSL=TRUE'
15
16
  IMPORTING_DATA_MESSAGE = '[*] Importing scan data from Nexpose...'
17
+ DISCOVER_MESSAGE = '[*] Discovering all your things with Discover...'
16
18
  SCANNING_MESSAGE = '[*] Scanning all your things with WebScan...'
17
19
  AUDIT_MESSAGE = '[*] Performing web audit...'
18
20
  EXPLOIT_MESSAGE = '[*] Exploiting all your things...'
@@ -24,4 +26,4 @@ module CONSTANTS
24
26
  USING_MODULE_FILTER = '[*] Filtering exploits based on your desired modules'
25
27
  NO_MODULE_FILTER = '[*] Not filtering any modules'
26
28
  NO_REPORT_TYPE_MESSAGE = 'No report type specified - skipping report generation'
27
- end
29
+ end
@@ -36,6 +36,9 @@ module Metasploit
36
36
 
37
37
  if run_details.nexpose_console_name.nil? || run_details.nexpose_console_name.empty?
38
38
  puts CONSTANTS::SKIPPING_IMPORT_MESSAGE
39
+ discover = rpc_client.call('pro.start_discover', run_details.get_discover_options)
40
+
41
+ wait_for_task_to_stop_running(rpc_client, CONSTANTS::DISCOVER_MESSAGE, discover['task_id'])
39
42
  else
40
43
  import = rpc_client.call('pro.start_import', {'workspace' => run_details.workspace_name, 'DS_NEXPOSE_CONSOLE' => run_details.nexpose_console_name, 'DS_NEXPOSE_SITE' => run_details.workspace_name})
41
44
  wait_for_task_to_stop_running(rpc_client, CONSTANTS::IMPORTING_DATA_MESSAGE, import['task_id'])
@@ -6,10 +6,12 @@ class ExploitRunDescription
6
6
  :port,
7
7
  :uri,
8
8
  :use_ssl,
9
+ :ssl_version,
9
10
  :token,
10
11
  :workspace_name,
11
12
  :nexpose_console_name,
12
13
  :device_ip_to_scan,
14
+ :raw_device_ip_to_scan,
13
15
  :use_os_filter,
14
16
  :module_filter,
15
17
  :report_type,
@@ -20,6 +22,7 @@ class ExploitRunDescription
20
22
  @@port_value = ''
21
23
  @@uri_value = ''
22
24
  @@use_ssl_value = ''
25
+ @@ssl_version = ''
23
26
  @@device_ip_to_scan_value = ''
24
27
  @@use_os_filter_value = ''
25
28
 
@@ -34,10 +37,12 @@ class ExploitRunDescription
34
37
  @@port_value = options['port']
35
38
  @@uri_value = options['uri']
36
39
  @@use_ssl_value = options['use_ssl']
40
+ @@ssl_version = options['ssl_version']
37
41
  self.token = options['token']
38
42
  self.workspace_name = options['workspace_name']
39
43
  self.nexpose_console_name = options['nexpose_console_name']
40
44
  @@device_ip_to_scan_value = options['device_ip_to_scan']
45
+ self.raw_device_ip_to_scan = options['device_ip_to_scan']
41
46
  self.use_os_filter = options['use_os_filter']
42
47
  self.module_filter = options['module_filter']
43
48
  self.report_type = options['report_type']
@@ -59,7 +64,7 @@ class ExploitRunDescription
59
64
  :token => self.token,
60
65
  :uri => self.uri,
61
66
  :ssl => self.use_ssl,
62
- :ssl_version => 'TLS1'
67
+ :ssl_version => self.ssl_version
63
68
  }
64
69
  end
65
70
 
@@ -98,7 +103,14 @@ class ExploitRunDescription
98
103
  'report_type' => self.report_type,
99
104
  'created_by' => self.workspace_name,
100
105
  'file_formats' => [:pdf],
101
- 'DS_WHITELIST_HOSTS' => self.device_ip_to_scan
106
+ 'included_addresses' => self.whitelist_hosts
107
+ }
108
+ end
109
+
110
+ def get_discover_options
111
+ {
112
+ 'workspace' => self.workspace_name,
113
+ 'ips' => [self.raw_device_ip_to_scan]
102
114
  }
103
115
  end
104
116
 
@@ -141,6 +153,14 @@ class ExploitRunDescription
141
153
  (@@use_ssl_value != false) ? true : false
142
154
  end
143
155
 
156
+ def ssl_version=(value)
157
+ @@ssl_version = value
158
+ end
159
+
160
+ def ssl_version
161
+ get_value(@@ssl_version, CONSTANTS::DEFAULT_SSL_VERSION)
162
+ end
163
+
144
164
  def use_os_filter=(value)
145
165
  @@use_os_filter_value = value
146
166
  end
@@ -9,6 +9,7 @@ describe 'command_line_argument_parser' do
9
9
  '--port' => '1234',
10
10
  '--token' => 'testtoken',
11
11
  '--use-ssl' => nil,
12
+ '--ssl-version' => 'TLS1',
12
13
  '--use-os-filter' => nil,
13
14
  '--module-filter' => 'exploit/blah1,exploit/blah2',
14
15
  '--report-type' => 'fisma',
@@ -45,6 +46,16 @@ describe 'command_line_argument_parser' do
45
46
  expect(@command_line_argument_parser['use_ssl']).to eq(false)
46
47
  end
47
48
 
49
+ it 'should parse --ssl-version' do
50
+ expect(@command_line_argument_parser['ssl_version']).to eq(@expected_arguments['--ssl-version'])
51
+ end
52
+
53
+ it 'should pick appropriate default when --ssl-version not present' do
54
+ @expected_arguments.delete '--ssl-version'
55
+ @command_line_argument_parser = CommandLineArgumentParser.parse(hash_to_array(@expected_arguments))
56
+ expect(@command_line_argument_parser['ssl_version']).to eq('TLS1')
57
+ end
58
+
48
59
  it 'should parse --use-os-filter' do
49
60
  expect(@command_line_argument_parser['use_os_filter']).to eq(true)
50
61
  end
@@ -30,6 +30,7 @@ describe 'exploit_run_description' do
30
30
  'port' => @expected_port,
31
31
  'uri' => @expected_uri,
32
32
  'use_ssl' => @expected_ssl,
33
+ 'ssl_version' => @expected_tls,
33
34
  'token' => @expected_token,
34
35
  'workspace_name' => @expected_workspace_name,
35
36
  'nexpose_console_name' => @expected_nexpose_console_name,
@@ -48,6 +49,7 @@ describe 'exploit_run_description' do
48
49
  expect(@exploit_run_description.port).to eq(@expected_port)
49
50
  expect(@exploit_run_description.uri).to eq(@expected_uri)
50
51
  expect(@exploit_run_description.use_ssl).to eq(@expected_ssl)
52
+ expect(@exploit_run_description.ssl_version).to eq(@expected_tls)
51
53
  expect(@exploit_run_description.token).to eq(@expected_token)
52
54
  expect(@exploit_run_description.workspace_name).to eq(@expected_workspace_name)
53
55
  expect(@exploit_run_description.nexpose_console_name).to eq(@expected_nexpose_console_name)
@@ -98,6 +100,16 @@ describe 'exploit_run_description' do
98
100
  expect(@exploit_run_description.use_ssl).to eq(CONSTANTS::DEFAULT_SSL)
99
101
  end
100
102
 
103
+ it 'should use TLS1 as default if empty string' do
104
+ @exploit_run_description.ssl_version = ''
105
+ expect(@exploit_run_description.ssl_version).to eq(CONSTANTS::DEFAULT_SSL_VERSION)
106
+ end
107
+
108
+ it 'should use TLS1 as default if nil is passed' do
109
+ @exploit_run_description.ssl_version = nil
110
+ expect(@exploit_run_description.ssl_version).to eq(CONSTANTS::DEFAULT_SSL_VERSION)
111
+ end
112
+
101
113
  it 'should return false on the SSL Option if false is passed' do
102
114
  @exploit_run_description.use_ssl = false
103
115
  expect(@exploit_run_description.use_ssl).to eq(false)
@@ -44,6 +44,7 @@ describe 'exploit' do
44
44
  'port' => @expected_port,
45
45
  'uri' => @expected_uri,
46
46
  'use_ssl' => @expected_ssl,
47
+ 'ssl_version' => @expected_ssl_version,
47
48
  'token' => @expected_token,
48
49
  'workspace_name' => @expected_workspace_name,
49
50
  'nexpose_console_name' => @expected_nexpose_console_name,
@@ -68,6 +69,7 @@ describe 'exploit' do
68
69
  '--device-ip-to-scan' => '1.2.3.4',
69
70
  '--whitelist-hosts' => '1.2.3.0/24',
70
71
  '--exploit-speed' => '200',
72
+ '--ssl-version' => 'TLS1'
71
73
  }
72
74
  end
73
75
 
@@ -340,7 +342,7 @@ describe 'exploit' do
340
342
  'report_type' => @expected_report_type,
341
343
  'created_by' => @expected_workspace_name,
342
344
  'file_formats' => [:pdf],
343
- 'DS_WHITELIST_HOSTS' => @mock_device_url_to_scan,
345
+ 'included_addresses' => @mock_whitelist_hosts,
344
346
  })
345
347
 
346
348
  Metasploit::Exploit.start(@options)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metasploit-runner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Gibson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-19 00:00:00.000000000 Z
11
+ date: 2017-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msfrpc-client
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.2
19
+ version: 1.1.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 1.0.2
26
+ version: 1.1.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -115,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
115
  version: '0'
116
116
  requirements: []
117
117
  rubyforge_project:
118
- rubygems_version: 2.4.8
118
+ rubygems_version: 2.5.1
119
119
  signing_key:
120
120
  specification_version: 4
121
121
  summary: Script to run automated Metaspolit Penetration Tests.