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!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值