How2heap--fastbin_dup_consolidate(by glibc-2.23)
fastbin_dup_consolidate.c 源码
调试分析
首先malloc两个0x40大小的fastbin chunk
同样申请0x40,加上0x10大小的chunk头,1字节的假大小(由于inuse位为1),实际大小为0x50
继续调试,对p1进行了free
p1被放进fastbin的空闲链表
然后再malloc一个0x400大小的largbin chunk
来看一下_int_malloc()源码
检查是否是fastbin范围
检查是否是smallbin范围
都不是就判断属于largebin
可以看到这里在获取了largebin的下表后会检查在分配区(av)内是否有fast chunk (本例有)
如果有则触发malloc_consolidate,对分配区内的chunk进行合并分类
查看consolidate源码
主要做的就是向前合并、向后合并相邻的chunk,如果相邻的是top chunk则并入top chunk,重复这三步直到fastbin链表为空,且合并后的chunk会放到unsortedbin中,除了top chunk
而这里在free完p1后malloc了一个0x400大小的chunk
0x400 = 1024,实际分配大小为0x400 + 0x10 = 0x410
大于1024字节的chunk会从largebins中申请
此时就会触发malloc_consolidate
p1就会从fastbin中被放到unsortedbin
之后会先在unsortedbin里面整理查找是否有符合大小的chunk,在这个过程中p1就会被分类到smallbin中(因为这里已经没有去fastbin的选择了)
这个过程我们没有跟踪所以我们查看heap的时候会看到0x40大小的p1 chunk被分到了smallbin中而不是unsortedbin
然后unsortedbin为空,仍未返回需要大小的chunk,则在largebin中查找是否有合适大小的chunk(这里就不是’exact fit’了),由于largebin此时为空,则在lastremainder中切割一块0x410大小的chunk出来返回给用户,并将剩下的lastremainder保存为top chunk
而由于在consolidate的过程中p1被移动到smallbin中了,fastbin现在没有记录p1
所以我们可以再次free p1
现在,我们就同时在fastbin和smallbin里有p1
我们就可以malloc p1两次
第一次malloc结束
p1从原来的fastbin记录变为了smallbin
第二次malloc结束
p1被malloc两次才变为allocated状态
此时就发生了 ‘double free’,两次申请的chunk指针指向同一块内存,
How2heap--fastbin_dup_consolidate(by glibc-2.23)相关推荐
- Centos7 glibc库升级到2.23(实测可行)
注意:Centos 为了稳定使用的glibc版本通常比较低.而安装有些程序需要依赖新版本.升级glibc需要慎重,因很多人升级失败后导致系统不能用了. 本人亲测,升级了多台机器,全部升级成功. gli ...
- Centos7 glibc库升级到2.23
注意:Centos 为了稳定使用的glibc版本通常比较低.而安装有些程序需要依赖新版本.升级glibc需要慎重,因很多人升级失败后导致系统不能用了. 本人亲测,升级了多台机器,全部升级成功. gli ...
- how2heap glibc 2.27
文章目录 fastbin dup fastbin reverse into tcache house of botcake house of einherjar house of force tcac ...
- pwn with glibc heap(堆利用手册)
前言 对一些有趣的堆相关的漏洞的利用做一个记录,如有差错,请见谅. 文中未做说明 均是指 glibc 2.23 相关引用已在文中进行了标注,如有遗漏,请提醒. 简单源码分析 本节只是简 ...
- how2heap 深入学习(2)
how2heap下载网址: 传送门 Glibc源码查看网址:传送门 参考书籍:CTF竞赛权威指南-pwn篇 测试环境:Ubuntu 16.04 Glibc版本:Ubuntu GLIBC 2.23-0u ...
- 借助gdb调试glibc代码学习House of Orange
转自: https://bbs.pediy.com/thread-251195.htm house_of_orange https://www.jianshu.com/p/1e45b785efc1 借 ...
- glibc-2.23学习笔记(一)—— malloc部分源码分析
glibc-2.23学习笔记(一)-- malloc部分源码分析 搭建Glibc源码调试环境 1.下载并解压glibc源码 2.配置gdb 3.编译测试程序 第一次调用 源码分析 __libc_mal ...
- glibc 知:ld.so
文章目录 1. 名称 2. 概要 3. 描述 3.1. 动态字符串标记 4. 选项 5. 环境 5.1. 安全执行模式 5.2. 环境变量 5.2.1. LD_ASSUME_KERNEL(自 glib ...
- linux下qt多个程序打包,解决Ubuntu下使用linuxdeployqt打包Qt程序问题
写了点Qt界面程序,然而发现很难移植到其他没有安装Qt环境的电脑上运行.查资料了解到,在windows上有windowsdeployqt程序,linux上有linuxdeployqt可以帮助我们快速打 ...
- 基于PaddleOCR实现AI发票识别的Asp.net Core应用
简要介绍 用户批量上传需要识别的照片,上传成功后,系统会启动Hangfire后台Job开始调用PaddleOCR服务返回结果,这个过程有点类似微服务的架构模型. PaddleOCR PaddleOCR ...
最新文章
- Nginx+Tomcat集群与负载均衡
- Eclipse与MyEclipse增强代码提示
- 为了OFFER,花了几个小时,刷下Leetcode链表算法题
- 质量三维论如何持续推进腾讯视频播放体验提升
- MATLAB函数随笔之计算篇
- 寒冬之下,移动开发没人要了, iOS 开发者该 何去何从?
- 网上看到的,关于测试用例编写粒度准则
- 动态口令 java_java动态口令登录实现过程详解
- Even better, if you don’t want to answer and
- P9:卷积神经网络的工程实践技巧
- 部门WIFI配置-防火墙-核心交换机和POE交换机
- PTA — 单词长度 (15 分)
- [渝粤教育] 广东-国家-开放大学 21秋期末考试建设工程法规10221k1
- python 身份证识别_Card-Ocr:身份证识别 OCR
- 新课改计算机论文,新课改中职计算机职业教育论文
- win10如何共享打印机_windows1064位系统如何连接window732位共享打印机
- python网络爬虫——robots协议
- 使用Python做饼图
- python爬贴吧回复_Python爬虫实践,获取百度贴吧内容
- 字节跳动高工面试:java高级程序员面试宝典蔡羽豆瓣