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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/595786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机怎么边看视频边记笔记或备忘录?

在这个信息爆炸的时代&#xff0c;我们经常需要通过看培训视频、听网课来不断充实自己。但是&#xff0c;手机屏幕那么小&#xff0c;如何才能在做笔记的同时&#xff0c;又不错过视频的每一个细节呢&#xff1f; 以前&#xff0c;我总是为此头疼。一手拿着手机看视频&#xf…

【嵌入式】About USB Powering

https://www.embedded.com/usb-type-c-and-power-delivery-101-power-delivery-protocol/https://www.embedded.com/usb-type-c-and-power-delivery-101-power-delivery-protocol/ Type-C接口有多强&#xff1f;PD协议又是什么&#xff1f;-电子发烧友网由于Type-C接口自身的强…

网站报错:nginx 413 Request Entity Too Large

问题描述 我在上传一个图片文件的时候&#xff0c;收到 Nginx 报错&#xff1a; 413 Request Entity Too Large 问题原因 Nginx 默认上传文件大小是 1 MB&#xff0c;如果上传过大文件&#xff0c;会报上面的错误。 解决方法 需要修改nginx的配置文件。以下是如何修改的步…

c++牛客总结

一、c/c语言基础 1、基础 1、指针和引用的区别 指针是一个新的变量&#xff0c;指向另一个变量的地址&#xff0c;我们可以通过这个地址来修改该另一个变量&#xff1b; 引用是一个别名&#xff0c;对引用的操作就是对变量本身进行操作&#xff1b;指针可以有多级 引用只有一…

【QT】return 和 break 是 C++ 中两个不同的关键字,它们在程序中有不同的用途。

return 和 break &#xff1a; return&#xff1a; 用于从函数中返回值&#xff0c;结束函数的执行&#xff0c;并将控制返回到调用函数的地方。在函数体中&#xff0c;当执行到 return 语句时&#xff0c;函数将立即退出&#xff0c;不再执行后续的语句。可以带有一个值&#…

2024年软考什么时候报名?一年考几次?

2024年上半年报名时间预计在3月中上旬开始&#xff0c;考试时间预计为5月25日。 报考条件及报名流程 报考条件&#xff1a; 1.遵守中华人民共和国宪法和各项法律&#xff0c;恪守职业道德&#xff0c;具有一定计算机技术应用能力的人员&#xff0c;均可根据本人情况报名参加…

【学生特惠|权威主办】2024年地理科学与遥感技术国际学术会议(ICGSRST 2024)

【学生特惠|权威主办】2024年地理科学与遥感技术国际学术会议(ICGSRST 2024) 2024 International Conference Geographic Science and Remote Sensing Technology(ICGSRST 2024) 一、【会议简介】 我们非常荣幸地邀请您参加2024年地理科学与遥感技术国际学术会议&#xff08;I…

Linux Perf 介绍

文章目录 前言 二、安装Perf三、二级命令3.1 perf list3.2 perf record/report3.3 perf stat3.4 perf top 四、使用火焰图进行性能分析4.1 下载火焰图可视化生成器4.2 使用perf采集数据4.3 生成火焰图参考资料 前言 perf是一款Linux性能分析工具&#xff0c;内置在Linux内核的…

第一讲_css三种编写方式

css三种编写方式 1. 行内样式2. 内部样式3. 外部样式3.1 编写css文件3.2 引入css文件 4. 三种方式的优先级 1. 行内样式 在标签的style属性中设置样式&#xff0c;多个样式属性之间用;隔开。 <html><div style"color: #000000; font-size: 50px">行内样…

使用XMLHttpRequest判断浏览器地址栏有没有访问成功

以下是使用XMLHttpRequest对象实现判断http://127.0.0.1:8080/index地址是否访问成功的示例代码&#xff1a; var xhr new XMLHttpRequest(); xhr.open(GET, http://127.0.0.1:8080/index); xhr.onreadystatechange function() {if (xhr.readyState 4) { // 请求完成if (xh…

