Pwn之简单patch
Pwn之简单patch
本文首发于“合天智汇”公众号 作者:hope1.引言
在攻防的时候不仅仅需要break,还需要fix将漏洞patch上。2.工具
这里我使用的是keypatch这个ida脚本下载地址:https://github.com/keystone-engine/keypatch/blob/master/keypatch.py3.栈溢出的patch
漏洞原理
由于输入函数的输入长度超过了局部变量所开辟的空间,因此使得输入能够覆盖到返回地址patch
简单了解原理之后,我们可以知道,栈溢出起始就是输入的长度过大,那么我们将输入长度修改到局部变量开辟空间的范围内即可例子
32为情况下
我们可以看到,buf距离ebp(栈底)距离0x28,但是输入却能够输入0x100,很明显的栈溢出漏洞




4.格式化字符串的patch
漏洞原理
格式化字符串的漏洞是因为,程序中存在着格式化字符串输出函数,典型的printf,但是printf,只有格式化字符串参数,而没有后续的参数一,参数二,并且格式化字符串参数由我们所控制,从而导致了任意地址读写的漏洞触发。例子
题目中存在着典型的格式化字符串漏洞,那么修改漏洞有几种方法,例如将printf函数修改为puts函数或者添加%s的参数。方法一
若程序中即存在printf函数,又存在puts函数,那么我们可以将printf函数修改为puts函数







堆之uaf漏洞
堆中较为常见的漏洞use after free漏洞原理由于堆块释放后没有给指针置空,使得被释放的堆块能够被修改或者重复使用,导致漏洞例子




- 对于栈溢出来说,patch比较简单,只需要修改输入长度即可
- 对于格式化字符串漏洞来说,若有puts函数则将printf函数修改为puts函数,若没有则在.eh_frame段上创造%s
- 对于堆的uaf来说,漏洞patch思路很简单,只需要将指针置空即可,但是需要了解汇编代码。