how2heap-2.23-03-fastbin_dup_consolidate

2024-01-04 16:44

本文主要是介绍how2heap-2.23-03-fastbin_dup_consolidate,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>int main() {void* p1 = malloc(0x10);strcpy(p1, "AAAAAAAA");void* p2 = malloc(0x10);strcpy(p2, "BBBBBBBB");fprintf(stderr, "申请两个 fastbin 范围内的 chunk: p1=%p p2=%p\n", p1, p2);fprintf(stderr, "先 free p1\n");free(p1);void* p3 = malloc(0x400);fprintf(stderr, "去申请 largebin 大小的 chunk,触发 malloc_consolidate(): p3=%p\n", p3);fprintf(stderr, "因为 malloc_consolidate(), p1 会被放到 unsorted bin 中\n");free(p1);fprintf(stderr, "这时候 p1 不在 fastbin 链表的头部了,所以可以再次 free p1 造成 double free\n");void* p4 = malloc(0x10);strcpy(p4, "CCCCCCC");void* p5 = malloc(0x10);strcpy(p5, "DDDDDDDD");fprintf(stderr, "现在 fastbin 和 unsortedbin 中都放着 p1 的指针,所以我们可以 malloc 两次都到 p1: %p %p\n", p4, p5);
}

先分配两个chunk

在这里插入图片描述
第一个chunk用于演示malloc_consolidate后的double-free
第二个chunk用于观察prev_inuse,防止与top chunk合并

释放第一个chunk a

在这里插入图片描述
现在第一个chunk被放置到fastbin中

稍等一下,先看一下main_arean->bins初始化数据的含义

在这里插入图片描述

申请一个large chunk

为了分配这个large chunk。因为large chunk需要的空间较大,会尝试将fastbin中的chunk合并转移到unsortedbin,并将相邻下一chunk的pre_in_use置0。后面遍历unsortedbin得不到使用,就会放到smallbin中

  else{idx = largebin_index (nb);if (have_fastchunks (av))malloc_consolidate (av);}

第一个chunk malloc(10)已不在fastbin头部了,同时chunk a链入了small bin中
在这里插入图片描述

再次释放第一个chunk a

因为这个chunk的大小属于fastbin,且已不在fastbin头部,可以被释放。
被释放到fastbin中,第一个chunk fd数据被清理掉(这里不影响small bin的链接)。
在这里插入图片描述
现在small bin和fastbin都存储了chunk a,可以申请申请两次。

利用场景

在通过申请large chunk时,会触发malloc_consolidate,会将chunk a放入到unsorted bin->small bin,此时下一个chunk b的prev_inuse清零
之后将chunk a进行double-free,再申请回来,由于不是从small bin申请回来的,所以下一个chunk b的prev_inuse还是零
现在就可以在chunk a中伪造chunk,释放下一个chunk b,从而产生unlink,通过unlink进行利用

源码分析可以看这里:https://www.lazenca.net/display/TEC/fastbin_dup_consolidate%5BKorean%5D±+Restoring
相关pwn题:
https://blog.csdn.net/seaaseesa/article/details/105856878
https://blog.csdn.net/weixin_44309300/article/details/131027082

这篇关于how2heap-2.23-03-fastbin_dup_consolidate的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/569956

相关文章

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

Vue day-03

目录 Vue常用特性 一.响应更新 1. 1 v-for更新监测 1.2 v-for就地更新 1.3 什么是虚拟DOM 1.4 diff算法更新虚拟DOM 总结:key值的作用和注意点: 二.过滤器 2.1 vue过滤器-定义使用 2.2 vue过滤器-传参和多过滤器 三. 计算属性(computed) 3.1 计算属性-定义使用 3.2 计算属性-缓存 3.3 计算属

【SpringMVC学习03】-SpringMVC的配置文件详解

在SpringMVC的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件。其实真正需要程序员开发的就两大块:一个是Handler,一个是jsp。 在springMVC的入门程序中,SpringMVC的核心配置文件——springmvc.xml为: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http:

浙大数据结构——03-树1 树的同构

这道题我依然采用STL库的map,从而大幅减少了代码量 简单说一下思路,两棵树是否同构,只需比较俩树字母相同的结点是否同构,即是否左==左,右==右或者左==右,右==左。 1、条件准备 atree和btree是存两个数结点字母,第几个就存输入的第几个结点的字母。 map通过结点的字母作为键,从而找到两个子节点的信息 都要用char类型 #include <iostream>#inc

python+selenium2轻量级框架设计-03读取配置文件

任何一个项目,都涉及到了配置文件和管理和读写,Python支持很多配置文件的读写,这里介绍读取ini文件。 以读取url和浏览器作为例子 #浏览器引擎类import configparser,time,osfrom selenium import webdriverfrom framework.logger import Loggerlogger = Logger(logger='

python+selenium2学习笔记unittest-03断言

断言的方法网上归纳的很多主要有以下这些 断言语法解释assertEqual(a, b) 判断a==bassertNotEqual(a, b)判断a!=bassertTrue(x)bool(x) is TrueassertFalse(x)bool(x) is FalseassertIs(a, b)a is bassertIsNot(a, b) a is not bassertIsNone(x) x

C++入门(03)萌新问题多(一)(未完待续)

文章目录 1. 一闪而过使用system("pause")使用cin.get() 1. 一闪而过 .exe 在用户计算机上运行后“一闪而过”,是因为控制台程序没有专门的用户图形界面,程序执行完所有代码后默认完成任务自动关闭 使用system(“pause”) 在程序的结尾处加入 system(“pause”),程序在执行完毕后等待用户按任意键继续。这是最简单的方法。 使

三文带你轻松上手鸿蒙的AI语音03-文本合成声音

三文带你轻松上手鸿蒙的AI语音03-文本合成声音 前言 接上文 三文带你轻松上手鸿蒙的AI语音02-声音文件转文本 HarmonyOS NEXT 提供的AI 文本合并语音功能,可以将一段不超过10000字符的文本合成为语音并进行播报。 场景举例 手机在无网状态下,系统应用无障碍(屏幕朗读)接入文本转语音能力,为视障人士提供播报能力。类似微信读书,可以实现将文章内容通过语音朗读,可以

读软件设计的要素03概念的组合

1. 概念的组合 1.1. 概念不像程序那样,可以用较大的包含较小的 1.1.1. 每个概念对用户来说都是平等的,软件或系统就是一组串联运行的概念组合 1.2. 概念是通过操作来同步组合的 1.2.1. 同步并不增加新的概念操作,但会限制已有的操作,从而消除一些独立概念可能会出现的操作序列 1.3. 在自由组合中,概念彼此独立,仅受一些记录的约束,这些约束是为了确保概念对事物观点的一