pwn 0.4.451 → 0.4.452

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: 02f8e66dcae91cac37030a71ca31451c0f7c95b54f80fbdac9ed00e61fd459eb
4
- data.tar.gz: bcea061287c2abaf5a9703a8d6c66daad7cd96e01333e1e54e4cf3425e5918c5
3
+ metadata.gz: 48f1885a09a8dab8a4d1404d9f142385e1e401c46248cec44d9444a3fd90b9b1
4
+ data.tar.gz: 499d0c4a1a613da0cab30df3eeb3402a27d6913aeb18588ed2680ff8af96118f
5
5
  SHA512:
6
- metadata.gz: 4b6c769c439cd1f89a7311759c54fa663ec47e6e67b578c5a376e6ec89c09f723fd5b655596da4bb2ff78dc7af965ff07b874cd2c269a5a312568a938b557e4e
7
- data.tar.gz: f7d916073ff34c9fe2ef2f25a326aa386ea84735dea35cf2682a97e68cd9375766508fa6f0f967b3968f2655f51106b82fd9a16c48a7e095dfe50abe4d962256
6
+ metadata.gz: b4d1bf2a6ada8c50b996406ef176425af6753c4f91b6a26fb2da77fdc5abacddb84ceee4dbdfefb385053bc6bba22d0a0eac5d7e5d4cc913ff10bf5e2aa2d884
7
+ data.tar.gz: b0a4de3193f5ce0df525745650a0f0ea76df6752e3f8a693606efb09e8461bd7e572d043047e9adf88cb44b5962e0bea692c5117c31f090d1bd4358b79cdd6fc
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.451]:001 >>> PWN.help
40
+ pwn[v0.4.452]: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.451]:001 >>> PWN.help
55
+ pwn[v0.4.452]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
 
@@ -32,7 +32,7 @@ OptionParser.new do |options|
32
32
  end
33
33
 
34
34
  options.on('-tVALUE', '--scan-template=VALUE', '<Optional - Canned Scan Template to Use for Scan Creation (Defaults to "Basic Network Scan">') do |t|
35
- opts[:scan_template] = t
35
+ opts[:scan_template_name] = t
36
36
  end
37
37
 
38
38
  options.on('-pPOLICY', '--policy-name=POLICY', '<Optional - Policy to Use to Create the Scan>') do |p|
@@ -116,8 +116,8 @@ begin
116
116
  # Optional Arguments
117
117
  scan_desc = opts[:scan_desc]
118
118
 
119
- scan_template = opts[:scan_template]
120
- scan_template ||= 'Basic Network Scan'
119
+ scan_template_name = opts[:scan_template_name]
120
+ scan_template_name ||= 'Basic Network Scan'
121
121
 
122
122
  policy_name = opts[:policy_name]
123
123
  policy_name ||= ''
@@ -204,17 +204,18 @@ begin
204
204
  secret_key: secret_key
205
205
  )
206
206
 
207
- # Requirements to create a scan:
207
+ # Requirements to update / create a scan:
208
208
  # Part 1: Populate uuid
209
209
  # Part 2: Populate settings object from options passed to driver
210
210
  # Part 3: Populate credentials object from YAML config (optional)
211
211
  # Part 4: Populate plugins object from YAML config (optional)
212
+ # Part 5: Update Scan if it exists, or create it.
212
213
 
213
214
  # Part 1: Populate uuid
214
215
  # TODO: add --list-canned-scan-templates option
215
216
  scan_template = PWN::Plugins::NessusCloud.get_canned_scan_templates(
216
217
  nessus_obj: nessus_obj,
217
- name: scan_template
218
+ name: scan_template_name
218
219
  )
219
220
  scan_template_uuid = scan_template[:uuid]
220
221
  puts scan_template_uuid
@@ -307,15 +308,34 @@ begin
307
308
  # Part 4: Populate plugins object from YAML config (optional)
308
309
  plugins = yaml[:plugins] if yaml[:plugins]
309
310
 
