pwn 0.5.51 → 0.5.52

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: cfe0f518a0867cb7c25b3fa05d62b9497971f740288cf12cade05dfd32428063
4
- data.tar.gz: 3a79b2526bb5b1a8d312c42b335eea3bba9ff0518e5aa05fcbf663c11276064b
3
+ metadata.gz: 0f9d1c877c0b0d4a074cff09b2b7f8c1fcb4dbb741f0477f8ae200bad601b68c
4
+ data.tar.gz: 2a92813b9ca894105d89bc468c1cd8c45ab1b11393f7fffea6c6c1ff23ba46e7
5
5
  SHA512:
6
- metadata.gz: cf5419afa046d2259be2497bb82f994495530144f13873990c31691c869055205fe4106a9844f1c150be413afff1e7c38e0e24656b09134aca31b1acd2c63dae
7
- data.tar.gz: 06b5f917e2e63e88eee092751b39d308d7397dff0769a8ea786e6df4d18124865d698c7dcfa518db40f529ff2d609b50c2b8afbccd6f12538e42df461a50991d
6
+ metadata.gz: 2ef418cb373ff1e3fb95826cd98b47be932e70f0e87f4ce7e9694972441adc203f0b1dd67acc2341e9ab78170706550f4f39c06664acbeb3313b132641326db9
7
+ data.tar.gz: 88fc2a90c23beeb8a352bc41e48ef211150b50e9555d0534013c143dd66b9ee38952b68bf9d89f1636ddc15258ba76724946f128ebd7ad6f1dabd78102619aa2
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.51]:001 >>> PWN.help
40
+ pwn[v0.5.52]: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.51]:001 >>> PWN.help
55
+ pwn[v0.5.52]: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.51]:001 >>> PWN.help
65
+ pwn[v0.5.52]: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
@@ -2,6 +2,7 @@
2
2
  # frozen_string_literal: false
3
3
 
4
4
  require 'pwn'
5
+ require 'json'
5
6
  require 'optparse'
6
7
 
7
8
  opts = {}
@@ -14,6 +15,14 @@ OptionParser.new do |options|
14
15
  opts[:target_freq] = e
15
16
  end
16
17
 
18
+ options.on('-hHOST', '--host=HOST', '<Optional - GQRX Host (Defaults to 127.0.0.1)>') do |h|
19
+ opts[:host] = h
20
+ end
21
+
22
+ options.on('-pPORT', '--port=PORT', '<Optional - GQRX Port (Defaults to 7356)>') do |p|
23
+ opts[:port] = p
24
+ end
25
+
17
26
  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 AM)>') do |d|
18
27
  opts[:demodulator_mode] = d
19
28
  end
@@ -22,20 +31,20 @@ OptionParser.new do |options|
22
31
  opts[:start_freq] = s
23
32
  end
24
33
 
25
- options.on('-hHOST', '--host=HOST', '<Optional - GQRX Host (Defaults to 127.0.0.1)>') do |h|
26
- opts[:host] = h
27
- end
28
-
29
- options.on('-pPORT', '--port=PORT', '<Optional - GQRX Port (Defaults to 7356)>') do |p|
30
- opts[:port] = p
34
+ options.on('-qFLOAT', '--squelch=FLOAT', '<Optional - Squelch Threshold (Defaults to -63)>') do |q|
35
+ opts[:squelch] = q
31
36
  end
32
37
 
33
38
  options.on('-PPLACE', '--precision=PLACE', '<Optional - Precision of Frequency 1-12 (Defaults to 3)>') do |p|
34
39
  opts[:precision] = p
35
40
  end
36
41
 
37
- options.on('-SFLOAT', '--sleep-between-hops=FLOAT', '<Optional - Float to Sleep Between Hops (Defaults to 0)>') do |s|
38
- opts[:sleep_between_hops] = s
42
+ options.on('-LFLOAT', '--lock-on-freq-duration=FLOAT', '<Optional - Duration to lock onto Freqency when Strength < --strength value (Defaults to -63)>') do |l|
43
+ opts[:lock_on_freq_duration] = l
44
+ end
45
+
46
+ options.on('-SFLOAT', '--strength=FLOAT', '<Optional - Strength to trigger sleep (Defaults to 0)>') do |s|
47
+ opts[:strength] = s
39
48
  end
