2017陕西省的pwn_box这个题作为调试的程序,gdb作为工具

先来熟悉原理,推荐几个pdf学习懂原理吧:

Format String Exploitation-Tutorial By Saif El-Sherei
Exploiting Format String Vulnerabilities  scut/team teso

看完这几个会对原理有深刻认识,然后如何操作呢?

戳我


然后就是理论到实践的部分,运行程序发现会对用户名进行检测(简单逆向得到用户名为admin2017),使用IDA对程序进行分析,发现在函数sub_8048845里有个很明显的缓冲区溢出的漏洞可以利用

我们的目标是else里面的printf(&format),要让它泄露出Canary的值,下面调试来找:

因为这个值是动态变化的,所以我们要找到它存在哪个地方,然后泄露

这个地方是Canary的初始值,我们使用gdb调试找到它

此时,查看ebp-0xC的值,然后打印内存,即可找到Canary

找到了Canary,删除这个断点,重新下个0x80488C3的断点

我们的输入是%p %p %p………………,然后观察打印出来栈中的值

运行到这儿,然后查看我们的输出

这几个值是什么呢?查看下esp内存地址所在的值

所以,第一个%p,输出的是0x0804b080,那么我们的Canary是第七个!


所以,参数就构造好了:%7$p(原理在pdf和链接中有,不赘述)

第一步完成,运行截图:

因此我们就绕过了Canary