pwn 0.4.479 → 0.4.482

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: 5ca99e7a8fee7afaa96d59d48264cf78faaf50b54d9d355b2efa1064f50bc618
4
- data.tar.gz: 416841cc29f3d57207d6b61b783636af8d9b93e29af36b901132492b70066405
3
+ metadata.gz: 54dd1a8b28d45a1616960225db556b4378c80f0a786985b63a1a2cf967245968
4
+ data.tar.gz: ff5ab778b15f78de803c1a65d7a30be89e139dbc010f78e764de03fdb93dce8a
5
5
  SHA512:
6
- metadata.gz: 78eee723d46b98c17f833e10086a34d95e9aaaac55180cce18cb1106b45821d0739613ca53e99d1f72ef311dad108617bf9e2ee178ac0e67cc9daa2582921d58
7
- data.tar.gz: 45661044936bbc8a6bdac18a61c0daaa9fd0a28565f3a50fde1dcbf903ede702e7e07f69806e4f7097ba754ca032fa4a1897888fcd5a0314ae986eecb5b451e6
6
+ metadata.gz: 99b9dc25e7728a72bbd545e319c91ba0893b5317a088ac22a26bd7223818b5b0adb2bea31712fd6f480ca6b5b26ec10005866896d652d17042390c86f731177d
7
+ data.tar.gz: b1cb96c6f46add465d909ac0bfc6c58cfc31504932f134450326b740e5a7ad7eb1f99eaf43f410822f8c7d1eaa9d71710d352c1e8e6961769ed8369f39c4a53e
data/Gemfile CHANGED
@@ -33,7 +33,7 @@ gem 'ipaddress', '0.8.3'
33
33
  gem 'js-beautify', '0.1.8'
34
34
  gem 'json', '2.6.2'
35
35
  gem 'jsonpath', '1.1.2'
36
- gem 'jwt', '2.4.0'
36
+ gem 'jwt', '2.4.1'
37
37
  gem 'luhn', '1.0.2'
38
38
  gem 'mail', '2.7.1'
39
39
  gem 'mongo', '2.17.1'
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.479]:001 >>> PWN.help
40
+ pwn[v0.4.482]: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.479]:001 >>> PWN.help
55
+ pwn[v0.4.482]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
 
@@ -101,7 +101,6 @@ begin
101
101
  puts '[(B)ackup Card]'
102
102
  puts '[(C)opy Card]'
103
103
  puts '[(L)oad Card from File]'
104
- puts '[(E)dit Card]'
105
104
  puts '[(W)arm Reset]'
106
105
  puts '[(Q)uit]'
107
106
  puts menu_msg
@@ -112,38 +111,24 @@ begin
112
111
  case option
113
112
  when :R
114
113
  menu_msg = 'READ CARD'
115
- # Read Card
116
114
  track_data = PWN::Plugins::MSR206.read_card(
117
115
  msr206_obj: msr206_obj
118
116
  )
119
117
  when :B
120
118
  menu_msg = 'BACKUP CARD TO FILE'
121
- # Read Card to Backup
122
119
  track_data = PWN::Plugins::MSR206.backup_card(
123
120
  msr206_obj: msr206_obj
124
121
  )
125
122
  when :C
126
123
  menu_msg = 'COPY CARD'
127
- # Copy Card
128
124
  track_data = PWN::Plugins::MSR206.copy_card(
129
125
  msr206_obj: msr206_obj
130
126
  )
131
127
  when :L
132
128
  menu_msg = 'LOAD FROM FILE'
133
- # Read Card to Backup
134
129
  track_data = PWN::Plugins::MSR206.load_card_from_file(
135
130
  msr206_obj: msr206_obj
136
131
  )
137
- when :E
138
- menu_msg = 'EDIT'
139
- # Read Target Card
140
- track_data = PWN::Plugins::MSR206.edit_card(
141
- msr206_obj: msr206_obj
142
- )
143
-
144
- # TODO: Save Original Card Contents
145
- # arm_to_write card to edit
146
- # read edited card to verify successful write
147
132
  when :W
148
133
  menu_msg = 'WARM RESET'
149
134
  exec_resp = PWN::Plugins::MSR206.exec(
@@ -613,6 +613,7 @@ module PWN
613
613
  msr206_obj: msr206_obj,
614
614
  cmd: type
615
615
  )
616
+ puts exec_resp.inspect
616
617
 
617
618
  print 'Ready to Read. Please Swipe Card Now:'
618
619
  loop do
@@ -621,6 +622,7 @@ module PWN
621
622
  cmd: type
622
623
  )
623
624
 
