欢迎光临散文网 会员登陆 & 注册

利用 unsorted bin泄漏 libc基址

2023-06-04 16:10 作者:载酒携兰  | 我要投稿

【定义】

因为unsorted bin是双向链表,所以第一个unsorted bin的bk也就指向了bin[1],如果我们能够打印出第一个unsorted bin的bk,也就相当于得到了bins[1]地址,而因为bins[1]在libc中,所以也就相当于得到了libc基址

【实现方法】

因为我们一般show_chunk是需要我们这个bin是allocated状态(也就是有p2chunk指向它),但想要有fd又需要我们将它free掉

这在UAF作为起点的情况下很容易实现,但若是在堆越界写的起点下,就要采用以下方法才能实现:

我们可以通过操作先实现让两个p2chunk指向同一个unsorted大小的allocated块,然后再free掉一个p2chunk,具体操作如下:

1、我们先创建以下这4个块:

从左到右是低地址到高地址

女神想要不止被p2chunkD插还想同时再被p2chunkA插,所以就要女生的工具人C出手,从工具人的工具人1号手里抢走p2chunkA送给女神,而这个抢走的过程又需要借助工具人的工具人二号对工具人C进行越界写来实现抢走

其中因为女神要用来实现unsorted bin泄漏 libc基址,所以她的大小必须是unsorted bin范围的

大概思路就是这样,然后我们开始:

2、现在我们先free掉两个块

free(p2chunkC)

free(p2chunkA)

让工具人的工具人一号以为他要被工具人C宠幸了

3、然后我们让工具人的工具人2号溢出覆写工具人C,覆写fd让它指向女神

没想到吧,一号,你只是个用来达成我目的的工具人罢了!

这样一来,相比于直接free(p2chunkD)会直接把p2chunkD置零掉,这么搞就不仅相当于free掉了D,又没有消耗掉p2chunkD而是作为替代地消耗掉了p2chunkA

4、然后我们现在再malloc两次

就会变成这样:

这里注意以下,最好再来个工具人夹在工具人C和女神中间,先把女神覆写为fastbin大小,再malloc女神出来,再覆写成unsorted bin大小。因为malloc时想要回收利用一个unsorted bin的规则有点复杂

5、最后,我们再free(p2chunkD),女神被free为unsorted bin,此时它就自动被设置了bk,但又因为还有一个p2chunkA指向它,所以我们这时print(p2chunkA),就可以打印出bk的值也就是泄漏libc基址啦~

至于其他那些工具人呢?哦,他们已经没用了不用理他们,这就是甜构的下场8


利用 unsorted bin泄漏 libc基址的评论 (共 条)

分享到微博请遵守国家法律