pwn 0.5.79 → 0.5.80

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: ddea38642ae143a1497175f362a68dab5ea7c73fb6e5e11c290ba31c66b8737a
4
- data.tar.gz: 57ad2b8405af577767442e1fd0b62e2ae7984cb02bf4957498310006e1ab72d6
3
+ metadata.gz: 3923f535fc7ac63c41eaaaebaf15f02188e32a0778fcf27affde56ee0091e3f9
4
+ data.tar.gz: 8318c7472b97602a04eac191973dd16f3cf8d919d7b8dfc4ff209b1ada2a6d80
5
5
  SHA512:
6
- metadata.gz: 0ca4bbdeb63f5bdba25b389411bd61dffe8b6c225a79a13b249890244e85a4b889db75f3a34c95355bb6ebc0e23cbb5c9d44e625d4230c5b2d2e3e9fcff8bd21
7
- data.tar.gz: 2eddb633e58ba9bdf3513bca1de16d31fb48a94d5260b522b47f89e4a498bd886bcdea0e514d73f2cda1b790018e9768a123a67892271c2ebd6b565c009dc94b
6
+ metadata.gz: 38311d9cf2164aefe9deaa6b73b74c060e02663706df322dfdcb447351a61c5467fbf59f9f8691e88777c2022cd4d2eaeeedb23e0412ccf0730db70dfdfdc54f
7
+ data.tar.gz: 01df4c1b51c6872fbf24dd0d9f52208736bb6cda8cccf32062298c870b62359a24c1ed998c37b70d9ab4b40eb6eaefa298011317ebcdeea6386372ca77c59b7d
data/Gemfile CHANGED
@@ -34,11 +34,12 @@ gem 'gdb', '1.0.0'
34
34
  gem 'gem-wrappers', '1.4.0'
35
35
  gem 'gist', '6.0.0'
36
36
  gem 'gruff', '0.24.0'
37
+ # gem 'hidapi', '0.1.9'
37
38
  gem 'htmlentities', '4.3.4'
38
39
  gem 'ipaddress', '0.8.3'
39
40
  gem 'jenkins_api_client2', '1.9.0'
40
41
  gem 'js-beautify', '0.1.8'
41
- gem 'json', '2.7.1'
42
+ gem 'json', '2.7.2'
42
43
  gem 'jsonpath', '1.1.5'
43
44
  gem 'jwt', '2.8.1'
44
45
  gem 'libusb', '0.6.4'
@@ -75,7 +76,7 @@ gem 'rspec', '3.13.0'
75
76
  gem 'rtesseract', '3.1.3'
76
77
  gem 'rubocop', '1.62.1'
77
78
  gem 'rubocop-rake', '0.6.0'
78
- gem 'rubocop-rspec', '2.28.0'
79
+ gem 'rubocop-rspec', '2.29.1'
79
80
  gem 'ruby-audio', '1.6.1'
80
81
  gem 'ruby-nmap', '1.0.3'
81
82
  gem 'ruby-saml', '1.16.0'
data/README.md CHANGED
@@ -37,7 +37,7 @@ $ cd /opt/pwn
37
37
  $ ./install.sh
38
38
  $ ./install.sh ruby-gem
39
39
  $ pwn
40
- pwn[v0.5.79]:001 >>> PWN.help
40
+ pwn[v0.5.80]: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.3.0@pwn
52
52
  $ gem uninstall --all --executables pwn
53
53
  $ gem install --verbose pwn
54
54
  $ pwn
55
- pwn[v0.5.79]:001 >>> PWN.help
55
+ pwn[v0.5.80]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
  If you're using a multi-user install of RVM do:
@@ -62,7 +62,7 @@ $ rvm use ruby-3.3.0@pwn
62
62
  $ rvmsudo gem uninstall --all --executables pwn
63
63
  $ rvmsudo gem install --verbose pwn
64
64
  $ pwn
