pwn 0.4.427 → 0.4.430

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: c5f15a780e9624b97ab5c97f6893867c10e063404f58cb5ffbfd7b9a60a0a203
4
- data.tar.gz: 1288494c82fd238638268e1449fa8871d95b3f110d2fd9c5b33c4383fcc7003b
3
+ metadata.gz: c31b2ac11c6feecd92b4cd5fb270270c7cf91794dec67257bd18b1ba5ce330f4
4
+ data.tar.gz: b774b6329c49e18d65720fad8e4ae0976cbce0507489e039b2b5745baf85055e
5
5
  SHA512:
6
- metadata.gz: 05aacaf69830d42724ed1d48c510f5c5c4245a9ce8631f85c93597cf577e0be34cc8645462ab7bd36c81c7872633eca5b6c0ade1fa0d234e38fef29ddfa4bc9c
7
- data.tar.gz: 44a6c433320b1e721408b711f09a6a39eb3eba26924547cd74ebaa2dcebfafd74d15fb18a41d557283fe9f45f19665264a10a9754565e8f4fe821b881dd9a7c5
6
+ metadata.gz: '08fc344ede5c67f38ef52aba9ed5d6fa9a9fcc7d1ec6b0f0f8486520a118ca94bf8de5219a93d00286813d1174270793805b3866ea99841571c0ddceedaff00f'
7
+ data.tar.gz: 9061c5bd187b2c0c99229cd35dbe31aec1d1935c6465a07b5bfaa55691888d280f68eade1217e5a518d2ecfda5b2509a81dfe35b26d60f6dca8cffb7b302c6b6
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.427]:001 >>> PWN.help
40
+ pwn[v0.4.430]: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.427]:001 >>> PWN.help
55
+ pwn[v0.4.430]: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('-nTARGET', '--target-network=TARGET', '<Optional if --scanner other than AUTO-ROUTED, Otherwise Required - Network to Scan (Defaults to "default-network")>') do |n|
39
+ opts[:target_network] = n
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,33 +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 = opts[:target_network]
84
+ target_network ||= '00000000-0000-0000-0000-000000000000'
85
+ target_network = '00000000-0000-0000-0000-000000000000' if target_network == 'default-network'
86
+
87
+ launch = opts[:launch]
88
+ launch ||= 'ON_DEMAND'
89
+
90
+ scan_time_window = opts[:scan_time_window]
56
91
 
57
92
  nessus_obj = PWN::Plugins::NessusCloud.login(
58
93
  access_key: access_key,
59
94
  secret_key: secret_key
60
95
  )
61
96
 
62
- policy_list = PWN::Plugins::NessusCloud.get_policies(
63
- nessus_obj: nessus_obj
97
+ scan_template = PWN::Plugins::NessusCloud.get_canned_scan_templates(
98
+ nessus_obj: nessus_obj,
99
+ title: scan_template
64
100
  )
65
- puts policy_list.inspect
101
+ scan_template_id = scan_template[:uuid]
102
+ puts scan_template_id
66
103
 
67
- scan_template_list = PWN::Plugins::NessusCloud.get_canned_scan_templates(
68
- nessus_obj: nessus_obj
104
+ policy = PWN::Plugins::NessusCloud.get_policies(
105
+ nessus_obj: nessus_obj,
106
+ name: policy_name
69
107
  )
108
+ policy_id = policy[:id]
109
+ puts policy_id
70
110
 
71
- selected_scan_template = scan_template_list[:templates].select do |scan_template|
72
- scan_template[:title] == scan_template
73
- end
111
+ folder = PWN::Plugins::NessusCloud.get_folders(
112
+ nessus_obj: nessus_obj,
113
+ name: folder_name
114
+ )
115
+ folder_id = folder[:id]
116
+ puts folder_id
74
117
 
75
- scan_template_id = selected_scan_template.first[:uuid]
118
+ scanner = PWN::Plugins::NessusCloud.get_scanners(
119
+ nessus_obj: nessus_obj,
120
+ name: scanner_name
121
+ )
122
+ scanner_id = scanner[:id]
123
+ puts scanner_id
76
124
 
77
-
125
+ target_network_list = PWN::Plugins::NessusCloud.get_target_networks(
126
+ nessus_obj: nessus_obj
127
+ )
128
+ puts target_network_list.inspect
78
129
  rescue Interrupt
79
130
  puts 'CTRL+C detected...goodbye.'
80
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,28 +128,97 @@ 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
+
219
+ scan_templates_resp = nessus_cloud_rest_call(
220
+ nessus_obj: nessus_obj,
221
+ rest_call: 'networks'
142
222
  ).body
143
223
 
144
224
  JSON.parse(scan_templates_resp, symbolize_names: true)
@@ -153,13 +233,24 @@ module PWN
153
233
 
154
234
  public_class_method def self.get_scans(opts = {})
155
235
  nessus_obj = opts[:nessus_obj]
236
+ name = opts[:name]
156
237
 
157
238
  scans_resp = nessus_cloud_rest_call(
158
239
  nessus_obj: nessus_obj,
159
240
  rest_call: 'scans'
160
241
  ).body
161
242
 
162
- JSON.parse(scans_resp, symbolize_names: true)
243
+ scans = JSON.parse(scans_resp, symbolize_names: true)
244
+
245
+ if name
246
+ selected_scan = scans[:scans].select do |s|
247
+ s[:name] == name
248
+ end
249
+ scans = selected_scan.first if selected_scan.any?
250
+ scans ||= {}
251
+ end
252
+
253
+ scans
163
254
  rescue StandardError, SystemExit, Interrupt => e
164
255
  raise e
165
256
  end
@@ -349,6 +440,14 @@ module PWN
349
440
  nessus_obj: 'required - nessus_obj returned from #login method'
350
441
  )
351
442
 
443
+ #{self}.get_scanners(
444
+ nessus_obj: 'required - nessus_obj returned from #login method'
445
+ )
446
+
447
+ #{self}.get_target_networks(
448
+ nessus_obj: 'required - nessus_obj returned from #login method'
449
+ )
450
+
352
451
  #{self}.get_scans(
353
452
  nessus_obj: 'required - nessus_obj returned from #login method'
354
453
  )
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.427'
4
+ VERSION = '0.4.430'
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.427
4
+ version: 0.4.430
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.