SSCTF-2016-线下NFC题目解析

IoT安全研究 line 阅读(4616) 0评论

本次SSCTF线下比赛过程中,出现了IoT方面的题目,该题目是关于NFC卡片的一个题

卡片破解

尝试读取该卡,发现该卡一开始是全扇区加密


在我们题目设置过程中,铜区/银区的每一个沙盒在拿到Flag之后都会有一个key,这个key就是该卡的某个扇区的key



当有了Key之后,就可以使用mfoc进行破解,从而获取到其扇区的Key,拿到整个卡的数据

稍等片刻,所有数据就可以全部看到了

然后可以发现,卡中一共包含两个Game

Game1

出题思路:
经常可以在现实生活中看到各种NFC卡片、钥匙扣等等,在网络上也可以看到一些关于NFC卡破解的文章,该题模拟了一个真实的刷卡消费环境,可以类比为学校饭卡,水卡,某商场充值卡等等环境,因为金额等数据是离线存放的,所以导致金额可以随意篡改,通过修改卡内金额来拿到Flag
解题过程:
读卡界面是酱紫的


每次刷卡,都会消费一定金额


多刷几次就可以发现消费的金额是随机出现的,在卡中有个小提示

根据tips可以得知,本题是要去修改卡内的金额,我们这里对金额做了两重校验


这是第5扇区的数据,一共64字节

具体可以看看Mifare M1卡的数据
多刷几次卡之后就可以拿到一些数据样本


将明文数据换为hex之后,发现数据直接是对应的

可以看到共占用4字节,直接修改之后去刷卡提示读取失败


猜测有校验
然后对比数据,很容易发现接下来的4个字节恰好是该金额的CRC校验

修改之后再去验证,提示依然是读取失败,于是猜测还有其他的校验
看了一下,本行还有8个字节,思考了一下8个字节可以存放什么关于校验的数据,刚好16位md5存放进去占用8字节,于是进行验证

至此,Game1的数据完全被破解

然后tips里说了,足够多的钱可以让你得到Flag
所以直接把金额改为FFFFFFFF(255^4)然后计算好校验,最终数据如下


即可获取到第一个Flag

Game2

出题思路:
作为现实生活中,很多地方都是可以当做输入点的,比如上图这个车牌号,其实就是一种ID,那么如果对输入不做检查,直接带入数据库查询就有可能引发注入,Game2就模拟出了一个这样的环境


解题思路:
每个队伍刷卡的时候会同时显示队伍名称

那么,不同队伍之间刷卡,会显示不同的队伍名称
破解掉卡片之后,可以在第8扇区读取到每个队伍的ID值
另外卡片中提示了Data Can Be Read Aross Sectors
也就是说读取数据的时候是进行跨扇区读取的,程序会把8,9,10,三个扇区读出来的数据进行拼接,然后ASCII转码之后带入数据库进行查询

猜测数据库的查询语句应该为

那么首先需要检验的是该注入是字符型注入还是数字型注入
Payload1 – 数字型

整个sql语句也就成了


Payload2 – 字符型

整个sql语句也就成了


结果发现,第一个payload返回了正常的值,那么可以判定该注入为数字型注入
接下来查询字段数和回显位
字段数使用二分法进行查询,大概刷3-5次就可以得到了

得知取出来的字段数为1个


查询回显位


刷卡之后可以看到程序中有两个回显位,但是显示的数据是一样的,实际上我们认为,只有一个回显位

然后开始猜解库名



表的数量



有两个表
获取第一个表的名字



获取第二个表的名字



第一个表名为injection
第二个表名为 ssctf_flag
直接看ssctf_flag这个表的数据吧
获取ssctf_flag表中的字段数



该表中有两个字段
读取第一个字段名



读取第二个字段名



最后,读取数据


转载请注明:CloverSec Labs » SSCTF-2016-线下NFC题目解析

喜欢 (14)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. :!:
    starwars2016-04-13 16:32 回复