首页
社区
课程
招聘
[原创]2022susctf的happytree详细题解
发表于: 2022-3-7 22:58 12453

[原创]2022susctf的happytree详细题解

2022-3-7 22:58
12453

关键词:2.27-1.2,二叉排序树,double free

程序描述

add

通过对于add函数的分析,我画出了他的结构体,如下:

delete

可以看出free掉堆块后,并没有置零指针,所以存在uaf漏洞,可以利用此漏洞来double free.。

漏洞利用

前置知识:二叉排序树中,删除某一结点有两种方法:1.用此结点的前驱结点相互置换。2.用此结点的后驱结点相互置换。

从delete函数中的sub_f72函数中可以得出。程序是找到第一个右叉树的左边到底的结点,也就是后驱结点,从而进行内容交换,然后释放结点的。(这部分后面会有详细解释)

-------------------------------------------------------------------------------------------------------------------------------------

1.首先进行libc地址的泄露,我们先申请8个chunk,然后释放掉。再申请出来后,show()出最后一个chunk,即可泄露出Libc地址。

注意一点就是释放堆块后,再次申请时,需要从大到小申请。因为从从小到大申请时,程序会进入到第一个if语句当中,因为我们从小到大申请的,所以a2的右子树有地址。但是由于a2的右子树的堆块已经释放掉了,所以程序会报错。从大到小申请时,a2的左子树是空的,所以就会跳到第一个else,执行申请新堆块的操作。

2.利用二叉排序树的删除特性和指针没有置零,来进行double free的构造。改free_hook进行get shell

首先构造二叉树

   


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2022-4-17 21:44 被Nirvana.编辑 ,原因:
上传的附件:
收藏
免费 4
支持
分享
最新回复 (1)
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
要怎样才可以联系到作者
2022-4-11 06:43
0
游客
登录 | 注册 方可回帖
返回
//