源代码

 1 #include <stdio.h>
 2 #include <stdint.h>
 3 #include <stdlib.h>
 4
 5 int main() {
 6   void* p1 = malloc(0x40);
 7   void* p2 = malloc(0x40);
 8   fprintf(stderr, "Allocated two fastbins: p1=%p p2=%p\n", p1, p2);
 9   fprintf(stderr, "Now free p1!\n");
10   free(p1);
11
12   void* p3 = malloc(0x400);
13   fprintf(stderr, "Allocated large bin to trigger malloc_consolidate(): p3=%p\n", p3);
14   fprintf(stderr, "In malloc_consolidate(), p1 is moved to the unsorted bin.\n");
15   free(p1);
16   fprintf(stderr, "Trigger the double free vulnerability!\n");
17   fprintf(stderr, "We can pass the check in malloc() since p1 is not fast top.\n");
18   fprintf(stderr, "Now p1 is in unsorted bin and fast bin. So we'will get it twice: %p %p\n", malloc(0x40), malloc(0x40));
19 }

运行结果

checksec

首先申请p1,p2两个0x40大小的内存,在fastbin大小范围内

之后释放p1

再申请了一个0x400字节的p3  属于large bin触发malloc_consolidate()

将fastbin中的p1移入small bin

此时p1不在fastbin头部

所以可以再次释放

释放后

fastbin 和 small bin中都有p1

再次申请两次都可以得到指向p1的内存

调试后得出上图,可知,先取出fastbin中的p1,再取出small bin中的p1

这就又造成了double free

转载于:https://www.cnblogs.com/pfcode/p/10989832.html

4.fastbin_dup_consolidate相关推荐

  1. how2heap的fastbin_dup_consolidate(包含sleepyholder)

    fastbin_dup_consolidate Column: Mar 28, 2021 昨日dasctf, 临时学会了house of orange, 但依旧爆零, 哎, 只能说自己不够努力 利用方 ...

  2. linux堆上的内存可执行吗,pwn的艺术浅谈(二):linux堆相关

    这是linux pwn系列的第二篇文章,前面一篇文章我们已经介绍了栈的基本结构和栈溢出的利用方式,堆漏洞的成因和利用方法与栈比起来更加复杂,为此,我们这篇文章以shellphish的how2heap为 ...

  3. linux 堆溢出 pwn 指南,新手科普 | CTF PWN堆溢出总结

    学习汇总 序言 自从加入RTIS交流群, 在7o8v师傅,gd大佬的帮助下,PWN学习之路进入加速度.下面是八周学习的总结,基本上是按照how2heap路线走的.由于八周内容全写,篇幅太长,这里只讲述 ...

  4. How2heap--fastbin_dup_consolidate(by glibc-2.23)

    fastbin_dup_consolidate.c 源码 调试分析 首先malloc两个0x40大小的fastbin chunk 同样申请0x40,加上0x10大小的chunk头,1字节的假大小(由于 ...

  5. how2heap-fastbin_dup_consolidate

    fastbin_dup_consolidate consolidate 过程 若 get_max_fast() 返回 0,则进行堆的初始化工作,然后进入第 7 步 从 fastbin 中获取一个空闲 ...

最新文章

  1. Linux的主要特性
  2. java如何使用elasticsearch
  3. 分支结构,循环结构,for循环,九九乘法表
  4. spring boot使用freemarker页面获取系统路径最简配置
  5. leetcode 322. Coin Change | 322. 零钱兑换(动态规划)
  6. 关于Android studio 3.0 Failure [INSTALL_FAILED_TEST_ONLY]安装失败的问题
  7. c语言函数fread的调用形式,C语言的问题,fread和fgets的区别是什么?
  8. android 开发艾特功能,Android Binder
  9. 对发表论文的深层次思考
  10. java怎么检测代码安全_foritfy代码安全审计、foritfy代码检测服务、java代码安全审计检测、C/C++语言代码安全审计检测...
  11. HTML 变形(transform)、转换(transition)和动画(animation)
  12. 字节码指令之对象的创建与访问指令
  13. D1-H哪吒 设置hdmi分辨率
  14. ORA-03113:通信通道的文件结尾-完美解决方案
  15. STM8L051低功耗实现
  16. 云通信-腾讯云,TLS独立模式公私钥生成
  17. 蔡徐坤一条微博转发过亿 幕后推手被判刑五年
  18. 以后在此写下自己的后博士时代吧SWE-SPHysics
  19. Elasticsearch 入门
  20. Class<?>和Class的区别

热门文章

  1. DSVNP原理以及相关配置
  2. 记录ECS Linux系统出现xmrig挖矿程序
  3. 王家林人工智能AI第19课:使用决策树在Social Network上构建汽车销售推荐系统老师微信13928463918
  4. 基于微信小程序的电影院票务系统设计与实现-计算机毕业设计源码+LW文档
  5. 强推!30个遥感数据下载网站整理分享
  6. 使用Composer安装项目时报错 Do not run Composer as root/super user!
  7. 霍金两问北京:人类的未来如何达到完美?我们为何探索另一星球?
  8. 面试 --- java 设计模式
  9. PDF转换成图片——11种方案
  10. (学习笔记)十大经典算法——K-means聚类算法