625
+ puts exec_resp[:msg]
624
626
  break if exec_resp[:msg] == :ack_command_completed
625
627
  end
626
628
 
@@ -660,6 +662,7 @@ module PWN
660
662
  params: [param]
661
663
  )
662
664
  exec_resp[:encoding] = encoding
665
+ exec_resp[:track_format] = [param]
663
666
  puts exec_resp[:decoded]
664
667
  puts exec_resp.inspect
665
668
  track_data_arr.push(exec_resp)
@@ -685,17 +688,20 @@ module PWN
685
688
  params: [param]
686
689
  )
687
690
  exec_resp[:encoding] = encoding
691
+ exec_resp[:track_format] = [param]
688
692
  puts exec_resp[:decoded]
689
693
  puts exec_resp.inspect
690
694
  track_data_arr.push(exec_resp)
691
695
 
692
696
  # 3 byte command
697
+ param = [0x5f] + [param]
693
698
  exec_resp = exec(
694
699
  msr206_obj: msr206_obj,
695
700
  cmd: cmd,
696
- params: [0x5f] + [param]
701
+ params: param
697
702
  )
698
703
  exec_resp[:encoding] = encoding
704
+ exec_resp[:track_format] = param
699
705
  puts exec_resp[:decoded]
700
706
  puts exec_resp.inspect
701
707
  track_data_arr.push(exec_resp)
@@ -706,6 +712,9 @@ module PWN
706
712
  :arm_to_write_with_raw,
707
713
  :arm_to_write_with_raw_speed_prompts
708
714
 
715
+ # TODO: Set Write Density for Tracks Here
716
+ # >>>
717
+
709
718
  if encoding == :iso
710
719
  cmds_arr = %i[
711
720
  load_iso_std_data_for_writing_track1
@@ -713,69 +722,96 @@ module PWN
713
722
  load_iso_std_data_for_writing_track3
714
723
  ]
715
724
 
725
+ # TODO: Get Data by cmd (e.g. load_iso_std_data_for_writing_track1)
716
726
  cmds_arr.each_with_index do |cmd, track|
717
727
  puts "\n*** #{cmd.to_s.gsub('_', ' ').upcase} #{'*' * 17}"
728
+ puts track_data[track][:decoded]
729
+ next if track_data[track][:decoded] == '+'
730
+
718
731
  this_track = track_data[track][:decoded].chars.map do |c|
719
732
  c.unpack1('H*').to_i(16)
720
733
  end
721
- this_track_w_eot = this_track + [0x04]
722
- puts this_track_w_eot.inspect
734
+ track_eot = [0x04]
735
+ track_payload = this_track + track_eot
736
+ puts track_payload.inspect
723
737
  exec_resp = exec(
724
738
  msr206_obj: msr206_obj,
725
739
  cmd: cmd,
726
- params: this_track_w_eot
740
+ params: track_payload
741
+ )
742
+ exec_resp[:encoding] = encoding
743
+ puts exec_resp.inspect
744
+ track_data_arr.push(exec_resp)
745
+ end
746
+ end
747
+
748
+ if encoding == :iso_alt
749
+ cmds_arr = %i[
750
+ alt_load_iso_std_data_for_writing_track1
751
+ alt_load_iso_std_data_for_writing_track2
752
+ alt_load_iso_std_data_for_writing_track3
753
+ ]
754
+
755
+ # TODO: Get Data by cmd (e.g. alt_load_iso_std_data_for_writing_track1)
756
+ cmds_arr.each_with_index do |cmd, track|
757
+ puts "\n*** #{cmd.to_s.gsub('_', ' ').upcase} #{'*' * 17}"
758
+ puts track_data[track][:decoded]
759
+ next if track_data[track][:decoded] == '+'
760
+
761
+ this_track = track_data[track][:decoded].chars.map do |c|
762
+ c.unpack1('H*').to_i(16)
763
+ end
764
+ track_format = track_data[track][:track_format]
765
+ track_eot = [0x04]
766
+ track_payload = track_format + this_track + track_eot
767
+ puts track_payload.inspect
768
+ exec_resp = exec(
769
+ msr206_obj: msr206_obj,
770
+ cmd: cmd,
771
+ params: track_payload
727
772
  )
728
773
  exec_resp[:encoding] = encoding
729
- puts exec_resp[:decoded]
730
774
  puts exec_resp.inspect
731
775
  track_data_arr.push(exec_resp)
732
776
  end
733
777
  end
734
778
 
