pwn 0.4.483 → 0.4.486

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: 3b2312868fae10dcecce40572e6e7e1322c7acd5a2f9f7d0db67027379e1e3b6
4
- data.tar.gz: 1a3de23ee29c029a6c6b42a2395e8b89b42f123d40ab0d4c485dfeb4372bf00b
3
+ metadata.gz: e94d61e2dd6c49a629782bffdc15c3df8572ddfd53164bcef2d161b5c0bee91d
4
+ data.tar.gz: d0de28e574989e25944c9ec65b25bc725359edb2b1a91f700619c873daa69c29
5
5
  SHA512:
6
- metadata.gz: 838d40e50d60ce05d1685c6284f2e1c267d8e7a19fa7c0f9883e239cd605a40aa2152df6a7deee3d588ae60c546b039bd9f53691af165491aed9ba3d5a11c80f
7
- data.tar.gz: c54d893999875d1c3beeeb6a0cbe7a9a60376dece4bfa7d4cef70408af11c31cffada1f3300842ffaf71a085d24937d19f7911c7c032430bbd9a1b7dc0a247fd
6
+ metadata.gz: 57a28ac3bac176f638161f07bd7f1fd5267b616085b95f68d25942a321f3c77eb570eef689c166d530734680013404ea21a61219c916c4e437c9584e189a9f6d
7
+ data.tar.gz: 2af9a19d427468d017758d571175d402e63826ba4fb202d97432bdc4bf841759a8cd15eceba2e05d6c4de8a12f4c63ed36df587e9b59a3877b5a7a80c085f434
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.483]:001 >>> PWN.help
40
+ pwn[v0.4.486]: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.483]:001 >>> PWN.help
55
+ pwn[v0.4.486]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
 
@@ -135,7 +135,6 @@ begin
135
135
  msr206_obj: msr206_obj,
136
136
  cmd: :simulate_power_cycle_warm_reset
137
137
  )
138
- puts exec_resp.inspect
139
138
  when :Q
140
139
  exit
141
140
  else
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: false
3
+
4
+ require 'pwn'
5
+ require 'optparse'
6
+ require 'json'
7
+
8
+ opts = {}
9
+ OptionParser.new do |options|
10
+ options.banner = "USAGE:
11
+ #{$PROGRAM_NAME} [opts]
12
+ "
13
+
14
+ options.on('-dDEV', '--block-dev=DEV', '<Optional - SonMicroRFID block device path (defaults to /dev/ttyUSB0)>') do |d|
15
+ opts[:block_dev] = d
16
+ end
17
+
18
+ options.on('-bBAUD', '--baud=BAUD', '<Optional - (defaults to 19_200)>') do |b|
19
+ opts[:baud] = b
20
+ end
21
+
22
+ options.on('-DDATABITS', '--data-bits=DATABITS', '<Optional - (defaults to 8)>') do |d|
23
+ opts[:data_bits] = d
24
+ end
25
+
26
+ options.on('-sSTOPBITS', '--stop-bits=STOPBITS', '<Optional - (defaults to 1)>') do |s|
27
+ opts[:stop_bits] = s
28
+ end
29
+
30
+ options.on('-pPARITY', '--parity=PARITY', '<Optional - even|mark|odd|space|none (defaults to none)>') do |p|
31
+ opts[:parity] = p
32
+ end
33
+
34
+ options.on('-fFLOWCTRL', '--flow-control=FLOWCTRL', '<Optional - none||hard||soft (defaults to none)>') do |f|
35
+ opts[:flow_control] = f
36
+ end
37
+ end.parse!
38
+
39
+ if opts.empty?
40
+ puts `#{$PROGRAM_NAME} --help`
41
+ exit 1
42
+ end
43
+
44
+ begin
45
+ block_dev = opts[:block_dev] if File.exist?(opts[:block_dev])
46
+ baud = opts[:baud]
47
+ data_bits = opts[:data_bits]
48
+ stop_bits = opts[:stop_bits]
49
+ parity = opts[:parity]
50
+ flow_control = opts[:flow_control]
51
+
52
+ son_micro_rfid_obj = PWN::Plugins::SonMicroRFID.connect(
53
+ block_dev: block_dev,
54
+ baud: baud,
55
+ data_bits: data_bits,
56
+ stop_bits: stop_bits,
57
+ parity: parity,
58
+ flow_control: flow_control
59
+ )
60
+
61
+ puts "- Welcome to #{File.basename($PROGRAM_NAME)} -"
62
+ puts "Connected via: #{block_dev} @ #{son_micro_rfid_obj[:serial_conn].modem_params}"
63
+ puts "Flow Control: #{son_micro_rfid_obj[:serial_conn].flow_control}"
64
+ puts "Signals: #{son_micro_rfid_obj[:serial_conn].signals}"
65
+
66
+ exec_resp = PWN::Plugins::SonMicroRFID.exec(
67
+ son_micro_rfid_obj: son_micro_rfid_obj,
68
+ cmd: :firmware
69
+ )
70
+ puts "Firmware Version: #{exec_resp.inspect}"
71
+
72
+ # Main Menu
73
+ menu_msg = ''
74
+ loop do
75
+ puts "\n>> MAIN MENU OPTIONS:"
76
+ puts '[(R)ead Card]'
77
+ puts '[(B)ackup Card]'
78
+ puts '[(C)opy Card]'
79
+ puts '[(L)oad Card from File]'
80
+ puts '[(W)arm Reset]'
81
+ puts '[(Q)uit]'
82
+ puts menu_msg
83
+ print 'MAIN MENU OPTION >>> '
84
+ menu_msg = ''
85
+ option = gets.scrub.chomp.strip.upcase.to_sym
86
+
87
+ case option
88
+ when :R
89
+ menu_msg = 'READ CARD'
90
+ rfid_data = PWN::Plugins::SonMicroRFID.read_card(
91
+ son_micro_rfid_obj: son_micro_rfid_obj
92
+ )
93
+ when :B
94
+ menu_msg = 'BACKUP CARD TO FILE'
95
+ rfid_data = PWN::Plugins::SonMicroRFID.backup_card(
96
+ son_micro_rfid_obj: son_micro_rfid_obj
97
+ )
98
+ when :C
99
+ menu_msg = 'COPY CARD'
100
+ rfid_data = PWN::Plugins::SonMicroRFID.copy_card(
101
+ son_micro_rfid_obj: son_micro_rfid_obj
102
+ )
103
+ when :L
104
+ menu_msg = 'LOAD FROM FILE'
105
+ rfid_data = PWN::Plugins::SonMicroRFID.load_card_from_file(
106
+ son_micro_rfid_obj: son_micro_rfid_obj
107
+ )
108
+ when :W
109
+ menu_msg = 'WARM RESET'
110
+ exec_resp = PWN::Plugins::SonMicroRFID.exec(
111
+ son_micro_rfid_obj: son_micro_rfid_obj,
112
+ cmd: :reset
113
+ )
114
+ when :Q
115
+ exit
116
+ else
117
+ menu_msg = '****** ERROR: Invalid Menu Option Selected ******'
118
+ end
119
+ end
120
+ rescue StandardError => e
121
+ raise e
122
+ rescue SystemExit, Interrupt
123
+ puts "\nGoodbye."
124
+ ensure
125
+ son_micro_rfid_obj = PWN::Plugins::SonMicroRFID.disconnect(son_micro_rfid_obj: son_micro_rfid_obj) if son_micro_rfid_obj
126
+ end
@@ -136,7 +136,6 @@ module PWN
136
136
  # Parse All Responses and add them to parsed_cmd_resp_arr
