pwn 0.4.439 → 0.4.442
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 +4 -4
- data/README.md +2 -2
- data/bin/pwn_nessus_cloud_create_scan +26 -1
- data/lib/pwn/plugins/nessus_cloud.rb +81 -39
- data/lib/pwn/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e159e4f445d461ad4579253bdd383a09436babcae06642a3ba78f37ee6e96594
|
4
|
+
data.tar.gz: e6ddf405829f06f74dd3482173b239eb8e643931178f9f66c5722a4c977cdae7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23ce00314518920429bcb560ed7d4b04206542f6bbd32d0f466b1d81b4b6c82fcecef8bfb6a20db5c3bb22547286657c6e3fe77d45062482c3ecb25d0fb91419
|
7
|
+
data.tar.gz: c3e25ad52b328d5f160ed107c998d4b69f1c9d352fa8e995ad08e4d38c6549d9a463989bdb2b0b05c5dbad64b83306645dad1ee1015e877cad278eac3385b840
|
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.
|
40
|
+
pwn[v0.4.442]:001 >>> PWN.help
|
41
41
|
```
|
42
42
|
|
43
43
|
[](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.
|
55
|
+
pwn[v0.4.442]:001 >>> PWN.help
|
56
56
|
```
|
57
57
|
|
58
58
|
|
@@ -71,6 +71,10 @@ OptionParser.new do |options|
|
|
71
71
|
opts[:tag_targets] = x
|
72
72
|
end
|
73
73
|
|
74
|
+
options.on('-yCATEGORY', '--tag-category-name=CATEGORY', '<Optional - Tag Category Name to Associate with --tag-targets flag>') do |y|
|
75
|
+
opts[:tag_category_name] = y
|
76
|
+
end
|
77
|
+
|
74
78
|
options.on('-zTIMEZONE', '--timezone=TIMEZONE', '<Optional - Timezone of the scheduled start time for the scan (Defaults to "UTC")>') do |t|
|
75
79
|
opts[:timezone] = t
|
76
80
|
end
|
@@ -152,6 +156,9 @@ begin
|
|
152
156
|
tag_targets_arr = []
|
153
157
|
tag_targets_arr = tag_targets.split(',') if tag_targets
|
154
158
|
|
159
|
+
tag_category_name = opts[:tag_category_name]
|
160
|
+
raise 'ERROR: --tag-category-name Required as --tag-targets is Populated' if tag_targets && !tag_category_name
|
161
|
+
|
155
162
|
agent_group_name = opts[:agent_group_name]
|
156
163
|
agent_group_id_arr = []
|
157
164
|
|
@@ -256,7 +263,25 @@ begin
|
|
256
263
|
|
257
264
|
settings[:file_targets] = file_targets if file_targets
|
258
265
|
|
259
|
-
|
266
|
+
if tag_targets_arr.any?
|
267
|
+
tag_targets_arr.each do |tag_name|
|
268
|
+
# TODO: Lookup tag and create if does not exist
|
269
|
+
tag = PWN::Plugins::NessusCloud.get_tags(
|
270
|
+
nessus_obj: nessus_obj,
|
271
|
+
name: tag_name
|
272
|
+
)
|
273
|
+
|
274
|
+
next if tag.any?
|
275
|
+
|
276
|
+
PWN::Plugins::NessusCloud.create_tag(
|
277
|
+
nessus_obj: nessus_obj,
|
278
|
+
category: tag_category_name,
|
279
|
+
value: tag_name
|
280
|
+
)
|
281
|
+
end
|
282
|
+
|
283
|
+
settings[:tag_targets] = tag_targets_arr
|
284
|
+
end
|
260
285
|
|
261
286
|
settings[:agent_group_id] = agent_group_id_arr if agent_group_id_arr.any?
|
262
287
|
|
@@ -275,7 +275,7 @@ module PWN
|
|
275
275
|
# Supported Method Parameters::
|
276
276
|
# PWN::Plugins::NessusCloud.get_target_groups(
|
277
277
|
# nessus_obj: 'required - nessus_obj returned from #login method',
|
278
|
-
# name: 'optional - name of
|
278
|
+
# name: 'optional - name of target group'
|
279
279
|
# )
|
280
280
|
# )
|
281
281
|
|
@@ -288,17 +288,48 @@ module PWN
|
|
288
288
|
rest_call: 'target-groups'
|
289
289
|
).body
|
290
290
|
|
291
|
-
|
291
|
+
target_groups = JSON.parse(target_groups_resp, symbolize_names: true)
|
292
292
|
|
293
293
|
if name
|
294
|
-
|
295
|
-
|
294
|
+
selected_target_group = target_groups[:target_groups].select do |tg|
|
295
|
+
tg[:name] == name
|
296
296
|
end
|
297
|
-
|
298
|
-
|
297
|
+
target_groups = selected_target_group.first if selected_target_group.any?
|
298
|
+
target_groups ||= {}
|
299
299
|
end
|
300
300
|
|
301
|
-
|
301
|
+
target_groups
|
302
|
+
rescue StandardError, SystemExit, Interrupt => e
|
303
|
+
raise e
|
304
|
+
end
|
305
|
+
|
306
|
+
# Supported Method Parameters::
|
307
|
+
# PWN::Plugins::NessusCloud.get_tags(
|
308
|
+
# nessus_obj: 'required - nessus_obj returned from #login method',
|
309
|
+
# name: 'optional - name of tag'
|
310
|
+
# )
|
311
|
+
# )
|
312
|
+
|
313
|
+
public_class_method def self.get_tags(opts = {})
|
314
|
+
nessus_obj = opts[:nessus_obj]
|
315
|
+
name = opts[:name]
|
316
|
+
|
317
|
+
tags_resp = nessus_cloud_rest_call(
|
318
|
+
nessus_obj: nessus_obj,
|
319
|
+
rest_call: 'target-groups'
|
320
|
+
).body
|
321
|
+
|
322
|
+
tags = JSON.parse(target_groups_resp, symbolize_names: true)
|
323
|
+
|
324
|
+
if name
|
325
|
+
selected_tag = tags[:tags].select do |tag|
|
326
|
+
tag[:name] == name
|
327
|
+
end
|
328
|
+
tags = selected_tag.first if selected_tag.any?
|
329
|
+
tags ||= {}
|
330
|
+
end
|
331
|
+
|
332
|
+
tags
|
302
333
|
rescue StandardError, SystemExit, Interrupt => e
|
303
334
|
raise e
|
304
335
|
end
|
@@ -347,6 +378,35 @@ module PWN
|
|
347
378
|
raise e
|
348
379
|
end
|
349
380
|
|
381
|
+
# Supported Method Parameters::
|
382
|
+
# PWN::Plugins::NessusCloud.get_scans(
|
383
|
+
# nessus_obj: 'required - nessus_obj returned from #login method'
|
384
|
+
# )
|
385
|
+
|
386
|
+
public_class_method def self.get_scans(opts = {})
|
387
|
+
nessus_obj = opts[:nessus_obj]
|
388
|
+
name = opts[:name]
|
389
|
+
|
390
|
+
scans_resp = nessus_cloud_rest_call(
|
391
|
+
nessus_obj: nessus_obj,
|
392
|
+
rest_call: 'scans'
|
393
|
+
).body
|
394
|
+
|
395
|
+
scans = JSON.parse(scans_resp, symbolize_names: true)
|
396
|
+
|
397
|
+
if name
|
398
|
+
selected_scan = scans[:scans].select do |s|
|
399
|
+
s[:name] == name
|
400
|
+
end
|
401
|
+
scans = selected_scan.first if selected_scan.any?
|
402
|
+
scans ||= {}
|
403
|
+
end
|
404
|
+
|
405
|
+
scans
|
406
|
+
rescue StandardError, SystemExit, Interrupt => e
|
407
|
+
raise e
|
408
|
+
end
|
409
|
+
|
350
410
|
# Supported Method Parameters::
|
351
411
|
# PWN::Plugins::NessusCloud.create_scan(
|
352
412
|
# nessus_obj: 'required - nessus_obj returned from #login method',
|
@@ -382,35 +442,6 @@ module PWN
|
|
382
442
|
raise e
|
383
443
|
end
|
384
444
|
|
385
|
-
# Supported Method Parameters::
|
386
|
-
# PWN::Plugins::NessusCloud.get_scans(
|
387
|
-
# nessus_obj: 'required - nessus_obj returned from #login method'
|
388
|
-
# )
|
389
|
-
|
390
|
-
public_class_method def self.get_scans(opts = {})
|
391
|
-
nessus_obj = opts[:nessus_obj]
|
392
|
-
name = opts[:name]
|
393
|
-
|
394
|
-
scans_resp = nessus_cloud_rest_call(
|
395
|
-
nessus_obj: nessus_obj,
|
396
|
-
rest_call: 'scans'
|
397
|
-
).body
|
398
|
-
|
399
|
-
scans = JSON.parse(scans_resp, symbolize_names: true)
|
400
|
-
|
401
|
-
if name
|
402
|
-
selected_scan = scans[:scans].select do |s|
|
403
|
-
s[:name] == name
|
404
|
-
end
|
405
|
-
scans = selected_scan.first if selected_scan.any?
|
406
|
-
scans ||= {}
|
407
|
-
end
|
408
|
-
|
409
|
-
scans
|
410
|
-
rescue StandardError, SystemExit, Interrupt => e
|
411
|
-
raise e
|
412
|
-
end
|
413
|
-
|
414
445
|
# Supported Method Parameters::
|
415
446
|
# PWN::Plugins::NessusCloud.launch_scan(
|
416
447
|
# nessus_obj: 'required - nessus_obj returned from #login method',
|
@@ -453,14 +484,14 @@ module PWN
|
|
453
484
|
end
|
454
485
|
|
455
486
|
# Supported Method Parameters::
|
456
|
-
# PWN::Plugins::NessusCloud.
|
487
|
+
# PWN::Plugins::NessusCloud.create_tag(
|
457
488
|
# nessus_obj: 'required - nessus_obj returned from #login method',
|
458
489
|
# category: 'required - category name to create or use',
|
459
490
|
# value: 'required - value name to create or use',
|
460
491
|
# desc: 'optional - _value_ description'
|
461
492
|
# )
|
462
493
|
|
463
|
-
public_class_method def self.
|
494
|
+
public_class_method def self.create_tag(opts = {})
|
464
495
|
nessus_obj = opts[:nessus_obj]
|
465
496
|
category = opts[:category]
|
466
497
|
value = opts[:value]
|
@@ -468,7 +499,8 @@ module PWN
|
|
468
499
|
|
469
500
|
http_body = {
|
470
501
|
category_name: category,
|
471
|
-
value: value
|
502
|
+
value: value,
|
503
|
+
description: desc
|
472
504
|
}.to_json
|
473
505
|
|
474
506
|
tag_resp = nessus_cloud_rest_call(
|
@@ -614,6 +646,16 @@ module PWN
|
|
614
646
|
name: 'optional - name of timezone'
|
615
647
|
)
|
616
648
|
|
649
|
+
#{self}.get_target_groups(
|
650
|
+
nessus_obj: 'required - nessus_obj returned from #login method',
|
651
|
+
name: 'optional - name of target group'
|
652
|
+
)
|
653
|
+
|
654
|
+
#{self}.get_tags(
|
655
|
+
nessus_obj: 'required - nessus_obj returned from #login method',
|
656
|
+
name: 'optional - name of tag'
|
657
|
+
)
|
658
|
+
|
617
659
|
#{self}.get_scans(
|
618
660
|
nessus_obj: 'required - nessus_obj returned from #login method'
|
619
661
|
)
|
data/lib/pwn/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pwn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.442
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 0day Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-05-
|
11
|
+
date: 2022-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|