735
- # if encoding == :iso_alt
736
- # cmds_arr = %i[
737
- # alt_load_iso_std_data_for_writing_track1
738
- # alt_load_iso_std_data_for_writing_track2
739
- # alt_load_iso_std_data_for_writing_track3
740
- # ]
741
-
742
- # cmds_arr.each do |cmd|
743
- # puts "\n*** #{cmd.to_s.gsub('_', ' ').upcase} #{'*' * 17}"
744
- # exec_resp = exec(
745
- # msr206_obj: msr206_obj,
746
- # cmd: cmd
747
- # )
748
- # exec_resp[:encoding] = encoding
749
- # puts exec_resp[:decoded]
750
- # puts exec_resp.inspect
751
- # track_data_arr.push(exec_resp)
752
- # end
753
- # end
754
-
755
- # if encoding == :raw
756
- # cmds_arr = %i[
757
- # load_custom_data_for_writing_track1
758
- # load_custom_data_for_writing_track2
759
- # load_custom_data_for_writing_track3
760
- # ]
761
-
762
- # cmds_arr.each do |cmd|
763
- # puts "\n*** #{cmd.to_s.gsub('_', ' ').upcase} #{'*' * 17}"
764
- # exec_resp = exec(
765
- # msr206_obj: msr206_obj,
766
- # cmd: cmd
767
- # )
768
- # exec_resp[:encoding] = encoding
769
- # puts exec_resp[:decoded]
770
- # puts exec_resp.inspect
771
- # track_data_arr.push(exec_resp)
772
- # end
773
- # end
779
+ if encoding == :raw
780
+ cmds_arr = %i[
781
+ load_custom_data_for_writing_track1
782
+ load_custom_data_for_writing_track2
783
+ load_custom_data_for_writing_track3
784
+ ]
785
+
786
+ # TODO: Get Data by cmd (e.g. load_custom_data_for_writing_track1)
787
+ cmds_arr.each_with_index do |cmd, track|
788
+ puts "\n*** #{cmd.to_s.gsub('_', ' ').upcase} #{'*' * 17}"
789
+ puts track_data[track][:decoded]
790
+ next if track_data[track][:decoded] == '+'
791
+
792
+ this_track = track_data[track][:decoded].chars.map do |c|
793
+ c.unpack1('H*').to_i(16)
794
+ end
795
+ track_format = track_data[track][:track_format]
796
+ track_eot = [0x04]
797
+ track_payload = track_format + this_track + track_eot
798
+ puts track_payload.inspect
799
+ exec_resp = exec(
800
+ msr206_obj: msr206_obj,
801
+ cmd: cmd,
802
+ params: track_payload
803
+ )
804
+ exec_resp[:encoding] = encoding
805
+ puts exec_resp.inspect
806
+ track_data_arr.push(exec_resp)
807
+ end
808
+ end
774
809
 
775
810
  exec_resp = PWN::Plugins::MSR206.exec(
776
811
  msr206_obj: msr206_obj,
777
812
  cmd: type
778
813
  )
814
+ puts exec_resp.inspect
779
815
 
780
816
  print 'Ready to Write. Please Swipe Card Now:'
781
817
  loop do
@@ -887,7 +923,80 @@ module PWN
887
923
  cmd: :yellow_off
888
924
  )
889
925
 
