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