310
- create_scan_resp = PWN::Plugins::NessusCloud.create_scan(
311
+ # Part 5: Update Scan if it exists, or create it.
312
+ scan = PWN::Plugins::NessusCloud.get_scans(
311
313
  nessus_obj: nessus_obj,
312
- scan_template_uuid: scan_template_uuid,
313
- settings: settings,
314
- credentials: credentials,
315
- plugins: plugins
314
+ name: scan_name
316
315
  )
317
-
318
- puts create_scan_resp.inspect
316
+ if scan.any?
317
+ scan_uuid = scan[:uuid]
318
+ update_scan_resp = PWN::Plugins::NessusCloud.update_scan(
319
+ nessus_obj: nessus_obj,
320
+ scan_uuid: scan_uuid,
321
+ scan_template_uuid: scan_template_uuid,
322
+ settings: settings,
323
+ credentials: credentials,
324
+ plugins: plugins
325
+ )
326
+
327
+ puts update_scan_resp.inspect
328
+ else
329
+ create_scan_resp = PWN::Plugins::NessusCloud.create_scan(
330
+ nessus_obj: nessus_obj,
331
+ scan_template_uuid: scan_template_uuid,
332
+ settings: settings,
333
+ credentials: credentials,
334
+ plugins: plugins
335
+ )
336
+
337
+ puts create_scan_resp.inspect
338
+ end
319
339
  rescue Interrupt
320
340
  puts 'CTRL+C detected...goodbye.'
321
341
  rescue StandardError => e
@@ -58,11 +58,11 @@ begin
58
58
  nessus_obj: nessus_obj,
59
59
  name: scan_name
60
60
  )
61
- scan_id = scan[:id]
61
+ scan_uuid = scan[:uuid]
62
62
 
63
63
  PWN::Plugins::NessusCloud.launch_scan(
64
64
  nessus_obj: nessus_obj,
65
- scan_id: scan_id
65
+ scan_uuid: scan_uuid
66
66
  )
67
67
 
68
68
  scan_status = 'initializing'
@@ -73,7 +73,7 @@ begin
73
73
 
74
74
  scan_status_resp = PWN::Plugins::NessusCloud.get_scan_status(
75
75
  nessus_obj: nessus_obj,
76
- scan_id: scan_id
76
+ scan_uuid: scan_uuid
77
77
  )
78
78
 
79
79
  scan_status = scan_status_resp[:status]
@@ -87,7 +87,7 @@ begin
87
87
  print "Exporting results to #{path_to_export}..."
88
88
  PWN::Plugins::NessusCloud.export_scan_results(
89
89
  nessus_obj: nessus_obj,
90
- scan_id: scan_id,
90
+ scan_uuid: scan_uuid,
91
91
  path_to_export: path_to_export,
92
92
  format: format
93
93
  )
@@ -442,20 +442,57 @@ module PWN
442
442
  raise e
443
443
  end
444
444
 
445
+ # Supported Method Parameters::
446
+ # PWN::Plugins::NessusCloud.update_scan(
447
+ # nessus_obj: 'required - nessus_obj returned from #login method',
448
+ # scan_uuid: 'required - the scan UUID to update. Run #get_scans for a list of UUIDs',
449
+ # scan_template_uuid: 'required - the UUID for the Tenable-provided scan template to use. Run #get_canned_scan_templates for a list of UUIDs',
450
+ # settings: 'required - settings object as defined by https://developer.tenable.com/reference/scans-create',
451
+ # credentials: 'required - credentials object as defined by https://developer.tenable.com/reference/scans-create',
452
+ # plugins: 'optional - plugins object as defined by https://developer.tenable.com/reference/scans-create (Defaults to {})'
453
+ # )
454
+
455
+ public_class_method def self.update_scan(opts = {})
456
+ nessus_obj = opts[:nessus_obj]
457
+ scan_uuid = opts[:scan_uuid]
458
+ scan_template_uuid = opts[:scan_template_uuid]
459
+ settings = opts[:settings]
460
+ credentials = opts[:credentials]
461
+ plugins = opts[:plugins]
462
+
463
+ http_body = {
464
+ uuid: scan_template_uuid,
465
+ settings: settings,
466
+ credentials: credentials,
467
+ plugins: plugins
468
+ }.to_json
469
+
470
+ update_scan_resp = nessus_cloud_rest_call(
471
+ http_method: :put,
472
+ nessus_obj: nessus_obj,
473
+ rest_call: "scans/#{scan_uuid}",
474
+ http_body: http_body
475
+ ).body
476
+
477
+ JSON.parse(update_scan_resp, symbolize_names: true)
478
+ rescue StandardError, SystemExit, Interrupt => e
479
+ raise e
480
+ end
481
+
445
482
  # Supported Method Parameters::
446
483
  # PWN::Plugins::NessusCloud.launch_scan(
447
484
  # nessus_obj: 'required - nessus_obj returned from #login method',
448
- # scan_id: 'required - scan id to launch'
485
+ # scan_uuid: 'required - scan uuid to launch'
449
486
  # )
450
487
 
451
488
  public_class_method def self.launch_scan(opts = {})
