当前位置:首页|资讯

【pwn25 2024 Ciscn初赛 orange_cat_diary】

作者:K3yB0ard发布时间:2024-10-13

今年国赛初赛的一道pwn,感觉其实今年国赛初赛比去年的难度要高不少,当时赛场上5道做了3道,今天先更新这个比较常规的堆题吧。

看题目名字其实就猜到跟house of orange 有点关系可能。

首先我们看一下保护吧

checksec

保护全开。附件给了libc,版本是2.23,算是堆题中版本比较低的了,没有tcache,保护全开的情况下有限考虑malloc hook而且没有tcache估计要配合fastbin attack了。

看下main

mian

经典的菜单题目

menu

menu里面增查删改编辑全都有,还挺全的,标准的orange应该是没有free的,有点奇怪,继续一个一个函数看:

add

add函数允许我们控制malloc分配的堆块大小,最大为0x1000,size和堆指针分别由global_size和ptr两个全局变量保存,因为不是数组用来存储各个堆块size和指针,所以相当于我们“手里”同时只有一个堆块可以被操作。后面的新的堆块add进来就会覆盖ptr指针我们就操作不了以前的堆块了。

show

show函数直接打印ptr中的内容,只给我们一次机会show,应该就是泄露地址用的了。没啥问题。

delete

delete函数只给了一次机会free,用了之后就相当于没有free了,这里free之后没有清空ptr指针,存在UAF。那看来可能还是要走orange,相当于泄露libc可以走top chunk->unsorted bin 这一套,把这一次free留下来在别处用。

edit

edit函数可以溢出8字节堆块上的数据。

分析到这我们理一下攻击思路:

1、由于堆块大小可控,我们可以走orange,溢出top chunk 的size来制造一个unsorted bin,然后用这一次show得到libc地址。

2、之后用这一次free的UAF来打fastbin attack,伪造malloc hook附近的fake fast chunk,因为malloc hook附近有很多0x7f的libc地址,所以通常我们都能找到size为0x70的fake fast chunk,之后申请到malloc hook的堆块直接修改其为one_gadget即可。

完整exp 如下:

脚本攻击结果:

exp result

算是比较常规的堆题了。

By  Del0n1x

Keyboard


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