![](https://i-blog.csdnimg.cn/blog_migrate/02cb9976287f37cd3576276a1a542ae0.png)
这次是要重定向到hello函数,buffer有512长度,但是用了 fgets(buffer,sizeof(buffer),stdin)
这样的输入方式,想要溢出攻击有一些困难(有长度限制啊),至少比之前的用gets函数的难(gets函数什么的,太弱了)
hello函数的地址:080484b4
![](https://i-blog.csdnimg.cn/blog_migrate/6378804562c28d85438f334feb39a4cf.png)
我们注意到了,这里面vuln函数在结束的时候用了exit(1),exit函数是进程级别的退出,而不是return语句(return是函数级别的退出)
return可以用覆盖返回地址来攻击,但是exit就很难,我们,只能覆盖exit函数的说~
就是把exit(1)这个语句,重定位到hello函数上!
exit地址,08049724
![](https://i-blog.csdnimg.cn/blog_migrate/51f6abb53bc9446215afd15d2a03c9ea.png)
那么,我们可以改变内存0x08049724的内容,这个地方的内容原先是080483f2,也就是这里面的下一条语句
有图有真相:
![](https://i-blog.csdnimg.cn/blog_migrate/5c70f137ce74d6f6a1f45ca90e0bb991.png)
如果想改代码段中的内容,但一般代码段不会让你随便改。
把0x08049724 的内容改为 080484b4
测试:
![](https://i-blog.csdnimg.cn/blog_migrate/f82fb34654fb22fdcf6753eb18e9dc98.png)
经过漫长的调试和测试(说多了都是眼泪,感觉自己太弱了)
![](https://i-blog.csdnimg.cn/blog_migrate/1a4a15a27dadf1d0018c6c9d17b8aeaa.png)