格式字符串漏洞发生的条件
本次实验3个实例
1、实验一
代码如下:
这个实验是不存在漏洞的,重点在于理解printf函数的堆栈变化。
使用GDB打开,我们先要看一下main函数,可以看到printf函数的地址是0x00001206
我们在printf函数处下断点
开始运行这个程序,
这个单步n是不可以的,我们要先删除断点后start程序
我们来看一下栈中的情况
3个数,是倒序压栈的,从右到左,所以我们在先是\n,然后是e9也就是我们的233
最后是hello world,这样的压栈方式是为了正向的输出,first in last out吗不是
2、实例二
代码如下:
我们运行一下这个程序,我们就可以发现这个程序的漏洞了
和上面的流程一样,先看看main函数,然后再printf函数处下断点
观察一下栈
再单步一次,观察一下输出的东西
我们可以看一下输出的最后一个为什么是0
所以说当参数和格式化输出不相同时,程序就会错输出。