virtualbox新建Ubuntu虚拟机

1、下载virtualbox 2、下载Ubuntu镜像 https://ubuntu.com/blog/desktop virtualbox安装好后&#xff0c;点击新建 选择linux类型 选择内存2~4G都行 选择先不添加虚拟硬盘 创建硬盘&#xff0c;管理点击虚拟介质管理 点击创建&#xff0c;选择创建类型为vmdk&#xff0…

xshell配色

xshell-设置命令行提示符&配色方案 更换配色&#xff1a; Protect Eyes.xcs [Protect Eyes] text00ff40 cyan(bold)93a1a1 text(bold)839496 magentadd3682 green80ff80 green(bold)859900 background042028 cyan2aa198 red(bold)cb4b16 yellowb58900 magenta(bold)6c71c…

腾讯云Centos9使用docker的方式安装APISIX

在虚拟机中安装Docker、Docker-compose 安装Docker 清除旧版本的docker yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 安装docker的依赖 yum install -y yum-utils device-ma…

Android 实现动态申请各项权限

在Android应用中&#xff0c;如果需要使用一些敏感的权限&#xff08;例如相机、位置等&#xff09;&#xff0c;需要经过用户的授权才能访问。在Android 6.0&#xff08;API级别23&#xff09;及以上的版本中&#xff0c;引入了动态权限申请机制。以下是在Android应用中实现动…

Linux下QT生成的(.o)、(.a)、(.so)、(.so.1)、(.so.1.0)、(.so.1.0.0)之间的区别

记录一下&#xff1a;Linux系统下编译动态库会生成多个.so文件 &#xff08;1&#xff09;Linux 下 QT 生成的&#xff08;.o&#xff09;、&#xff08;.a&#xff09;和&#xff08;.so&#xff09;三个文件的区别 &#xff08;.o&#xff09;就相当于windows里的obj文件&…

腾讯云域名外部入库流程

注册商是腾讯云&#xff0c;且在腾讯云管理的&#xff0c;请使用此教程外部入库。 如您的域名注册商是腾讯云但在聚名管理&#xff0c;请参考教程&#xff1a;https://www.west.cn/faq/list.asp?unid2539 在外部入库操作之前&#xff0c;请先登录腾讯云获取账号ID信息。…

CCF-B类 | 持续中科院1区TOP,Elsevier出版社,50年老刊!

【SciencePub学术】本期&#xff0c;小编给大家推荐的是一本Elsevier旗下&#xff0c;CCF-B类&#xff0c;影响因子为8.0的中科院1区TOP。其详情如下&#xff1a; 期刊简介 PATTERN RECOGNITION ISSN&#xff1a;0031-3203 E-ISSN&#xff1a;1873-5142 IF&#xff08;20…

使用Go语言编写高效的HTTP服务器

随着互联网的快速发展&#xff0c;HTTP服务器在Web开发中扮演着越来越重要的角色。而Go语言作为一种高效、并发性强的编程语言&#xff0c;为编写高性能的HTTP服务器提供了强大的支持。本文将探讨如何使用Go语言编写高效的HTTP服务器。 首先&#xff0c;我们需要了解Go语言的H…

Keras常用的激活函数详细介绍

在Keras中&#xff0c;常用的激活函数包括以下几种&#xff0c;我将为您详细介绍它们&#xff1a; 线性激活函数 (Linear)&#xff1a; 公式&#xff1a;(f(x) x)特点&#xff1a;线性激活函数实际上不对输入进行任何改变&#xff0c;它直接输出输入值。这通常在回归问题或神…

ChatGPT学习笔记——大模型基础理论体系

1、ChatGPT的背景与意义 近期,ChatGPT表现出了非常惊艳的语言理解、生成、知识推理能力, 它可以极好的理解用户意图,真正做到多轮沟通,并且回答内容完整、重点清晰、有概括、有条理。 ChatGPT 是继数据库和搜索引擎之后的全新一代的 “知识表示和调用方式”如下表所示。 …