40
49
  end.parse!
41
50
 
@@ -70,24 +79,49 @@ end
70
79
  def init_freq(opts = {})
71
80
  gqrx_sock = opts[:gqrx_sock]
72
81
  this_freq = opts[:this_freq]
73
- sleep_between_hops = opts[:sleep_between_hops]
82
+ lock_on_freq_duration = opts[:lock_on_freq_duration]
83
+ strength = opts[:strength]
74
84
 
75
- resp = gqrx_cmd(
85
+ change_frreq_resp = gqrx_cmd(
76
86
  gqrx_sock: gqrx_sock,
77
87
  cmd: "F #{this_freq}"
78
88
  )
79
- raise "ERROR: Failed to set frequency to #{this_freq}" unless resp == 'RPRT 0'
89
+ raise "ERROR: Failed to set frequency to #{this_freq}" unless change_frreq_resp == 'RPRT 0'
80
90
 
81
- resp = gqrx_cmd(
91
+ raw_freq = gqrx_cmd(
82
92
  gqrx_sock: gqrx_sock,
83
93
  cmd: 'f'
84
94
  )
85
95
 
86
96
  # Split the response from NNNNNNNNN
87
97
  # to NNN.NNN.NNN
88
- this_freq = resp.to_s.chars.insert(-4, '.').insert(-8, '.').join
89
- puts ">>> #{this_freq}"
90
- sleep sleep_between_hops
98
+ this_freq = raw_freq.to_s.chars.insert(-4, '.').insert(-8, '.').join
99
+
100
+ strength_resp = gqrx_cmd(
101
+ gqrx_sock: gqrx_sock,
102
+ cmd: 'l STRENGTH'
103
+ )
104
+ current_strength = strength_resp.to_f
105
+
106
+ squelch_resp = gqrx_cmd(
107
+ gqrx_sock: gqrx_sock,
108
+ cmd: 'l SQL'
109
+ )
110
+ current_squelch = squelch_resp.to_f
111
+
112
+ init_freq_hash = {
113
+ frequency: this_freq,
114
+ strength: current_strength,
115
+ squelch: current_squelch
116
+ }
117
+ # puts JSON.parse(init_freq_hash)
118
+ puts init_freq_hash.to_json
119
+
120
+ sleep lock_on_freq_duration if current_strength < strength
121
+ # This helps level out strength
122
+ sleep 0.03
123
+
124
+ init_freq_hash
91
125
  end
92
126
 
93
127
  def scan_range(opts = {})
@@ -95,26 +129,30 @@ def scan_range(opts = {})
95
129
  start_freq = opts[:start_freq]
96
130
  target_freq = opts[:target_freq]
97
131
  precision = opts[:precision]
98
- sleep_between_hops = opts[:sleep_between_hops]
132
+ lock_on_freq_duration = opts[:lock_on_freq_duration]
133
+ strength = opts[:strength]
99
134
 
100
135
  multiplier = 10**(precision - 1)
101
136
  if start_freq > target_freq
102
137
  start_freq.downto(target_freq) do |this_freq|
103
138
  next unless (i % multiplier).zero?
104
139
 
105
- init_freq(
140
+ init_freq_hash = init_freq(
106
141
  gqrx_sock: gqrx_sock,
107
142
  this_freq: this_freq,
108
- sleep_between_hops: sleep_between_hops
143
+ lock_on_freq_duration: lock_on_freq_duration,
144
+ strength: strength
109
145
  )
146
+ puts init_freq_hash.to_json
110
147
  end
111
148
  else
112
149
  this_freq = start_freq
113
150
  while this_freq <= target_freq
114
- init_freq(
151
+ init_freq_hash = init_freq(
115
152
  gqrx_sock: gqrx_sock,
116
153
  this_freq: this_freq,
117
- sleep_between_hops: sleep_between_hops
154
+ lock_on_freq_duration: lock_on_freq_duration,
155
+ strength: strength
118
156
  )
119
157
 
120
158
  this_freq += multiplier
@@ -126,42 +164,52 @@ begin
126
164
  pwn_provider = 'ruby-gem'
127
165
  pwn_provider = ENV.fetch('PWN_PROVIDER') if ENV.keys.any? { |s| s == 'PWN_PROVIDER' }
128
166
 
129
- demodulator_mode = opts[:demodulator_mode] ||= 'AM'
130
- demodulator_mode.upcase!
131
- raise "ERROR: Invalid demodulator mode: #{demodulator_mode}" unless %w[OFF RAW AM FM WFM WFM_ST WFM_ST_OIRT LSB USB CW CWL CWU].include?(demodulator_mode)
167
+ target_freq = opts[:target_freq]
168
+ target_freq = target_freq.to_s.delete('.').to_i unless target_freq.nil?
169
+ raise 'ERROR: Invalid end frequency' if target_freq.nil?
132
170
 
133
171
  host = opts[:host] ||= '127.0.0.1'
134
172
  port = opts[:port] ||= 7356
135
- puts "Connecting to GQRX at #{host}:#{port}..."
136
173
 
174
+ puts "Connecting to GQRX at #{host}:#{port}..."
137
175
  gqrx_sock = PWN::Plugins::Sock.connect(target: host, port: port)
176
+
177
+ demodulator_mode = opts[:demodulator_mode] ||= 'AM'
178
+ demodulator_mode.upcase!
179
+ raise "ERROR: Invalid demodulator mode: #{demodulator_mode}" unless %w[OFF RAW AM FM WFM WFM_ST WFM_ST_OIRT LSB USB CW CWL CWU].include?(demodulator_mode)
180
+
138
181
  puts "Setting demodulator mode to #{demodulator_mode}..."
139
182
  demod_resp = gqrx_cmd(gqrx_sock: gqrx_sock, cmd: "M #{demodulator_mode}")
140
- puts demod_resp
183
+ raise "ERROR: Failed to set demodulator mode to #{demodulator_mode}" unless demod_resp == 'RPRT 0'
141
184
 
142
185
  start_freq = opts[:start_freq]
143
186
  start_freq = start_freq.to_s.delete('.').to_i unless start_freq.nil?
144
187
  start_freq = gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'f').to_i if start_freq.nil?
145
188
 
146
- target_freq = opts[:target_freq]
147
- target_freq = target_freq.to_s.delete('.').to_i unless target_freq.nil?
148
- raise 'ERROR: Invalid end frequency' if target_freq.nil?
149
-
150
- puts "Scanning from #{start_freq} to #{target_freq}..."
189
+ squelch = opts[:squelch] ||= -63
190
+ squelch = squelch.to_f
191
+ squelch_resp = gqrx_cmd(gqrx_sock: gqrx_sock, cmd: "L SQL #{squelch}")
192
+ raise "ERROR: Failed to set squelch to #{squelch}" unless squelch_resp == 'RPRT 0'
151
193
 
152
194
  precision = opts[:precision] ||= 3
153
195
  precision = precision.to_i
154
196
  raise "ERROR: Invalid precision: #{precision}" unless (1..12).include?(precision)
155
197
 
156
- sleep_between_hops = opts[:sleep_between_hops] ||= 0
157
- sleep_between_hops = sleep_between_hops.to_f
198
+ lock_on_freq_duration = opts[:lock_on_freq_duration] ||= 0
199
+ lock_on_freq_duration = lock_on_freq_duration.to_f
200
+
201
+ strength = opts[:strength] ||= -63
202
+ strength = strength.to_f
203
+
204
+ puts "Scanning from #{start_freq} to #{target_freq}..."
158
205
 
159
206
  scan_range(
160
207
  gqrx_sock: gqrx_sock,
161
208
  start_freq: start_freq,
162
209
  target_freq: target_freq,
163
210
  precision: precision,
164
- sleep_between_hops: sleep_between_hops
211
+ lock_on_freq_duration: lock_on_freq_duration,
212
+ strength: strength
165
213
  )
166
214
  rescue SystemExit, Interrupt
167
215
  puts "\nGoodbye."
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.51'
4
+ VERSION = '0.5.52'
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.5.51
4
+ version: 0.5.52
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.