452
489
  nessus_obj = opts[:nessus_obj]
453
- scan_id = opts[:scan_id]
490
+ scan_uuid = opts[:scan_uuid]
454
491
 
455
492
  launch_scan_resp = nessus_cloud_rest_call(
456
493
  http_method: :post,
457
494
  nessus_obj: nessus_obj,
458
- rest_call: "scans/#{scan_id}/launch"
495
+ rest_call: "scans/#{scan_uuid}/launch"
459
496
  ).body
460
497
 
461
498
  JSON.parse(launch_scan_resp, symbolize_names: true)
@@ -466,16 +503,16 @@ module PWN
466
503
  # Supported Method Parameters::
467
504
  # PWN::Plugins::NessusCloud.get_scan_status(
468
505
  # nessus_obj: 'required - nessus_obj returned from #login method',
469
- # scan_id: 'required - scan id to retrieve status'
506
+ # scan_uuid: 'required - scan uuid to retrieve status'
470
507
  # )
471
508
 
472
509
  public_class_method def self.get_scan_status(opts = {})
473
510
  nessus_obj = opts[:nessus_obj]
474
- scan_id = opts[:scan_id]
511
+ scan_uuid = opts[:scan_uuid]
475
512
 
476
513
  scan_status_resp = nessus_cloud_rest_call(
477
514
  nessus_obj: nessus_obj,
478
- rest_call: "scans/#{scan_id}/latest-status"
515
+ rest_call: "scans/#{scan_uuid}/latest-status"
479
516
  ).body
480
517
 
481
518
  JSON.parse(scan_status_resp, symbolize_names: true)
@@ -518,16 +555,16 @@ module PWN
518
555
  # Supported Method Parameters::
519
556
  # PWN::Plugins::NessusCloud.get_scan_history(
520
557
  # nessus_obj: 'required - nessus_obj returned from #login method'
521
- # scan_id: 'required - scan id to launch'
558
+ # scan_uuid: 'required - scan uuid to launch'
522
559
  # )
523
560
 
524
561
  public_class_method def self.get_scan_history(opts = {})
525
562
  nessus_obj = opts[:nessus_obj]
526
- scan_id = opts[:scan_id]
563
+ scan_uuid = opts[:scan_uuid]
527
564
 
528
565
  scan_hist_resp = nessus_cloud_rest_call(
529
566
  nessus_obj: nessus_obj,
530
- rest_call: "scans/#{scan_id}/history"
567
+ rest_call: "scans/#{scan_uuid}/history"
531
568
  ).body
532
569
 
533
570
  JSON.parse(scan_hist_resp, symbolize_names: true)
@@ -538,7 +575,7 @@ module PWN
538
575
  # Supported Method Parameters::
539
576
  # PWN::Plugins::NessusCloud.export_scan_results(
540
577
  # nessus_obj: 'required - nessus_obj returned from #login method',
541
- # scan_id: 'required - scan id to export',
578
+ # scan_uuid: 'required - scan uuid to export',
542
579
  # path_to_export: 'required - filename to export results',
543
580
  # history_id: 'optional - defaults to last scan',
544
581
  # format: 'optional - :csv|:db|:html|:nessus|:pdf (defaults to :csv')
@@ -546,14 +583,14 @@ module PWN
546
583
 
547
584
  public_class_method def self.export_scan_results(opts = {})
548
585
  nessus_obj = opts[:nessus_obj]
549
- scan_id = opts[:scan_id]
586
+ scan_uuid = opts[:scan_uuid]
550
587
  path_to_export = opts[:path_to_export]
551
588
  if opts[:history_id]
552
589
  history_id = opts[:history_id]
553
590
  else
554
591
  scan_history_resp = get_scan_history(
555
592
  nessus_obj: nessus_obj,
556
- scan_id: scan_id
593
+ scan_uuid: scan_uuid
557
594
  )
558
595
 
559
596
  if scan_history_resp[:history].empty?
@@ -568,7 +605,7 @@ module PWN
568
605
  format = opts[:format].to_s.to_sym if opts[:format]
569
606
 
570
607
  http_body = {
571
- scan_id: scan_id,
608
+ scan_uuid: scan_uuid,
572
609
  history_id: history_id,
573
610
  format: format
574
611
  }.to_json
@@ -576,7 +613,7 @@ module PWN
576
613
  export_scan_resp = nessus_cloud_rest_call(
577
614
  http_method: :post,
578
615
  nessus_obj: nessus_obj,
579
- rest_call: "scans/#{scan_id}/export",
616
+ rest_call: "scans/#{scan_uuid}/export",
580
617
  http_body: http_body
581
618
  ).body
