从参加了比赛的师傅那里获取了附件,遂进行尝试,总的来说难度不大,感觉今年这届CISCN和长城杯合办的可能难度会大些。
下文中也包含了我对于找到的一些Patch工具进行测试的反馈。
baby_jit
ORW的题,虽然题目不难,但是我自己的脚本跑不出来,可能有点问题。
漏洞在exec函数,这里的执行,可以被我们的shellcode填入,就可以执行ORW了。只需要确保前面的汇编的正确性,再写入后面的ORW即可。
修复用IDA直接把读入长度限制即可。用了一下evilPatcher,Patch失败。
cJS0N
明显的fmt漏洞。del的时候存在fmt漏洞,可以直接改return address,这里直接改成one_gadget即可。
用evilPatcher又没用,用PatchAwdPwn倒是没问题,可惜Patch后的内容反编译出来我看不懂,但是打不通了。
printf-master-attachment
很明显又是一个fmt漏洞,又?
fun3的时候存在fmt漏洞,先利用fun1获取的地址来把return address改成main,使得循环,然后利用fun1获取地址。最后获取完地址就可以将return address改成one_gadget。由于开了pie需要多打几遍才能打通。
用evilPatcher又没用,用PatchAwdPwn倒是没问题,可又是相同问题Patch后的内容反编译出来我看不懂,并且没看出来比直接在IDA中改方便在哪。
ps:evilPatcher跑我给的附件都是没改对地方,可能只是对于特定类型题目的针对性武器。
总结
24年比赛的三道题目从难度上来看,虽然不算特别复杂,但也绝非轻而易举就能解决的。如果再加上时间压力,解题过程可能就不会像现在这样轻松自如了。尤其是这次比赛的规则明确禁止使用大语言模型辅助解题,这无疑增加了挑战性。此外,双赛合办的赛制也意味着题目难度只会增加而不会减少,毕竟两个赛的题目合并后,考察的知识点和解题思路会更加广泛和深入。有时间,可以再看看其他赛区之前的分区赛题目。