-
-
[原创]2022susctf的happytree详细题解
-
发表于:
2022-3-7 22:58
12453
-
[原创]2022susctf的happytree详细题解
关键词: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.编辑
,原因: