pwn 0.4.428 → 0.4.431

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
  SHA256:
3
- metadata.gz: d9bd0dc9709e3043fbe7ad675ff346e3b40d669cfea819738d80f55ab4eed27f
4
- data.tar.gz: 3ec835eac8f1a6844497636822ad604eb5c344859499af7d423db16fc358b2f9
3
+ metadata.gz: 48072b8179bfac8c54e8c436a40414dc482092f73ef06fb3f6f318fde1f27ca7
4
+ data.tar.gz: 1760f70d5a5e81fb0c5e82606a3019b4de3e374a2a596a1ffd344dba62d2d865
5
5
  SHA512:
6
- metadata.gz: c27de53fb91911f8310b32039391636fa8be67325c4a5bbb20b12ae7d7a43965c62bdbfbb685fa9740b6d7a8d362582eda1517133d41369092940ba64aad0ce2
7
- data.tar.gz: 5c00306225bc215c7117a3ed4163f763a76818b7ec2d557e6d44c416766dde6396dd1ce032c2260cf20cf7af245f6e01a4018fd9d6c47ad60b00e8f594399b95
6
+ metadata.gz: 48b319c619e24c40ec69a45c4ab2470972480400157443470752d0915e93761f3ad0e0a74b33f6d5389034e091d054efa4455ea8943957620d4e98130cb0c598
7
+ data.tar.gz: d93a09ed3585490878ca297da4be21bcce0a28f80732838eb2ddb436bab7383293aead3628a851bd7fc78f03b4af0a231f01145434132292f6d3ed6e69f088f1
data/README.md CHANGED
@@ -37,7 +37,7 @@ $ rvm use ruby-3.1.2@pwn
37
37
  $ rvm list gemsets
38
38
  $ gem install --verbose pwn
39
39
  $ pwn
