fix-pwn

这是有关如何修复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
2
seccomp-tools dump elf
python evilPatch.py elf sandboxfile 1

结果输出一个patch过后的文件,文件名为原来文件加上.patch后缀。