137
137
  while keep_parsing_responses
138
138
  until next_response_detected
139
- print '.'
140
139
  all_cmd_responses = PWN::Plugins::Serial.response(
141
140
  serial_obj: son_micro_rfid_obj
142
141
  )
@@ -165,14 +164,14 @@ module PWN
165
164
 
166
165
  cmd_resp = all_cmd_responses.last
167
166
  bytes_in_cmd_resp = cmd_resp.split.length
168
- puts "EXPECTED CMD BYTE LEN: #{expected_cmd_resp_byte_len}"
169
- puts "LAST CMD BYTE LEN: #{bytes_in_cmd_resp} >>>"
170
- puts all_cmd_responses
171
- puts "COMMAND HEX: #{cmd_hex}\n\n\n"
167
+ # puts "EXPECTED CMD BYTE LEN: #{expected_cmd_resp_byte_len}"
168
+ # puts "LAST CMD BYTE LEN: #{bytes_in_cmd_resp} >>>"
169
+ # puts all_cmd_responses
170
+ # puts "COMMAND HEX: #{cmd_hex}\n\n\n"
172
171
  end
173
172
 
174
- puts "\nALL CMD RESPS >>>"
175
- puts "#{all_cmd_responses}\n\n\n"
173
+ # puts "\nALL CMD RESPS >>>"
174
+ # puts "#{all_cmd_responses}\n\n\n"
176
175
 
177
176
  parsed_cmd_resp_hash = {}
178
177
  parsed_cmd_resp_hash[:raw_resp] = PWN::Plugins::Serial.dump_session_data.inspect
@@ -337,6 +336,115 @@ module PWN
337
336
  PWN::Plugins::Serial.flush_session_data
338
337
  end
339
338
 
