House of Spirit(fastbin)

0x01 fastbin

fastbin所包含chunk的大小为16 Bytes, 24 Bytes, 32 Bytes, … , 80 Bytes。当分配一块较小的内存(mem<=64 Bytes)时,会首先检查对应大小的fastbin中是否包含未被使用的chunk,如果存在则直接将其从fastbin中移除并返回;否则通过其他方式(剪切top chunk)得到一块符合大小要求的chunk并返回。

而当free一块chunk时,也会首先检查其大小是否落在fastbin的范围中。如果是,则将其插入对应的bin中。顾名思义,fastbin为了快速分配回收这些较小size的chunk,并没对之前提到的bk进行操作,即仅仅通过fd组成了单链表而非双向链表,而且其遵循后进先出(LIFO)的原则。

举例来说,假设目前大小为40 Bytes的fastbin中已经包含了一个位于0x0804a000的chunk。

当另一块大小为40 Bytes,位于0x0804a028的chunk被free时,其被放至同一fastbin中。具体地,0x0804a028成为该fastbin的首个chunk,之前的首个chunk 0x0804a000,则被保存于0x0804a028的fd中。

接下来,调用malloc分配一块32 Bytes的内存(实际大小为40 Bytes的chunk)时,该fastbin中的首个chunk, 0x0804a028会被移除并返回。此时该fastbin的首个chunk变为0x0804a028的fd内容,即0x0804a000。此时便恢复到之前的状态。

当然,在实际执行分配或回收时,还会对目标chunk的大小进行检查。但如果能够修改fd内容,那么在随后的malloc时便可能将修改后的地址返回,这进一步往往能够造成向任意地址写任意内容(write-anything-anywhere)的后果。

0x02 House of Spirit

House of Spirit实现的最终效果,也是使攻击者构造的伪chunk通过fastbin被malloc返回。House of Spirit是通过篡改free的目标地址,将伪chunk放入fastbin,进而使随后的malloc返回此伪chunk

0x03 参考

https://sploitfun.wordpress.com/2015/02/10/understanding-glibc-malloc/

浅析Linux堆溢出之fastbin

参考题目:RCTF2015-shaxian

时间: 2024-10-25 13:39:04

House of Spirit(fastbin)的相关文章

Linux下fastbin利用小结——fd覆盖与任意地址free

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~ 8

2014-hack-lu-oreo 对技巧house of spirit

目录 常规检查 逆向分析 Add 函数 Show 函数 Order 函数 Leave 函数 show 函数 利用思路 利用过程 泄露 libc 基址 伪造区块到 0x804a2a0 覆盖 got 表为 system 拿shell exp脚本 成功 get shell 内容来源 常规检查 ??没有开启 RELRO ,意味我们可以修改 got 表地址. 逆向分析 What would you like to do? 1. Add new rifle 2. Show added rifles 3. O

使用BOOST.SPIRIT.X3的RULE和ACTION进行复杂的语法制导过程

Preface 上一篇简述了boost.spirit.x3的基本使用方法.在四个简单的示例中,展示了如何使用x3组织构造一个语法产生式,与源码串匹配并生成一个综合属性.这些简单的示例中通过组合x3库中的基本语法单元,创建了一些复杂语法单元,也就是非终结符.但这些示例中的语法单元完成的事情还不够,它们只能配合phrase_parse函数告诉我们,与源码是否匹配:并且通过一个简单赋值操作返回一个综合属性.如果我想要在匹配成功的时候完成一些用户自定义的Action,如何完成这种需求?此外,仅使用基本语

腾讯移动Web整体解决方案Spirit

Spirit(勇气号),美国航天局NASA派往Mars(火星)的第一艘探测器.移动Web开发是一块新的领域,甚至有很多坑,这一点与人类从未踏上的Mars(火星)相似.为了避免开发者重复遇到相同的问题,我们创建了Mars项目(view on Github),收集与归纳移动Web开发中常见的问题. 快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中. <HTML开发Mac OS App 视频教程> 土豆网同步更新:http://www.tud

【溢出利用技巧】house of spirit friendly stack overflow

学习了一下L-CTF中介绍的一个栈溢出利用技巧,记录一下. 样例代码如下: /*  * blackngel's vulnerable program slightly modified by gb_master  */ #include <stdio.h> #include <string.h> #include <stdlib.h> void fvuln(char *str1, int age) {   char *ptr1, name[32];   int loca

OIL EXTRACTION PLANT responsibility enterpriese spirit should be promoted

OIL EXTRACTION PLANT : OIL EXTRACTION PLANT responsibility enterpriese spirit should be promoted As OIL EXTRACTION PLANT consumption has risen year by year, the self-sufficiency rate is low, and in recent ten years, the number of imported oil and oil

Spirit - 腾讯移动 Web 整体解决方案

Spirit 并不是一个具体的框架或者工具,但是她是移动端一系列解决方案的整合与聚拢.她是腾讯 Alloyteam 开发团队在移动开发项目中通过大量实践.归纳.总结提炼而成,最终沉淀下来的一个体系,真正建立一套移动 Web 开发的集成解决方案.Spirit 主要由5个部分组成:移动 Web 开发规范.JM.JMUI.Mobug.Mars. 官方网站 您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果[附源码] 分享35个让人惊讶的 CSS3 动画效果演示 十分惊艳的8个 HTML5

boost spirit 语法解析

使用spirit能很方便的解析自定义的语法规则,在他的文档中也说明了spirit与regex还有其他库的不同点.灵活,伸缩性好,可以用来搭建小的语法解析器也可以用来开发大型编译器等等. 定义语法规则之前首先要了解一下Extended Backus-Normal Form (EBNF) EBNF可以定义一下生成合法字符串的公式,例如: 例1: rule1 = "0" | "1" | "2" | "3". rule2 = &quo

boost spirit 解析字符串 (一)

项目中需要解析一段sql 语句,然后各种百度,看了一些文章,然后就头晕了,根本不知道他们在讲啥,感觉好像非常深奥的一样.感觉他们讲的太专业了,不能通俗易懂.所以把自己学习的记录下来,以便后面查看 1) 要解析一个字符串,首先你得要有一些规则吧,比如说字符串按照逗号分割,取出字符串中的特定字符串,或者把字符串中的整数取出来,这些我们都称为规则.在boost 库中有一个专门对应的模版类.翻译成中文名字也是"规则" boost::spirit::rule<>. 2)有了规则就可以