当前位置:首页|资讯

【pwn4 2022 广东省赛 MidPWN】

作者:K3yB0ard发布时间:2024-09-20

首先看一下保护

checksec

保护全开。

libc版本为2.31。程序开了沙箱。

沙箱

根据沙箱可以看到,允许的系统调用只有orw以及brk、mmap,由于有mmap可以考虑分配可执行段去执行orw的shellcode。

看一下程序逻辑

main

是经典的菜单程序题目。审一下

add

看一下add函数,程序最多允许分配32个堆块,堆地址和堆大小分别用两个全局数组存储。且分配堆块只允许分配两种大小的——0x28以及0xb0大小。

edit

edit函数中存在off by one漏洞,可以溢出一字节覆盖后续堆块size位,可以形成堆块重叠,结合tcache attack可以实现任意地址写。

show

show函数没啥说的。

delete

delete函数将释放的堆指针清零,无UAF。

审完代码,基本思路是通过off by one构造重叠堆块,结合tcache Attack任意地址写,可劫持栈返回地址执行任意gadget,为绕过沙箱,通过mmap分配可执行段执行shellcode。

攻击流程:

1、连续分配堆块并释放,填满tcache,free一个进入UsortedBin ,show一下泄露libc地址

2、tcache Attack任意地址分配堆块,泄露libc中的environ,得到栈地址

3、计算栈偏移,再次任意地址写劫持程序流执行gadget,调用mmap分配出可执行段并读入ORWcode

4、执行ORWcode读取flag文件内容

完整exp:

脚本执行结果:

exp result

By Del0n1x

Keyboard


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1