码迷,mamicode.com
首页 > 其他好文 > 详细

Double Free

时间:2017-07-19 01:07:14      阅读:522      评论:0      收藏:0      [点我收藏+]

标签:链表删除   img   UI   div   bsp   双向   blog   pre   钥匙   

0x00  漏洞的原理

Double Free其实就是同一个指针free两次。虽然一般把它叫做double free。其实只要是free一个指向堆内存的指针都有可能产生可以利用的漏洞。double free的原理其实和堆溢出的原理差不多,都是通过unlink这个双向链表删除的宏来利用的。只是double free需要由自己来伪造整个chunk并且欺骗操作系统。

0x01 Double利用思路

1.第一步

首先申请两块堆内存:

chunk1 = malloc(504)
chunk2 = malloc(512)

如下图:

技术分享

2.第二步

然后释放这两个堆

free(chunk1)
free(chunk2)

不过并没有释放这两个内存,chunk1和chunk2依然指向free之前的堆内存

3.第三步

 再申请一个新的堆

chunk3 = malloc(1024)

不过这个新的堆要时前面两个堆大小的和,所以系统会把之前分派的内存给返回。如下图

技术分享

4.第四步

在chunk3中我们构造一个伪chunk(fake_chunk),同unlink.我们也需要一个指向chunk1的指针,向chunk3中输入:

payload = (prev_size = 0) + (size = 0x1F8) + (fd = ptr - 0x0c) + (bk = ptr - 0x08) + ‘a‘*(0x1F8 - 0x10) + (prev_size = 0x1F8) + (size = 0x208)

如图所示:

技术分享

5.第五步

最后执行

free(chunk2)

这里就和unlink是一样的了,向后合并,最终ptr指向ptr - 0x0C,就可以对任意地址进行写操作了。

0x02 参考链接

Double Free浅析

看雪.Wifi万能钥匙 CTF 2017 第4题Writeup---double free解法

Double Free

标签:链表删除   img   UI   div   bsp   双向   blog   pre   钥匙   

原文地址:http://www.cnblogs.com/elvirangel/p/7203540.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!