线下赛骚操作总结(pwn)

打patch主要用IDA-keypatch 安装的话网上有很多教程,就不写了

这里也有一个大佬的博客讲了很多线下赛的骚操作: http://p4nda.top/2018/07/02/patch-in-pwn/#

常见的patch操作:

1、格式化字符串漏洞 —-> 将printf函数改成puts函数 拿之前xman结营赛的那道onec_time做例子 需要知道两个值: 然后计算 puts_plt 与 call_printf_ret的偏移, 如果为负数则要转换成补码 最后用ida edit->patch program->change byte 修改call printf处的内容 puts_plt = 0x4006B0 call_printf_ret = 0x4009fe #这是callprintf的下一条语句的地址E8 是call的机器码,它后四位是偏移,将 E8后的D2 FC FF修改成 B2 FC FF,再查看汇编代码 可以看到printf函数 被替换成了puts了 最后将修改写入文件中 Edit –> Patch Program –> Apply patches to input file patch就打好了

2、栈溢出 fgets那存在一个简单的栈溢出,s的大小是0x20,但是fgets读取了0x32个字节的数据,打patch的话将fgets的 参数改小就好了然后再写入文件中

3、堆的漏洞 首先看下程序里是否有后门函数,将后门函数nop掉 嗯 ….就nop掉free函数 改输入长度 或者 改malloc的size

4、一些通用的姿势 如果 程序中包含 如 /home/flag等路径的字符串,将字符串patch 成 nop 将允许输入的size变小 将buffer的大小变大 将后门函数nop掉 修改libc,直接换掉一个libc