40
- pwn[v0.4.428]:001 >>> PWN.help
40
+ pwn[v0.4.431]:001 >>> PWN.help
41
41
  ```
42
42
 
43
43
  [![Installing the pwn Security Automation Framework](https://raw.githubusercontent.com/0dayInc/pwn/master/documentation/pwn_install.png)](https://youtu.be/G7iLUY4FzsI)
@@ -52,7 +52,7 @@ $ rvm use ruby-3.1.2@pwn
52
52
  $ gem uninstall --all --executables pwn
53
53
  $ gem install --verbose pwn
54
54
  $ pwn
55
- pwn[v0.4.428]:001 >>> PWN.help
55
+ pwn[v0.4.431]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
 
@@ -19,12 +19,32 @@ OptionParser.new do |options|
19
19
  opts[:scan_name] = n
20
20
  end
21
21
 
22
+ options.on('-tVALUE', '--scan-template=VALUE', '<Optional - Canned Scan Template to Use for Scan Creation (Defaults to "Basic Network Scan">') do |t|
23
+ opts[:scan_template] = t
24
+ end
25
+
22
26
  options.on('-pPOLICY', '--policy-name=POLICY', '<Optional - Policy to Use to Create the Scan (Defaults to "")>') do |p|
23
27
  opts[:policy_name] = p
24
28
  end
25
29
 
26
- options.on('-tVALUE', '--scan-template=VALUE', '<Optional - Canned Scan Template to Use for Scan Creation (Defaults to "Basic Network Scan">') do |t|
27
- opts[:scan_template] = t
30
+ options.on('-fFOLDER', '--folder-name=FOLDER', '<Optional - Where to Store the Scan (Defaults to "main")>') do |f|
31
+ opts[:folder_name] = f
32
+ end
33
+
34
+ options.on('-sSCANNER', '--scanner-name=SCANNER', '<Optional - Scanner to Use (Defaults to "AUTO-ROUTED")>') do |s|
35
+ opts[:scanner_name] = s
36
+ end
37
+
38
+ options.on('-TTARGET', '--target-network-name=TARGET', '<Optional if --scanner other than AUTO-ROUTED, Otherwise Required - Network to Scan (Defaults to "Default")>') do |t|
39
+ opts[:target_network_name] = t
40
+ end
41
+
42
+ options.on('-lWHEN', '--launch=WHEN', '<Optional When to Launch Scan - ON_DEMAND || DAILY || WEEKLY || MONTHLY || YEARLY (Defaults to "ON_DEMAND")>') do |l|
43
+ opts[:launch] = l
44
+ end
45
+
46
+ options.on('-wTIME', '--scan-time-window=TIME', '<Optional Scan Time Window in Minutes - (Defaults to 0 if nessus scanner scan || 180 if nessus agent scan)>') do |l|
47
+ opts[:launch] = l
28
48
  end
29
49
  end.parse!
30
50
 
@@ -48,32 +68,64 @@ begin
48
68
 
49
69
  scan_name = opts[:scan_name]
50
70
 
71
+ scan_template = opts[:scan_template]
72
+ scan_template ||= 'Basic Network Scan'
73
+
51
74
  policy_name = opts[:policy_name]
52
75
  policy_name ||= ''
53
76
 
54
- scan_template = opts[:scan_template]
55
- scan_template ||= 'Basic Network Scan'
77
+ folder_name = opts[:folder_name]
78
+ folder_name ||= 'main'
79
+
80
+ scanner_name = opts[:scanner_name]
81
+ scanner_name ||= 'AUTO-ROUTED'
82
+
83
+ target_network_name = opts[:target_network_name]
84
+ target_network_name ||= 'Default'
85
+
86
+ launch = opts[:launch]
87
+ launch ||= 'ON_DEMAND'
88
+
89
+ scan_time_window = opts[:scan_time_window]
56
90
 
57
91
  nessus_obj = PWN::Plugins::NessusCloud.login(
58
92
  access_key: access_key,
59
93
  secret_key: secret_key
60
94
  )
61
95
 
62
- policy_list = PWN::Plugins::NessusCloud.get_policies(
63
- nessus_obj: nessus_obj
96
+ scan_template = PWN::Plugins::NessusCloud.get_canned_scan_templates(
97
+ nessus_obj: nessus_obj,
98
+ title: scan_template
64
99
  )
65
- puts policy_list.inspect
100
+ scan_template_id = scan_template[:uuid]
101
+ puts scan_template_id
66
102
 
67
- scan_template_list = PWN::Plugins::NessusCloud.get_canned_scan_templates(
68
- nessus_obj: nessus_obj
103
+ policy = PWN::Plugins::NessusCloud.get_policies(
104
+ nessus_obj: nessus_obj,
105
+ name: policy_name
69
106
  )
107
+ policy_id = policy[:id]
108
+ puts policy_id
70
109
 
71
- selected_scan_template = scan_template_list[:templates].select do |sc|
72
- sc[:title] == scan_template
73
- end
110
+ folder = PWN::Plugins::NessusCloud.get_folders(
111
+ nessus_obj: nessus_obj,
112
+ name: folder_name
113
+ )
114
+ folder_id = folder[:id]
115
+ puts folder_id
74
116
 
75
- scan_template_id = selected_scan_template.first[:uuid]
117
+ scanner = PWN::Plugins::NessusCloud.get_scanners(
118
+ nessus_obj: nessus_obj,
119
+ name: scanner_name
120
+ )
121
+ scanner_id = scanner[:id]
122
+ puts scanner_id
76
123
 
124
+ target_network = PWN::Plugins::NessusCloud.get_target_networks(
125
+ nessus_obj: nessus_obj,
126
+ name: target_network_name
127
+ )
128
+ target_network_id = target_network[:uuid]
77
129
  rescue Interrupt
78
130
  puts 'CTRL+C detected...goodbye.'
79
131
  rescue StandardError => e
@@ -54,15 +54,11 @@ begin
54
54
  secret_key: secret_key
55
55
  )
56
56
 
57
- scan_list = PWN::Plugins::NessusCloud.get_scans(
58
- nessus_obj: nessus_obj
57
+ scan = PWN::Plugins::NessusCloud.get_scans(
58
+ nessus_obj: nessus_obj,
59
+ name: scan_name
59
60
  )
60
-
61
- selected_scan_to_launch = scan_list[:scans].select do |scan|
62
- scan[:name] == scan_name
63
- end
64
-
65
- scan_id = selected_scan_to_launch.first[:id]
61
+ scan_id = scan[:id]
66
62
 
67
63
  PWN::Plugins::NessusCloud.launch_scan(
68
64
  nessus_obj: nessus_obj,
@@ -99,13 +99,24 @@ module PWN
99
99
 
100
100
  public_class_method def self.get_canned_scan_templates(opts = {})
101
101
  nessus_obj = opts[:nessus_obj]
102
+ title = opts[:title]
102
103
 
103
104
  scan_templates_resp = nessus_cloud_rest_call(
104
105
  nessus_obj: nessus_obj,
105
106
  rest_call: 'editor/scan/templates'
106
107
  ).body
107
108
 
108
- JSON.parse(scan_templates_resp, symbolize_names: true)
109
+ scan_templates = JSON.parse(scan_templates_resp, symbolize_names: true)
110
+
111
+ if title
112
+ selected_scan_template = scan_templates[:templates].select do |sc|
113
+ sc[:title] == title
114
+ end
115
+ scan_templates = selected_scan_template.first if selected_scan_template.any?
116
+ scan_templates ||= {}
117
+ end
118
+
119
+ scan_templates
109
120
  rescue StandardError, SystemExit, Interrupt => e
110
121
  raise e
111
122
  end
@@ -117,31 +128,111 @@ module PWN
117
128
 
118
129
  public_class_method def self.get_policies(opts = {})
119
130
  nessus_obj = opts[:nessus_obj]
131
+ name = opts[:name]
120
132
 
121
133
  scan_templates_resp = nessus_cloud_rest_call(
122
134
  nessus_obj: nessus_obj,
123
135
  rest_call: 'policies'
124
136
  ).body
125
137
 
126
- JSON.parse(scan_templates_resp, symbolize_names: true)
138
+ policies = JSON.parse(scan_templates_resp, symbolize_names: true)
139
+
140
+ if name
141
+ selected_policy = policies[:policies].select do |p|
142
+ p[:name] == name
143
+ end
144
+ policies = selected_policy.first if selected_policy.any?
145
+ policies ||= {}
146
+ end
147
+
148
+ policies
127
149
  rescue StandardError, SystemExit, Interrupt => e
128
150
  raise e
129
151
  end
130
152
 
131
153
  # Supported Method Parameters::
132
- # PWN::Plugins::NessusCloud.get_policies(
154
+ # PWN::Plugins::NessusCloud.get_folders(
133
155
  # nessus_obj: 'required - nessus_obj returned from #login method'
134
156
  # )
135
157
 
136
158
  public_class_method def self.get_folders(opts = {})
137
159
  nessus_obj = opts[:nessus_obj]
160
+ name = opts[:name]
138
161
 
139
162
  scan_templates_resp = nessus_cloud_rest_call(
140
163
  nessus_obj: nessus_obj,
141
- rest_call: 'policies'
164
+ rest_call: 'folders'
165
+ ).body
166
+
167
+ folders = JSON.parse(scan_templates_resp, symbolize_names: true)
168
+
169
+ if name
170
+ selected_folder = folders[:folders].select do |f|
171
+ f[:name] == name
172
+ end
173
+ folders = selected_folder.first if selected_folder.any?
174
+ folders ||= {}
175
+ end
176
+
177
+ folders
178
+ rescue StandardError, SystemExit, Interrupt => e
179
+ raise e
180
+ end
181
+
182
+ # Supported Method Parameters::
183
+ # PWN::Plugins::NessusCloud.get_scanners(
184
+ # nessus_obj: 'required - nessus_obj returned from #login method'
185
+ # )
186
+
187
+ public_class_method def self.get_scanners(opts = {})
188
+ nessus_obj = opts[:nessus_obj]
189
+ name = opts[:name]
190
+
191
+ scan_templates_resp = nessus_cloud_rest_call(
192
+ nessus_obj: nessus_obj,
193
+ rest_call: 'scanners'
194
+ ).body
195
+
196
+ scanners = JSON.parse(scan_templates_resp, symbolize_names: true)
197
+
198
+ if name
199
+ selected_scanner = scanners[:scanners].select do |s|
200
+ s[:name] == name
201
+ end
202
+ scanners = selected_scanner.first if selected_scanner.any?
203
+ scanners ||= {}
204
+ end
205
+
206
+ scanners
207
+ rescue StandardError, SystemExit, Interrupt => e
208
+ raise e
209
+ end
210
+
211
+ # Supported Method Parameters::
212
+ # PWN::Plugins::NessusCloud.get_target_networks(
213
+ # nessus_obj: 'required - nessus_obj returned from #login method'
214
+ # )
215
+
216
+ public_class_method def self.get_target_networks(opts = {})
217
+ nessus_obj = opts[:nessus_obj]
218
+ name = opts[:name]
219
+
220
+ scan_templates_resp = nessus_cloud_rest_call(
221
+ nessus_obj: nessus_obj,
222
+ rest_call: 'networks'
142
223
  ).body
143
224
 
144
- JSON.parse(scan_templates_resp, symbolize_names: true)
225
+ target_networks = JSON.parse(scan_templates_resp, symbolize_names: true)
226
+
227
+ if name
228
+ selected_network = target_networks[:networks].select do |tn|
229
+ tn[:name] == name
230
+ end
231
+ target_networks = selected_network.first if selected_network.any?
232
+ target_networks ||= {}
233
+ end
234
+
235
+ target_networks
145
236
  rescue StandardError, SystemExit, Interrupt => e
146
237
  raise e
147
238
  end
@@ -153,13 +244,24 @@ module PWN
153
244
 
154
245
  public_class_method def self.get_scans(opts = {})
155
246
  nessus_obj = opts[:nessus_obj]
247
+ name = opts[:name]
156
248
 
157
249
  scans_resp = nessus_cloud_rest_call(
158
250
  nessus_obj: nessus_obj,
159
251
  rest_call: 'scans'
160
252
  ).body
161
253
 
162
- JSON.parse(scans_resp, symbolize_names: true)
254
+ scans = JSON.parse(scans_resp, symbolize_names: true)
255
+
256
+ if name
257
+ selected_scan = scans[:scans].select do |s|
258
+ s[:name] == name
259
+ end
260
+ scans = selected_scan.first if selected_scan.any?
261
+ scans ||= {}
262
+ end
263
+
264
+ scans
163
265
  rescue StandardError, SystemExit, Interrupt => e
164
266
  raise e
165
267
  end
@@ -349,6 +451,14 @@ module PWN
349
451
  nessus_obj: 'required - nessus_obj returned from #login method'
350
452
  )
351
453
 
454
+ #{self}.get_scanners(
455
+ nessus_obj: 'required - nessus_obj returned from #login method'
456
+ )
457
+
458
+ #{self}.get_target_networks(
459
+ nessus_obj: 'required - nessus_obj returned from #login method'
460
+ )
461
+
352
462
  #{self}.get_scans(
353
463
  nessus_obj: 'required - nessus_obj returned from #login method'
354
464
  )
data/lib/pwn/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PWN
4
- VERSION = '0.4.428'
4
+ VERSION = '0.4.431'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.428
4
+ version: 0.4.431
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.