65
- pwn[v0.5.79]:001 >>> PWN.help
65
+ pwn[v0.5.80]:001 >>> PWN.help
66
66
  ```
67
67
 
68
68
  PWN periodically upgrades to the latest version of Ruby which is reflected in `/opt/pwn/.ruby-version`. The easiest way to upgrade to the latest version of Ruby from a previous PWN installation is to run the following script:
data/bin/pwn_gqrx_scanner CHANGED
@@ -11,7 +11,15 @@ OptionParser.new do |options|
11
11
  #{$PROGRAM_NAME} [opts]
12
12
  "
13
13
 
14
- options.on('-tFREQ', '--target-freq=FREQ', '<Required - Frequency to Conclude Scanning (e.g. 900000000 == 900 mHz>') do |e|
14
+ options.on('-aPROFILE', '--assume-profile=PROFILE', '<Required if "--target-freq" is Nil - Profile to assume for common radio protocols. Use "--list-profiles" to display supported protocols (Defaults to nil)') do |p|
15
+ opts[:profile] = p
16
+ end
17
+
18
+ options.on('-l', '--list-profiles', '<Optional - List supported profiles and exit>') do |l|
19
+ opts[:list_profiles] = l
20
+ end
21
+
22
+ options.on('-tFREQ', '--target-freq=FREQ', '<Required if "--assume-profile" is Nil - Frequency to Conclude Scanning (e.g. 900.000.000 == 900 mHz>') do |e|
15
23
  opts[:target_freq] = e
16
24
  end
17
25
 
@@ -35,7 +43,7 @@ OptionParser.new do |options|
35
43
  opts[:bandwidth] = b
36
44
  end
37
45
 
38
- options.on('-DMODE', '--demodulator-mode=MODE', '<Optional - Set Demodulator ModeOFF | RAW | AM | FM | WFM | WFM_ST | WFM_ST_OIRT | LSB |USB | CW | CWL | CWU (Defaults to WFM_ST)>') do |d|
46
+ options.on('-DMODE', '--demodulator-mode=MODE', '<Optional - Set Demodulator Mode OFF | RAW | AM | FM | WFM | WFM_ST | WFM_ST_OIRT | LSB | USB | CW | CWL | CWU (Defaults to WFM_ST)>') do |d|
39
47
  opts[:demodulator_mode] = d
40
48
  end
41
49
 
@@ -77,10 +85,19 @@ begin
77
85
  pwn_provider = 'ruby-gem'
78
86
  pwn_provider = ENV.fetch('PWN_PROVIDER') if ENV.keys.any? { |s| s == 'PWN_PROVIDER' }
79
87
 
88
+ list_profiles = opts[:list_profiles]
89
+ if list_profiles
90
+ pp PWN::Plugins::GQRX.list_profiles
91
+ exit 0
92
+ end
93
+
94
+ profile = opts[:profile]
95
+ opts = PWN::Plugins::GQRX.assume_profile(profile: profile) unless profile.nil?
96
+
80
97
  target_freq = opts[:target_freq]
81
98
  target_freq = target_freq.to_s.delete('.') unless target_freq.nil?
82
99
  target_freq = target_freq.to_i
83
- raise "ERROR: Invalid target frequency #{target_freq}" if target_freq.zero?
100
+ raise 'ERROR: --assume-profile || --target-freq is required.' if target_freq.zero? && profile.nil?
84
101
 
85
102
  host = opts[:host]
86
103
  port = opts[:port]
@@ -178,5 +195,5 @@ rescue StandardError => e
178
195
  rescue Interrupt, SystemExit
179
196
  puts "\nGoodbye."
180
197
  ensure
181
- gqrx_sock = PWN::Plugins::GQRX.disconnect(gqrx_sock: gqrx_sock)
198
+ gqrx_sock = PWN::Plugins::GQRX.disconnect(gqrx_sock: gqrx_sock) unless gqrx_sock.nil?
182
199
  end
@@ -23,7 +23,7 @@ module PWN
23
23
  # Supported Method Parameters::
24
24
  # gqrx_resp = PWN::Plugins::GQRX.gqrx_cmd(
25
25
  # gqrx_sock: 'required - GQRX socket object returned from #connect method',
26
- # cmd: 'required - GQRX command to execute'
26
+ # cmd: 'required - GQRX command to execute',
27
27
  # resp_ok: 'optional - Expected response from GQRX to indicate success'
28
28
  # )
29
29
 
@@ -328,6 +328,212 @@ module PWN
328
328
  end
329
329
  end
330
330
 
331
+ # Supported Method Parameters::
332
+ # profiles = PWN::Plugins::GQRX.list_profiles
333
+ public_class_method def self.list_profiles
334
+ {
335
+ ads_b: 'ADS-B, 978mhz to 1090mhz, AM, 4.6mhz bandwidth',
336
+ analogue_tv: 'Analogue TV, 55.25mhz to 801.25mhz, WFM, 6mhz bandwidth',
337
+ am_radio: 'AM Radio, 540khz to 1600khz, AM, 6khz bandwidth',
338
+ bluetooth: 'Bluetooth, 2.4ghz to 2.5ghz, AM, 1mhz bandwidth',
339
+ cdma: 'CDMA, 824mhz to 849mhz, AM, 1.25mhz bandwidth',
340
+ cw20: 'CW 20m, 14mhz to 14.35mhz, CW, 150hz bandwidth',
341
+ cw40: 'CW 40m, 7mhz to 7.3mhz, CW, 150hz bandwidth',
342
+ cw80: 'CW 80m, 3.5mhz to 3.8mhz, CW, 150hz bandwidth',
343
+ gps: 'GPS, 1.57542ghz to 1.57545ghz, WFM, 9.6mhz bandwidth',
344
+ gsm: 'GSM, 935mhz to 960mhz, AM, 200khz bandwidth',
345
+ fm_radio: 'FM Radio, 88mhz to 108mhz, WFM, 200khz bandwidth',
346
+ lora433: 'LoRa 433mhz, 433mhz, AM, 125khz bandwidth',
347
+ lora915: 'LoRa 915mhz, 915mhz, AM, 125khz bandwidth',
348
+ lowrfid: 'Low RFID, 125khz, AM, 200khz bandwidth',
349
+ nfcrfid: 'NFC RFID, 13.56mhz, AM, 1mhz bandwidth',
350
+ radio_fob: 'Radio FOB, 315mhz, AM',
351
+ rtty20: 'RTTY 20m, 14mhz to 14.35mhz, RTTY, 170hz bandwidth',
352
+ rtty40: 'RTTY 40m, 7mhz to 7.3mhz, RTTY, 170hz bandwidth',
353
+ rtty80: 'RTTY 80m, 3.5mhz to 3.8mhz, RTTY, 170hz bandwidth',
354
+ ssb10: 'SSB 10m, 28mhz to 29.7mhz, USB, 2.7khz bandwidth',
355
+ ssb12: 'SSB 12m, 24.89mhz to 24.99mhz, USB, 2.7khz bandwidth',
356
+ ssb15: 'SSB 15m, 21mhz to 21.45mhz, USB, 2.7khz bandwidth',
357
+ ssb17: 'SSB 17m, 18.068mhz to 18.168mhz, USB, 2.7khz bandwidth',
358
+ ssb20: 'SSB 20m, 14mhz to 14.35mhz, USB, 2.7khz bandwidth',
359
+ ssb40: 'SSB 40m, 7mhz to 7.3mhz, LSB, 2.7khz bandwidth',
360
+ ssb80: 'SSB 80m, 3.5mhz to 3.8mhz, LSB, 2.7khz bandwidth',
361
+ ssb160: 'SSB 160m, 1.8mhz to 2mhz, LSB, 2.7khz bandwidth',
362
+ tempest: 'Tempest, 400mhz to 430mhz, AM, 200khz bandwidth',
363
+ wifi24: 'WiFi 2.4ghz, 2.4ghz to 2.5ghz, AM, 20mhz bandwidth',
364
+ zigbee: 'Zigbee, 2.405ghz to 2.485ghz, AM, 2mhz bandwidth'
365
+ }
366
+ rescue StandardError => e
367
+ raise e
368
+ end
369
+
370
+ # Supported Method Parameters::
371
+ # opts = PWN::Plugins::GQRX.assume_profile(
372
+ # profile: 'required - valid GQRX profile name returned from #list_profiles method'
373
+ # )
374
+ public_class_method def self.assume_profile(opts = {})
375
+ profile = opts[:profile].to_s.to_sym
376
+
377
+ opts = {}
378
+ case profile
379
+ when :ads_b
380
+ opts[:start_freq] = '978.000.000'
381
+ opts[:target_freq] = '1.090.000.000'
382
+ opts[:demodulator_mode] = 'AM'
383
+ opts[:bandwidth] = '4.600.000'
384
+ when :analogue_tv
385
+ opts[:start_freq] = '55.250.000'
386
+ opts[:target_freq] = '801.250.000'
387
+ opts[:demodulator_mode] = 'WFM'
388
+ opts[:bandwidth] = '6.000'
389
+ when :am_radio
390
+ opts[:start_freq] = '540.000'
391
+ opts[:target_freq] = '1.600.000'
392
+ opts[:demodulator_mode] = 'AM'
393
+ opts[:bandwidth] = '6.000'
394
+ when :bluetooth
395
+ opts[:start_freq] = '2.400.000.000'
396
+ opts[:target_freq] = '2.500.000.000'
397
+ opts[:demodulator_mode] = 'AM'
398
+ opts[:bandwidth] = '1.000.000'
399
+ when :cdma
400
+ opts[:start_freq] = '824.000.000'
401
+ opts[:target_freq] = '849.000.000'
402
+ opts[:demodulator_mode] = 'AM'
403
+ opts[:bandwidth] = '1.250.000'
404
+ when :cw20
405
+ opts[:start_freq] = '14.000.000'
406
+ opts[:target_freq] = '14.350.000'
407
+ opts[:demodulator_mode] = 'CW'
408
+ opts[:bandwidth] = '150'
409
+ when :cw40
410
+ opts[:start_freq] = '7.000.000'
411
+ opts[:target_freq] = '7.300.000'
412
+ opts[:demodulator_mode] = 'CW'
413
+ opts[:bandwidth] = '150'
414
+ when :cw80
415
+ opts[:start_freq] = '3.500.000'
416
+ opts[:target_freq] = '3.800.000'
417
+ opts[:demodulator_mode] = 'CW'
418
+ opts[:bandwidth] = '150'
419
+ when :gps
420
+ opts[:start_freq] = '1.575.420.000'
421
+ opts[:target_freq] = '1.575.450.000'
422
+ opts[:demodulator_mode] = 'WFM'
423
+ opts[:bandwidth] = '9.600.000'
424
+ when :gsm
425
+ opts[:start_freq] = '935.000.000'
426
+ opts[:target_freq] = '960.000.000'
427
+ opts[:demodulator_mode] = 'AM'
428
+ opts[:bandwidth] = '200.000'
429
+ when :fm_radio
430
+ opts[:start_freq] = '88.000.000'
431
+ opts[:target_freq] = '108.000.000'
432
+ opts[:demodulator_mode] = 'WFM'
433
+ opts[:bandwidth] = '200.000'
434
+ when :lora433
435
+ opts[:start_freq] = '433.000.000'
436
+ opts[:target_freq] = '433.000.000'
437
+ opts[:demodulator_mode] = 'AM'
438
+ opts[:bandwidth] = '125.000'
439
+ when :lora915
440
+ opts[:start_freq] = '915.000.000'
441
+ opts[:target_freq] = '915.000.000'
442
+ opts[:demodulator_mode] = 'AM'
443
+ opts[:bandwidth] = '125.000'
444
+ when :lowrfid
445
+ opts[:start_freq] = '125.000'
446
+ opts[:target_freq] = '125.000'
447
+ opts[:demodulator_mode] = 'AM'
448
+ opts[:bandwidth] = '200.000'
449
+ when :nfcrfid
450
+ opts[:start_freq] = '13.560.000'
451
+ opts[:target_freq] = '13.560.000'
452
+ opts[:demodulator_mode] = 'AM'
453
+ opts[:bandwidth] = '1.000.000'
454
+ when :radio_fob
455
+ opts[:start_freq] = '315.000.000'
456
+ opts[:target_freq] = '315.000.000'
457
+ opts[:demodulator_mode] = 'AM'
458
+ when :rtty20
459
+ opts[:start_freq] = '14.000.000'
460
+ opts[:target_freq] = '14.350.000'
461
+ opts[:demodulator_mode] = 'RTTY'
462
+ opts[:bandwidth] = '170'
463
+ when :rtty40
464
+ opts[:start_freq] = '7.000.000'
465
+ opts[:target_freq] = '7.300.000'
466
+ opts[:demodulator_mode] = 'RTTY'
467
+ opts[:bandwidth] = '170'
468
+ when :rtty80
469
+ opts[:start_freq] = '3.500.000'
470
+ opts[:target_freq] = '3.800.000'
471
+ opts[:demodulator_mode] = 'RTTY'
472
+ opts[:bandwidth] = '170'
473
+ when :ssb10
474
+ opts[:start_freq] = '28.000.000'
475
+ opts[:target_freq] = '29.700.000'
476
+ opts[:demodulator_mode] = 'USB'
477
+ opts[:bandwidth] = '2.700'
478
+ when :ssb12
479
+ opts[:start_freq] = '24.890.000'
480
+ opts[:target_freq] = '24.990.000'
481
+ opts[:demodulator_mode] = 'USB'
482
+ opts[:bandwidth] = '2.700'
483
+ when :ssb15
484
+ opts[:start_freq] = '21.000.000'
485
+ opts[:target_freq] = '21.450.000'
486
+ opts[:demodulator_mode] = 'USB'
487
+ opts[:bandwidth] = '2.700'
488
+ when :ssb17
489
+ opts[:start_freq] = '18.068.000'
490
+ opts[:target_freq] = '18.168.000'
491
+ opts[:demodulator_mode] = 'USB'
492
+ opts[:bandwidth] = '2.700'
493
+ when :ssb20
494
+ opts[:start_freq] = '14.000.000'
495
+ opts[:target_freq] = '14.350.000'
496
+ opts[:demodulator_mode] = 'USB'
497
+ opts[:bandwidth] = '2.700'
498
+ when :ssb40
499
+ opts[:start_freq] = '7.000.000'
500
+ opts[:target_freq] = '7.300.000'
501
+ opts[:demodulator_mode] = 'LSB'
502
+ opts[:bandwidth] = '2.700'
503
+ when :ssb80
504
+ opts[:start_freq] = '3.500.000'
505
+ opts[:target_freq] = '3.800.000'
506
+ opts[:demodulator_mode] = 'LSB'
507
+ opts[:bandwidth] = '2.700'
508
+ when :ssb160
509
+ opts[:start_freq] = '1.800.000'
510
+ opts[:target_freq] = '2.000.000'
511
+ opts[:demodulator_mode] = 'LSB'
512
+ opts[:bandwidth] = '2.700'
513
+ when :tempest
514
+ opts[:start_freq] = '400.000.000'
515
+ opts[:target_freq] = '430.000.000'
516
+ opts[:demodulator_mode] = 'AM'
517
+ opts[:bandwidth] = '200.000'
518
+ when :wifi24
519
+ opts[:start_freq] = '2.400.000.000'
520
+ opts[:target_freq] = '2.500.000.000'
521
+ opts[:demodulator_mode] = 'AM'
522
+ opts[:bandwidth] = '20.000.000'
523
+ when :zigbee
524
+ opts[:start_freq] = '2.405.000.000'
525
+ opts[:target_freq] = '2.485.000.000'
526
+ opts[:demodulator_mode] = 'AM'
527
+ opts[:bandwidth] = '2.000.000'
528
+ else
529
+ raise "ERROR: Invalid profile: #{profile}"
530
+ end
531
+
532
+ opts
533
+ rescue StandardError => e
534
+ raise e
535
+ end
536
+
331
537
  # Supported Method Parameters::
332
538
  # PWN::Plugins::GQRX.disconnect(
333
539
  # gqrx_sock: 'required - GQRX socket object returned from #connect method'
@@ -352,6 +558,46 @@ module PWN
352
558
 
353
559
  public_class_method def self.help
354
560
  puts "USAGE:
561
+ gqrx_sock = #{self}.connect(
562
+ target: 'optional - GQRX target IP address (defaults to 127.0.0.1)',
563
+ port: 'optional - GQRX target port (defaults to 7356)'
564
+ )
565
+
566
+ #{self}.gqrx_cmd(
567
+ gqrx_sock: 'required - GQRX socket object returned from #connect method',
568
+ cmd: 'required - GQRX command to execute',
569
+ resp_ok: 'optional - Expected response from GQRX to indicate success'
570
+ )
571
+
572
+ #{self}.init_freq(
573
+ gqrx_sock: 'required - GQRX socket object returned from #connect method',
574
+ freq: 'required - Frequency to set',
575
+ demodulator_mode: 'optional - Demodulator mode (defaults to WFM)',
576
+ bandwidth: 'optional - Bandwidth (defaults to 200000)',
577
+ lock_freq_duration: 'optional - Lock frequency duration (defaults to 0.5)',
578
+ strength_lock: 'optional - Strength lock (defaults to -60.0)'
579
+ )
580
+
581
+ #{self}.scan_range(
582
+ gqrx_sock: 'required - GQRX socket object returned from #connect method',
583
+ demodulator_mode: 'required - Demodulator mode',
584
+ bandwidth: 'required - Bandwidth',
585
+ start_freq: 'required - Starting frequency',
586
+ target_freq: 'required - Target frequency',
587
+ precision: 'required - Precision',
588
+ lock_freq_duration: 'optional - Lock frequency duration (defaults to 0.5)',
589
+ strength_lock: 'optional - Strength lock (defaults to -60.0)'
590
+ )
591
+
592
+ profiles = #{self}.list_profiles
593
+
594
+ opts = #{self}.assume_profile(
595
+ profile: 'required - valid GQRX profile name returned from #list_profiles method'
596
+ )
597
+
598
+ #{self}.disconnect(
599
+ gqrx_sock: 'required - GQRX socket object returned from #connect method'
600
+ )
355
601
 
356
602
  #{self}.authors
357
603
  "
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.5.79'
4
+ VERSION = '0.5.80'
5
5
  end
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.5.79
4
+ version: 0.5.80
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-03 00:00:00.000000000 Z
11
+ date: 2024-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -380,14 +380,14 @@ dependencies:
380
380
  requirements:
381
381
  - - '='
382
382
  - !ruby/object:Gem::Version
383
- version: 2.7.1
383
+ version: 2.7.2
384
384
  type: :runtime
385
385
  prerelease: false
386
386
  version_requirements: !ruby/object:Gem::Requirement
387
387
  requirements:
388
388
  - - '='
389
389
  - !ruby/object:Gem::Version
390
- version: 2.7.1
390
+ version: 2.7.2
391
391
  - !ruby/object:Gem::Dependency
392
392
  name: jsonpath
393
393
  requirement: !ruby/object:Gem::Requirement
@@ -884,14 +884,14 @@ dependencies:
884
884
  requirements:
885
885
  - - '='
886
886
  - !ruby/object:Gem::Version
887
- version: 2.28.0
887
+ version: 2.29.1
888
888
  type: :runtime
889
889
  prerelease: false
890
890
  version_requirements: !ruby/object:Gem::Requirement
891
891
  requirements:
892
892
  - - '='
893
893
  - !ruby/object:Gem::Version
894
- version: 2.28.0
894
+ version: 2.29.1
895
895
  - !ruby/object:Gem::Dependency
896
896
  name: ruby-audio
897
897
  requirement: !ruby/object:Gem::Requirement