339
+ # Supported Method Parameters::
340
+ # PWN::Plugins::SonMicroRFID.read_card(
341
+ # son_micro_rfid_obj: 'required - son_micro_rfid_obj returned from #connect method'
342
+ # )
343
+
344
+ public_class_method def self.read_card(opts = {})
345
+ son_micro_rfid_obj = opts[:son_micro_rfid_obj]
346
+ print 'Ready to Read. Please Scan Card Now:'
347
+ rfid_data = exec(
348
+ son_micro_rfid_obj: son_micro_rfid_obj,
349
+ cmd: :seek_for_tag
350
+ )
351
+ puts "#{rfid_data[:resp_code_desc]} >>> #{rfid_data[:tag_id]}"
352
+
353
+ rfid_data
354
+ rescue StandardError => e
355
+ raise e
356
+ end
357
+
358
+ # Supported Method Parameters::
359
+ # PWN::Plugins::SonMicroRFID.write_card(
360
+ # son_micro_rfid_obj: 'required - son_micro_rfid_obj returned from #connect method'
361
+ # )
362
+
363
+ public_class_method def self.write_card(opts = {})
364
+ son_micro_rfid_obj = opts[:son_micro_rfid_obj]
365
+ rfid_data = opts[:rfid_data]
366
+ # TODO: write card
367
+ puts rfid_data.inspect
368
+
369
+ rfid_data
370
+ rescue StandardError => e
371
+ raise e
372
+ end
373
+
374
+ # Supported Method Parameters::
375
+ # PWN::Plugins::SonMicroRFID.backup_card(
376
+ # son_micro_rfid_obj: 'required - son_micro_rfid_obj returned from #connect method'
377
+ # )
378
+
379
+ public_class_method def self.backup_card(opts = {})
380
+ son_micro_rfid_obj = opts[:son_micro_rfid_obj]
381
+ rfid_data = read_card(son_micro_rfid_obj: son_micro_rfid_obj)
382
+ file = ''
383
+ backup_msg = ''
384
+ loop do
385
+ print 'Enter File Name to Save Backup: '
386
+ file = gets.scrub.chomp.strip
387
+ file_dir = File.dirname(file)
388
+ break if Dir.exist?(file_dir)
389
+
390
+ backup_msg = "\n****** ERROR: Directory #{file_dir} for #{file} does not exist ******"
391
+ puts backup_msg
392
+ end
393
+ File.write(file, "#{JSON.pretty_generate(rfid_data)}\n")
394
+
395
+ rfid_data
396
+ rescue StandardError => e
397
+ raise e
398
+ end
399
+
400
+ # Supported Method Parameters::
401
+ # PWN::Plugins::SonMicroRFID.copy_card(
402
+ # son_micro_rfid_obj: 'required - son_micro_rfid_obj returned from #connect method'
403
+ # )
404
+
405
+ public_class_method def self.copy_card(opts = {})
406
+ son_micro_rfid_obj = opts[:son_micro_rfid_obj]
407
+ rfid_data = read_card(son_micro_rfid_obj: son_micro_rfid_obj)
408
+ write_card(
409
+ son_micro_rfid_obj: son_micro_rfid_obj,
410
+ rfid_data: rfid_data
411
+ )
412
+ rescue StandardError => e
413
+ raise e
414
+ end
415
+
416
+ # Supported Method Parameters::
417
+ # PWN::Plugins::SonMicroRFID.load_card_from_file(
418
+ # son_micro_rfid_obj: 'required - son_micro_rfid_obj returned from #connect method'
419
+ # )
420
+
421
+ public_class_method def self.load_card_from_file(opts = {})
422
+ son_micro_rfid_obj = opts[:son_micro_rfid_obj]
423
+ file = ''
424
+ restore_msg = ''
425
+ loop do
426
+ print 'Enter File Name to Restore to Card: '
427
+ file = gets.scrub.chomp.strip
428
+ break if File.exist?(file)
429
+
430
+ restore_msg = "\n****** ERROR: #{file} does not exist ******"
431
+ puts restore_msg
432
+ end
433
+
434
+ rfid_data = JSON.parse(
435
+ File.read(file),
436
+ symbolize_names: true
437
+ )
438
+
439
+ # TODO: Save Original Card Contents
440
+ write_card(
441
+ son_micro_rfid_obj: son_micro_rfid_obj,
442
+ rfid_data: rfid_data
443
+ )
444
+ rescue StandardError => e
445
+ raise e
446
+ end
447
+
340
448
  # Supported Method Parameters::
341
449
  # PWN::Plugins::SonMicroRFID.disconnect(
342
450
  # son_micro_rfid_obj: 'required - son_micro_rfid_obj returned from #connect method'
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.483'
4
+ VERSION = '0.4.486'
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.4.483
4
+ version: 0.4.486
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-06-07 00:00:00.000000000 Z
11
+ date: 2022-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -1018,6 +1018,7 @@ executables:
1018
1018
  - pwn_serial_check_voicemail
1019
1019
  - pwn_serial_msr206
1020
1020
  - pwn_serial_qualcomm_commands
1021
+ - pwn_serial_son_micro_sm132_rfid
1021
1022
  - pwn_shodan_search
1022
1023
  - pwn_simple_http_server
1023
1024
  - pwn_web_cache_deception
@@ -1079,6 +1080,7 @@ files:
1079
1080
  - bin/pwn_serial_check_voicemail
1080
1081
  - bin/pwn_serial_msr206
1081
1082
  - bin/pwn_serial_qualcomm_commands
1083
+ - bin/pwn_serial_son_micro_sm132_rfid
1082
1084
  - bin/pwn_shodan_search
1083
1085
  - bin/pwn_simple_http_server
1084
1086
  - bin/pwn_web_cache_deception