582
619
 
@@ -587,7 +624,7 @@ module PWN
587
624
 
588
625
  download_export_resp = nessus_cloud_rest_call(
589
626
  nessus_obj: nessus_obj,
590
- rest_call: "scans/#{scan_id}/export/#{file_id}/download"
627
+ rest_call: "scans/#{scan_uuid}/export/#{file_id}/download"
591
628
  ).body
592
629
 
593
630
  File.open(path_to_export, 'wb') do |f|
@@ -660,14 +697,31 @@ module PWN
660
697
  nessus_obj: 'required - nessus_obj returned from #login method'
661
698
  )
662
699
 
700
+ #{self}.create_scan(
701
+ nessus_obj: 'required - nessus_obj returned from #login method',
702
+ scan_template_uuid: 'required - the UUID for the Tenable-provided scan template to use. Run #get_canned_scan_templates for a list of UUIDs',
703
+ settings: 'required - settings object as defined by https://developer.tenable.com/reference/scans-create',
704
+ credentials: 'required - credentials object as defined by https://developer.tenable.com/reference/scans-create',
705
+ plugins: 'optional - plugins object as defined by https://developer.tenable.com/reference/scans-create (Defaults to {})'
706
+ )
707
+
708
+ #{self}.update_scan(
709
+ nessus_obj: 'required - nessus_obj returned from #login method',
710
+ scan_uuid: 'required - the scan UUID to update. Run #get_scans for a list of UUIDs',
711
+ scan_template_uuid: 'required - the UUID for the Tenable-provided scan template to use. Run #get_canned_scan_templates for a list of UUIDs',
712
+ settings: 'required - settings object as defined by https://developer.tenable.com/reference/scans-create',
713
+ credentials: 'required - credentials object as defined by https://developer.tenable.com/reference/scans-create',
714
+ plugins: 'optional - plugins object as defined by https://developer.tenable.com/reference/scans-create (Defaults to {})'
715
+ )
716
+
663
717
  #{self}.launch_scan(
664
718
  nessus_obj: 'required - nessus_obj returned from #login method',
665
- scan_id: 'required - scan id to launch'
719
+ scan_uuid: 'required - scan uuid to launch'
666
720
  )
667
721
 
668
722
  #{self}.get_scan_status(
669
723
  nessus_obj: 'required - nessus_obj returned from #login method',
670
- scan_id: 'required - scan id to retrieve status'
724
+ scan_uuid: 'required - scan uuid to retrieve status'
671
725
  )
672
726
 
673
727
  #{self}.create_tag(
@@ -679,12 +733,12 @@ module PWN
679
733
 
680
734
  #{self}.get_scan_history(
681
735
  nessus_obj: 'required - nessus_obj returned from #login method'
682
- scan_id: 'required - scan id to launch'
736
+ scan_uuid: 'required - scan uuid to launch'
683
737
  )
684
738
 
685
739
  #{self}.export_scan_results(
686
740
  nessus_obj: 'required - nessus_obj returned from #login method',
687
- scan_id: 'required - scan id to export',
741
+ scan_uuid: 'required - scan uuid to export',
688
742
  path_to_export: 'required - filename to export results',
689
743
  history_id: 'optional - defaults to last scan',
690
744
  format: 'optional - :csv|:db|:html|:nessus|:pdf (defaults to :csv')
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.451'
4
+ VERSION = '0.4.452'
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.451
4
+ version: 0.4.452
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.
@@ -1007,7 +1007,7 @@ executables:
1007
1007
  - pwn_jenkins_useradd
1008
1008
  - pwn_mail_agent
1009
1009
  - pwn_msf_postgres_login
1010
- - pwn_nessus_cloud_create_scan
1010
+ - pwn_nessus_cloud_scan_crud
1011
1011
  - pwn_nessus_cloud_vulnscan
1012
1012
  - pwn_nexpose
1013
1013
  - pwn_openvas_vulnscan
@@ -1066,7 +1066,7 @@ files:
1066
1066
  - bin/pwn_jenkins_useradd
1067
1067
  - bin/pwn_mail_agent
1068
1068
  - bin/pwn_msf_postgres_login
1069
- - bin/pwn_nessus_cloud_create_scan
1069
+ - bin/pwn_nessus_cloud_scan_crud
1070
1070
  - bin/pwn_nessus_cloud_vulnscan
1071
1071
  - bin/pwn_nexpose
1072
1072
  - bin/pwn_openvas_vulnscan