首页 > 代码库 > Double Free
Double Free
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。