890
- puts 'complete.'
926
+ track_data
927
+ rescue StandardError => e
928
+ raise e
929
+ end
930
+
931
+ # Supported Method Parameters::
932
+ # PWN::Plugins::MSR206.write_card(
933
+ # msr206_obj: 'required - msr206_obj returned from #connect method',
934
+ # encoding: 'required - :iso || :alt_iso || :raw',
935
+ # track_data: 'requred - track data to write (see #backup_card for structure)'
936
+ # )
937
+
938
+ public_class_method def self.write_card(opts = {})
939
+ msr206_obj = opts[:msr206_obj]
940
+ encoding = opts[:encoding].to_s.scrub.strip.chomp.to_sym
941
+ track_data = opts[:track_data]
942
+
943
+ puts 'IN ORDER TO GET BLANK TRACKS, A STRONG MAGNETIC FIELD MUST BE PRESENT TO FIRST WIPE THE CARD TARGETED FOR WRITING.'
944
+ # puts 'Default Write Current:'
945
+ # exec_resp = exec(
946
+ # msr206_obj: msr206_obj,
947
+ # cmd: :view_default_write_current
948
+ # )
949
+ # puts exec_resp.inspect
950
+
951
+ # puts 'Temporary Write Current:'
952
+ # exec_resp = exec(
953
+ # msr206_obj: msr206_obj,
954
+ # cmd: :view_temp_write_current
955
+ # )
956
+ # puts exec_resp.inspect
957
+
958
+ coercivity = :waiting_for_selection
959
+ loop do
960
+ puts "\nCOERCIVITY OPTIONS:"
961
+ puts '[(H)igh (Most Often Black Stripe)]'
962
+ puts '[(L)ow (Most Often Brown Stripe)]'
963
+ print 'COERCIVITY LEVEL >>> '
964
+ coercivity_choice = gets.scrub.chomp.strip.upcase.to_sym
965
+
966
+ # Write Current Settings vs. Media Coercivties
967
+ # Media Coercivity (Oersteds)|Write Current Setting*|Typical Usage
968
+ # 300 |36 |Low coercivity
969
+ # 600 | |
970
+ # 1800 | |
971
+ # 3600+ |255 |Typical high corcivity
972
+
973
+ case coercivity_choice
974
+ when :H
975
+ coercivity = [0x32, 0x35, 0x35]
976
+ break
977
+ when :L
978
+ coercivity = [0x30, 0x33, 0x36]
979
+ break
980
+ end
981
+ end
982
+
983
+ exec_resp = exec(
984
+ msr206_obj: msr206_obj,
985
+ cmd: :set_temp_write_current,
986
+ params: coercivity
987
+ )
988
+
989
+ track_data = wait_for_swipe(
990
+ msr206_obj: msr206_obj,
991
+ type: :arm_to_write_no_raw,
992
+ encoding: encoding,
993
+ track_data: track_data
994
+ )
995
+
996
+ exec_resp = PWN::Plugins::MSR206.exec(
997
+ msr206_obj: msr206_obj,
998
+ cmd: :simulate_power_cycle_warm_reset
999
+ )
891
1000
 
892
1001
  track_data
893
1002
  rescue StandardError => e
@@ -909,16 +1018,11 @@ module PWN
909
1018
 
910
1019
  encoding = track_data.first[:encoding] if track_data.length == 3
911
1020
  # TODO: Save Original Card Contents
912
- track_data = wait_for_swipe(
1021
+ write_card(
913
1022
  msr206_obj: msr206_obj,
914
- type: :arm_to_write_no_raw,
915
1023
  encoding: encoding,
916
1024
  track_data: track_data
917
1025
  )
918
-
919
- puts 'complete.'
920
-
921
- track_data
922
1026
  rescue StandardError => e
923
1027
  raise e
924
1028
  end
@@ -971,46 +1075,11 @@ module PWN
971
1075
  encoding = track_data.first[:encoding] if track_data.length == 3
972
1076
 
973
1077
  # TODO: Save Original Card Contents
974
- track_data = wait_for_swipe(
1078
+ write_card(
975
1079
  msr206_obj: msr206_obj,
976
- type: :arm_to_write_no_raw,
977
1080
  encoding: encoding,
978
1081
  track_data: track_data
979
1082
  )
980
-
981
- puts 'complete.'
982
-
983
- track_data
984
- rescue StandardError => e
985
- raise e
986
- end
987
-
988
- # Supported Method Parameters::
989
- # PWN::Plugins::MSR206.edit_card(
990
- # msr206_obj: 'required - msr206_obj returned from #connect method'
991
- # )
992
-
993
- public_class_method def self.edit_card(opts = {})
994
- msr206_obj = opts[:msr206_obj]
995
-
996
- # Read Card to Backup
997
- track_data = backup_card(
998
- msr206_obj: msr206_obj
999
- )
1000
-
1001
- # TODO: Inline Editing
1002
-
1003
- encoding = track_data.first[:encoding] if track_data.length == 3
1004
- # TODO: Save Original Card Contents
1005
- track_data = wait_for_swipe(
1006
- msr206_obj: msr206_obj,
1007
- type: :arm_to_write_no_raw,
1008
- encoding: encoding
1009
- )
1010
-
1011
- puts 'complete.'
1012
-
1013
- track_data
1014
1083
  rescue StandardError => e
1015
1084
  raise e
1016
1085
  end
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.479'
4
+ VERSION = '0.4.482'
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.479
4
+ version: 0.4.482
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.
@@ -310,14 +310,14 @@ dependencies:
310
310
  requirements:
311
311
  - - '='
312
312
  - !ruby/object:Gem::Version
313
- version: 2.4.0
313
+ version: 2.4.1
314
314
  type: :runtime
315
315
  prerelease: false
316
316
  version_requirements: !ruby/object:Gem::Requirement
317
317
  requirements:
318
318
  - - '='
319
319
  - !ruby/object:Gem::Version
320
- version: 2.4.0
320
+ version: 2.4.1
321
321
  - !ruby/object:Gem::Dependency
322
322
  name: luhn
323
323
  requirement: !ruby/object:Gem::Requirement