Pwnable之passcode

pwnable第一道求助题

前几天开始做pwnable的练习题,前四题比较容易,到了第五题,本机调试可以获取flag,但是,在远程主机上却失败了。

原因:本机某地址可写入而远程主机该地址不可写导致程序异常。

漏洞:源代码passcode.c的第九行,scanf的参数passcode1未初始化且无&符号,导致实际读入的数字写入到了passcode1的值所代表的地址中,而不是读取到passcode1,因此,导致任意地址写入。

pwn思路:

      本来,通过本机调试是可以覆盖passcode1和passcode2是两者通过strcmp的验证,从而输入flag。

      但这种方法不适合远程服务器环境,passcode1中的未初始化地址空间是不可写的。所以,只能考虑其他办法,由于自己的定式思维,一时想不到如何转变思路,只能baidu搜索解题思路,网络上资料指出passcode1的值可被覆盖为got表中的地址,因为got表是可写的,又因为程序在读入passcode1后,将调用printf和fflush函数,因此,可以选择将passcode1的值覆盖为got表中printf或者fflush函数地址,然后通过scanf函数将该地址的值赋值为system函数的上一条指令地址(保存'/bin/sh'字符串指令),然后,在程序调用printf或者fflush函数时,将直接跳转调用system函数输入flag!

发布了23 篇原创文章 · 获赞 1 · 访问量 1096

猜你喜欢

转载自blog.csdn.net/neuisf/article/details/103546994
今日推荐