前言:下面就是我根据一些博客,做了一些自己的整理和补充,配合viki食用更加

一、利用前提

  1. 存在堆溢出、use-after-free 等能控制 chunk 内容的漏洞
  2. 漏洞发生于 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 能够成功利用主要有两部分的原因

  1. fastbin 的堆块被释放后 next_chunk 的 pre_inuse 位不会被清空
  2. 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相关推荐

  1. CTF(pwn) Fastbin Attack

    Fastbin Attack Fastbin Double Free 其中linux中会有一个校验对于double free 即会判断当前 fastbin链表的头部,是否和当前释放的fastbin 是 ...

  2. 好好说话之Fastbin Attack(1):Fastbin Double Free

    好像拖更了好久...实在是抱歉....主要是fastbin attack包含了四个部分,后面的例题不知道都对应着哪个方法,所以做完了例题才回来写博客.fastbin attack应该也会分四篇文章分开 ...

  3. linux堆内存管理深入分析,【技术分享】Linux堆溢出之Fastbin Attack实例详解

    1. 摘要 在近几年各大CTF比赛中,看到有很多次pwn类别题中出现fastbin攻击的情况,例如今年的defcon,RCTF,胖哈勃杯,0CTF final等等 ,fastbin attack是堆漏 ...

  4. 堆漏洞挖掘——fastbin attack漏洞

    一.核心思想 通过fastbins链的管理,达到目标地址(target)读写. 二.原理图解 fastbin存储freechunk的单链表结构: fastbins是如何存取fastchunk的,见文章 ...

  5. fastbin attack攻击中关于 malloc__hook

    概述 在程序中设置钩子,用来在malloc,,对其进行检查,可以看到对应的函数调用后的地址是什么. malloc__hook 也位于libc中的data段 它是一个地址 当调用 malloc 的时候 ...

  6. 好好说话之Tcache Attack(1):tcache基础与tcache poisoning

    进入到了Tcache的部分,我还是觉得有必要多写一写基础的东西.以往的各种攻击手法都是假定没有tcache的,从练习二进制漏洞挖掘的角度来看其实我们一直模拟的都是很老的环境,那么这样一来其实和真正的生 ...

  7. 好好说话之Tcache Attack(3):tcache stashing unlink attack

    tcache stashing unlink attack这种攻击利用有一个稍微绕的点,就是small bin中的空闲块挂进tcache bin这块.弯不大,仔细想想就好了 往期回顾: 好好说话之Tc ...

  8. 好好说话之Tcache Attack(2):tcache dup与tcache house of spirit

    这篇文章介绍了两种tcache的利用方法,tcache dup和tcache house of spirit,两种方法都是用how2heap中的例题作为讲解.由于tcache attack这部分的内容 ...

  9. pwn with glibc heap(堆利用手册)

    前言 ​ 对一些有趣的堆相关的漏洞的利用做一个记录,如有差错,请见谅. ​ 文中未做说明 均是指 glibc 2.23 ​ 相关引用已在文中进行了标注,如有遗漏,请提醒. 简单源码分析 ​ 本节只是简 ...

  10. linux堆上的内存可执行吗,pwn的艺术浅谈(二):linux堆相关

    这是linux pwn系列的第二篇文章,前面一篇文章我们已经介绍了栈的基本结构和栈溢出的利用方式,堆漏洞的成因和利用方法与栈比起来更加复杂,为此,我们这篇文章以shellphish的how2heap为 ...

最新文章

  1. 【深度学习】(8) CNN中的通道注意力机制(SEnet、ECAnet),附Tensorflow完整代码
  2. 【算法笔记】哈密顿问题
  3. java 性能检测工具 检测死锁等
  4. hive窗口函数分组排序并取第一个值_Hive(七)Hive分析窗口函数
  5. 酱油和gbt酱油哪个好_酱油不是越贵越好!找到这3个关键词,轻松避开勾兑酱油...
  6. 20 道 Spring Boot 面试题
  7. java开机自启动 Linux,java项目jar包开机自启(WINDOWS,Linux)
  8. android 9格式吗,Android Studio中关于9-patch格式图片的编译错误
  9. HDU1003——MAX SUM
  10. Leetcode--105. 从前序与中序遍历序列构造二叉树(Java)
  11. 在线内存泄露定位--memleak工具
  12. VB.net SP1 的兼容性问题
  13. 关于HTML+CSS3的一些笔记
  14. Mac osx 技巧
  15. windows入门Elasticsearch7.10(es)之3:本地集群搭建
  16. PHP168整站系统0DAY漏洞预警
  17. 上海宝付知识普及:个人信用到底多重要?
  18. Linux-新建用户/群组以及修改文件权限
  19. Oracle 中用 update 语句更新date, timestamp字段的格式
  20. 2020年8月编程语言排行榜出炉:C语言位居第一,Java、Python位居二三

热门文章

  1. Moon Modeler v1.6.5功能和特点
  2. GameFramework篇:打包需知
  3. ctf题库--天下武功唯快不破
  4. 快速掌握Photoshop简单用法
  5. php 与 html 的混合编程
  6. win10 删除右键显卡菜单项
  7. ValueError: `generator` yielded an element of shape (2,) where an element of shape (?, ?) was expect
  8. 用Python复现机器学习中12种经典降维算法
  9. 在html中加入网址,网页超链接怎么做,添加超链接网址的的详细步骤
  10. 时而迷茫,时而彷徨.