pwn 0.4.428 → 0.4.431

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.