这是有关如何修复pwn题目的一个博客。
参考链接:https://hello-ctf.com/HC_AWD/awd_pwn.exp/#pwn
类型:明确范围,逆转逻辑,严控时间,问题部分无差别清除、通解。
明确范围
思路参考链接:2024全国大学生信息安全竞赛(ciscn)半决赛(华东北赛区)Pwn题解 - 知乎(可惜他用这个思路失败了)
例如修改可读文件长度,或者对于%s等未限制范围的内容用明确的范围进行替换如换为%20s
逆转逻辑
将逻辑进行逆转如特定情况不触发程序错误,逆转为特定情况还会触发程序错误。
指令 | 机器码 | 指令 | 机器码 |
---|---|---|---|
jmp | EB | jz | 74 |
je | 74 | jne | 75 |
jg | 7F | jge | 7D |
jl | 7C | jle | 7E |
ja | 77 | jae | 73 |
jb | 72 | jbe | 76 |
jna | 76 | jnb | 73 |
jnae | 72 | jnc | 73 |
jnb | 73 | jng | 7E |
jnge | 7C | jnl | 7D |
严控时间
程序最开始的alarm(60)通常时间较长,可以测试进行一次操作的时间大概多久,比如5次操作需要2秒,正常程序运行需要几次操作,多留1次的时间大致就行,例如设置为alarm(3),这样限制多次操作也能修复程序。
问题部分无差别清除
参考链接:2024全国大学生信息安全竞赛(ciscn)半决赛(华东北赛区)Pwn题解 - 知乎
直接把有问题的函数整体nop掉,然后能调用这个函数相关逻辑也nop掉。
通解(*)
参考链接:XueDugu/evilPatcher
直接自动打补丁。
使用方法
1 | seccomp-tools dump elf |
结果输出一个patch过后的文件,文件名为原来文件加上.patch后缀。