fastbin attack
前言:下面就是我根据一些博客,做了一些自己的整理和补充,配合viki食用更加
一、利用前提
- 存在堆溢出、use-after-free 等能控制 chunk 内容的漏洞
- 漏洞发生于 fastbin 类型的 chunk 中
二、利用原理
- fastbin是通过单链表来存储释放堆块的,并且由 fastbin 管理的 chunk 即使被释放,其 next_chunk 的 prev_inuse 位也不会被清空。
- 其实核心漏洞的演示就如下面所示
int main(void){void *chunk1,*chunk2,*chunk3;chunk1=malloc(0x30);chunk2=malloc(0x30);chunk3=malloc(0x30); //进行释放free(chunk1);free(chunk2);free(chunk3);return 0;}
- fastbins的链表就会被构造成下面这样
最最最核心的思想
这个free chunk和 malloc chunk都是我们的chunk1(注意它的双重身份)(其实就是两个指针指向了同一个地址)我们可以通过它malloc chunk的身份修改它user段的第一个字段也就是free chunk中的bk指针所在位置,可以达到在不同位置(bss、栈等)分配chunk,期间需要绕过一些检测。
三、四种姿势
1、Fastbin Double Free
1.1介绍
Fastbin Double Free 是指 fastbin 的 chunk 可以被多次释放,因此可以在 fastbin 链表中存在多次。这样导致的后果是多次分配可以从 fastbin 链表中取出同一个堆块,相当于多个指针指向同一个堆块,结合堆块的数据内容可以实现类似于类型混淆 (type confused) 的效果。
Fastbin Double Free 能够成功利用主要有两部分的原因
- fastbin 的堆块被释放后 next_chunk 的 pre_inuse 位不会被清空
- fastbin 在执行 free 的时候仅验证了 main_arena 直接指向的块,即链表指针头部的块。对于链表后面的块,并没有进行验证。
1.2演示
这里printf输出的就是bss_chunk段的地址
1.3解释
图片中字有点小师傅们页面放大看一下
注意点1
这是我理解的4次malloc所分配的chunk,我们主要是为了获得第4次malloc的chunk(第一次是为了修改fd,中间两次是把fastbin中的chunk分配掉),前三次分配的chunk都是fastbin中的,第四次由于fd被修改,使得堆管理器误以为fastbin中还有这么个玩意,然后顺着被修改的fd找到了chunk_b的位置,这次演示是修改倒了bss段。
注意点2
值得注意的是,我们在 main 函数的第一步就进行了bss_chunk.size=0x21;的操作,这是因为_int_malloc 会对欲分配位置的 size 域进行验证,如果其 size 与当前 fastbin 链表应有 size 不符就会抛出异常。
2、House Of Spirit
1.1介绍
1.1.1该技术的核心
在于在目标位置处伪造 fastbin chunk,并将其释放,从而达到分配指定地址的 chunk 的目的。
1.1.2需要绕过的检测
- fake chunk 的 ISMMAP 位不能为 1,因为 free 时,如果是 mmap 的 chunk,会单独处理。
- fake chunk 地址需要对齐, MALLOC_ALIGN_MASK
- fake chunk 的 size 大小需要满足对应的 fastbin 的需求,同时也得对齐。
- fake chunk 的 next chunk 的大小不能小于 2 * SIZE_SZ,同时也不能大于av->system_mem 。
- fake chunk 对应的 fastbin 链表头部不能是该 fake chunk,即不能构成 double free 的情况。
1.2演示
github上搜how2heap上面会有相关的演示方式,这里就直接附带viki的链接看一下
Fastbin Attack - CTF Wiki
1.3解释
注意点1
关键就是要让我们修改的目标地址(不可控区域)的前后内容可以修改以达到绕过检测的目的
(骗堆管理器觉得我们要修改的区域是一个chunk
这里的不可控区域多为函数指针或者或返回地址等
3、Alloc to Stack和Arbitrary Alloc
这个和上面两种的思路差不多,核心都是修改到一个你想要的地方
四、参考博客
Fastbin Attack - CTF Wiki
【技术分享】堆之House of Spirit - 安全客,安全资讯平台
好好说话之Fastbin Attack(4):Arbitrary Alloc_hollk的博客-CSDN博客
fastbin attack相关推荐
- CTF(pwn) Fastbin Attack
Fastbin Attack Fastbin Double Free 其中linux中会有一个校验对于double free 即会判断当前 fastbin链表的头部,是否和当前释放的fastbin 是 ...
- 好好说话之Fastbin Attack(1):Fastbin Double Free
好像拖更了好久...实在是抱歉....主要是fastbin attack包含了四个部分,后面的例题不知道都对应着哪个方法,所以做完了例题才回来写博客.fastbin attack应该也会分四篇文章分开 ...
- linux堆内存管理深入分析,【技术分享】Linux堆溢出之Fastbin Attack实例详解
1. 摘要 在近几年各大CTF比赛中,看到有很多次pwn类别题中出现fastbin攻击的情况,例如今年的defcon,RCTF,胖哈勃杯,0CTF final等等 ,fastbin attack是堆漏 ...
- 堆漏洞挖掘——fastbin attack漏洞
一.核心思想 通过fastbins链的管理,达到目标地址(target)读写. 二.原理图解 fastbin存储freechunk的单链表结构: fastbins是如何存取fastchunk的,见文章 ...
- fastbin attack攻击中关于 malloc__hook
概述 在程序中设置钩子,用来在malloc,,对其进行检查,可以看到对应的函数调用后的地址是什么. malloc__hook 也位于libc中的data段 它是一个地址 当调用 malloc 的时候 ...
- 好好说话之Tcache Attack(1):tcache基础与tcache poisoning
进入到了Tcache的部分,我还是觉得有必要多写一写基础的东西.以往的各种攻击手法都是假定没有tcache的,从练习二进制漏洞挖掘的角度来看其实我们一直模拟的都是很老的环境,那么这样一来其实和真正的生 ...
- 好好说话之Tcache Attack(3):tcache stashing unlink attack
tcache stashing unlink attack这种攻击利用有一个稍微绕的点,就是small bin中的空闲块挂进tcache bin这块.弯不大,仔细想想就好了 往期回顾: 好好说话之Tc ...
- 好好说话之Tcache Attack(2):tcache dup与tcache house of spirit
这篇文章介绍了两种tcache的利用方法,tcache dup和tcache house of spirit,两种方法都是用how2heap中的例题作为讲解.由于tcache attack这部分的内容 ...
- pwn with glibc heap(堆利用手册)
前言 对一些有趣的堆相关的漏洞的利用做一个记录,如有差错,请见谅. 文中未做说明 均是指 glibc 2.23 相关引用已在文中进行了标注,如有遗漏,请提醒. 简单源码分析 本节只是简 ...
- linux堆上的内存可执行吗,pwn的艺术浅谈(二):linux堆相关
这是linux pwn系列的第二篇文章,前面一篇文章我们已经介绍了栈的基本结构和栈溢出的利用方式,堆漏洞的成因和利用方法与栈比起来更加复杂,为此,我们这篇文章以shellphish的how2heap为 ...
最新文章
- [译] 这可能是 2018 年最好的一篇 PHP 性能测评(包含 5.6 到 7.2,以及 HHVM)
- python科学计算笔记(十一)pandas中date_range生成指定日期
- 小技巧:让linux程序在后台运行
- SVN中“txn-current-lock:拒绝访问”错误
- git maven 一键部署_Jenkins Git Maven搭建自动化部署项目环境 邮件通知
- 排序算法之---堆排序(很重要的一个结构,新手入门必备)
- 百度网盘直接解析高速下载文件源码
- watch gt3 鸿蒙,华为Watch3有什么功能-华为Watch3功能介绍
- tensorflow没有这个参数_内存频率越高越好?如果不看这个参数,内存频率再高也没有用...
- 2015年4月7号的日志
- bat管理mstsc 远程桌面连接
- 网络协议从入门到底层原理(9)HTTP/1.1的升级改进(HTTP/2、HTTP/3)
- python实现电脑程序自动化_python基于pywinauto实现PC客户端自动化
- 《Lua程序设计》第7章 迭代器与泛型for 学习笔记
- 湖北省荆州市谷歌高清卫星地图下载
- bandizip修改压缩文件内容_BandiZip解压添加压缩文件教程
- 百晓生兵器谱之公有云排名
- excel 删除重复项_在Excel 2013列表中删除重复项
- Java 案例:珠穆朗玛峰的高度
- Windows 7下vc2010编译使用redis 3.0
热门文章
- Raspberry Pi Zero W 安装配置
- raspberry pi设置静态IP地址
- 计算机主板型号进bios,hp主板进入bios的方法(电脑进入BIOS的两种实用方法)
- linux双机热备软件 mysql,Linux Mysql 双机热备安装详解
- (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
- 按键精灵 获取网页flash游戏 句柄 以360浏览器为例
- 报错:Container killed by YARN for exceeding memory limits
- YarnAllocator:Container killed by YARN for exceeding memory limits. spark.yarn.executor.memoryOverhe
- 那些所倚靠的利器记载
- 不得不学,从零到一搭建ELK日志,Docker环境下部署 logstash工具