首页
社区
课程
招聘
[旧帖] [转帖]水卡复制 0.00雪花
发表于: 2015-12-29 16:39 5967

[旧帖] [转帖]水卡复制 0.00雪花

2015-12-29 16:39
5967
毕业临走之际发点福利,纯技术贴

如今网络上能找到RFID安全类的信息非常的少,原因我就不说了,大家也明白。大家如果要研究RFID安全可以去RadioWar或者Freebuf多看看相关的文章。
这次案例的主角是某学校可怜的水卡(热水卡),先小小地上镜一下先。

用NFC手机上安装的MCT(Mifare Classic Tool)查看,水卡的确是Mifare Classic 1k类型的。

此次破解用到的工具有:电脑一台,ACR122U一台,带NFC功能的手机一台,水卡一张。
在进行破解工作之前,我们要为电脑搭建相应的环境,大家需要在电脑上安装.NET Farmwork 4以及Java,请自行上网下载安装,后面用到的软件依赖这两个运行库。

安装完运行库之后就需要安装ACR122U的驱动了(下面有链接),为了方便后续的开发,将SDK也一并安装。

安装完驱动和SDK之后,把ACR122U连接电脑,设备就能正常工作了。把我们的水卡放上去,ACR122U的蜂鸣器就会响并且LED的颜色也会改变。

验证漏洞可利用的程序是mfoc,mfoc在Windows上的版本叫mfocgui,但mfocgui对于刚刚接触RFID安全的同学来说有点麻烦,所以这次直接采用M1卡服务程序(其实就是简化版的mfocgui)。

打开之后,程序界面非常简洁,只有一个按钮,就是开始破解。在读卡器列表那我已经见到我的ACR122U了,所以直接按开始破解就可以。打开之后,程序界面非常简洁,只有一个按钮,就是开始破解。在读卡器列表那我已经见到我的ACR122U了,所以直接按开始破解就可以。

然后接下来就等待程序自己破解密钥。

不用很久,就看到所有扇区都被打勾了,破解成功了。

破解成功后根目录就生成了这张卡的dump文件了,大小是1kb,整张卡就被读取出来了。

但mfoc原本是运行在Linux环境下的,移植到Windows下的mfocgui生成的dump文件是并不能直接使用的,还需要一个修复工具fixdump(下载fixdump),将1kb的dump文件修复成4kb的dump文件才行。

fixdump是命令行操作,并且必须安装了.NET Farmwork 4运行库才可以使用,为了方便命令操作,我们将dump文件拷贝到fixdump的目录里,打开cmd进行修复。命令很简单,直接“fixdump ”就可以,生成的文件会直接覆盖源文件。

修复完成后,用UltraEdit或者WinHex之类的十六进制编辑器打开,就可以看到dump文件的数据了。

看到上图我用方框框着的数据了吗?这就是卡扇区的控制段,其中前6字节和后6字节的FFFFFFFFFFFF就是这个扇区的密码,中间的FF078069就是控制位,还不清楚M1卡的结构的可以去看看介绍M1卡结构文章。

知道密码之后,我将密码导入MCT中,开始读取卡片的数据了。

由于MCT自带数据高亮的功能,我们可以清楚的看到4扇区中有两行值块,我卡中现在的余额是32.31,我们根据值块的计算规矩进行计算,不清楚值块的还请去看看介绍M1卡结构的文章。值块的数值是两次不取反一次取反,并且保存在最低的地址里面的。看到第一个值块,0C9F,因为计算机数据是倒序存入的,所以就是真正的数据就是9F0C,换成十进制就是3231。中间那段的60F3是取反保存的,60F3倒序一次是F360,换成二进制就是1111001101100000, 取反一次就是0000110010011111,换成十进制就是3231。最后一段跟第一段一样,都是不取反保存。末端的11和EE就是地址,可以忽略不计,只要后面记得地址保持一致就可以。到此为止,卡的数据因为并没有采取任何加密导致被破解,现在我将卡的钱修改成999.99试试,999.99元应该是十进制99999,十六进制就是01869F,倒序一次结果就是9F8601 ,其他几位一样原理计算, 或者我们可以用MCT自带的值块计算工具计,最终算出结果如下图。

将数据写入到卡里,现在就是去机器实践的时候了。

破解大完满结束,总耗时5小时。

看似很顺利,但最近偶然发现一些细节问题,细心的话可能也有人留意到,卡中的数据除了两个值块保存余额之外,还存在扇区1和5的数据,虽说学校的热水系统不联网,但要是机器自带日志记录,把我卡记录下来那不就完蛋了?所以此次要斩草除根,免得引来无穷后患。
要掌握规矩,肯定要有数据对比,找同学借了张正常未经修改的水卡进行读卡,结果如下。

纳闷的发现除了我的卡之外,其他卡的1扇区都是没有数据的。果断把自己卡的1扇区清空了,拿去饮水机测试,使用一切正常,不知道是哪个这么无聊把数据写进去的,继续研究。

可以发现,所有卡的4扇区的0段开头都有0400,并以C5AE结尾,貌似这是一个校验位,把它清零,拿去饮水机测试,发现是Error,看来这个位的确是校验用的,可以保持一致,重点来分析下5扇区那段数据。

似乎发现了点端倪,除了开头的FA5C 0000 05AC FFFF和对照卡不一样之外,其他数据都相同。接着试试除了这8字节的开头保留,其余清零,在饮水机上测试,一切正常,回来再次读卡的时候又重新生成了一样的数据,可以排除影响。

接着将这8字节开头清零,拿去饮水机消费,发现提示Error,看来的确是一个校验,我们必须保证对数据的敏感,可以看到0000和FFFF,两个值恰好是取反了一次,那FA5C和05A3是不是也一样?FA5C转成二进制是1111101001011100,05A3转成二进制是0000010110100011,结果很清楚,两个值是互相取反保存,那我将它修改成0000和FFFF,其余部分清零,拿去饮水机测试,一切正常。

到此为止,水卡的校验也被破解了,为了保险起见,将水卡的无用数据清零,并用0000和FFFF代替取反的值,痕迹就被清理干净了。如图

学长要走了,学妹留给你们了,哎,一起走过三年最终还是要面对现实...有缘再见

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
然而一个读卡器的钱就够好几年的水费了
2015-12-29 17:12
0
雪    币: 689
活跃值: (422)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
3
2015-12-29 19:53
0
雪    币: 207
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
图呢?图呢?
2016-4-8 10:48
0
游客
登录 | 注册 方可回帖
返回
//