Fastbin attack&&Double free和Unsortbin leak的综合使用

今天做一个综合题目,包括利用Fastbin attack实现多指针指向一个地址,以及利用Unsortbin leak泄露libc基地址和修改__malloc_hook地址为one_gadget

题目是buuctf上面的一道题目,题目链接 https://buuoj.cn/challenges#babyheap_0ctf_2017

checksec看一下保护

太绿了.....保护全开,不过对于堆题目这也狠正常

那么就64位ida载入

也是有一个菜单和一些功能函数

一个一个看

那么第一个就是申请多大的chunk没有对其赋值

第二个问题来了,没有对size检查,那么可以进行溢出修改到别的chunk

第三个函数把指针什么的都置为0了,那么就没有UAF了

第四个函数可以打印出chunk的内容

仔细检查程序,发现并没有后门函数,那么现在思路是看看能不能能泄露libc,把一个函数替换成one_gadget得到shell

这里Unsortbin leak 可以泄露出libc地址,为什么呢?

Unsortbin leak原理:

当只有一个unsortbin被free的时候,它的fd、bk指向一个指针,这个指针指向top chunk地址,这个指针保存在main_arena+0x58偏移处,而main_arena是libc的data段中,是全局静态变量,所以偏移也是固定的,根据这些就可以计算出libc的基地址了

那么要想把它打印出来还不行,因为我们不能打印已经free的chunk(指针置为0了),但是因为是64位的chunk,如果要利用打印上一个chunk来打印这个chunk的内容,那也会有很多的\x00来进行截断,所以也是行不通的,那么我们可以找一个指针指向这个已经free的unsortbin,然后打印这个指针对应的chunk,问题似乎就解决了,那么该怎么做到呢?

如果我们可以利用Fastbin attack先将其加入fastbin 链中然后就有了一个指向它的指针,然后再malloc回来再将他改回原来的大小,再次free得到unsortbin,再打印刚刚指向它的chunk就得到main_arena+0x58处的地址了!

效果如下

可以看见chunk2成功指向chunk4

这个时候我们改变它的size为0x21因为malloc fastbin 有检查, chunksize 必须与相应的 fastbin_index 匹配,所以我们覆盖 chunk 4 的 size 为 fastbin 大小来通过检查

效果如下

chunk4变成了fastbin

再次malloc两个大小为0x10的chunk将这两个chunk2和chunk4拿出来,然后再进行修改chunk size大小为0x91再次申请0x80大小chunk(申请到chunk4)然后再次进行free得到unsortbin

那么就可以得到libc基地址,和one_gadget地址

效果如下

之后我们申请0x60大小chunk将unsortbin进行分割,使其进入fastbin,然后伪造距离__malloc_hook较近的假的chunk来修改__malloc_hook,这个地方一般取__malloc_hook-35这个地方的size比较大而且再fastbin范围内(我本地是0x74)

我们再次修改fd指针

效果如下

再次申请两个大小为0x60的chunk即可申请到我们设置的fakechunk然后修改__malloc_hook为one_gadget就好了,值得注意的是,找的的one_gadget可以有一点点差别,因为libc分为不同的小版本,不同的版本有区别,我们可以把找到的one_gadget加0x10或者减去0x10再试试

最后看看我们做的所有工作

总的来说这题的难度还是不小的,很需要综合能力

Fastbin attack&&Double free和Unsortbin leak的综合使用的更多相关文章

  1. Fastbin attack——Double Free

    ptmalloc ptmalloc的基本思路是将堆上的内存区域划分为多个chunk,在分配/回收内存时,对chunk进行分割.回收等操作.在32位系统下,chunk头的大小为8 Bytes,且每个ch ...

  2. Fastbin attack

    Fastbin Attack 暂时接触到了两种针对堆分配机制中fastbin的攻击方式,double free和house of spirit Double free 基本原理 与uaf是对free之 ...

  3. Fastbin attack 总结

    Fastbin attack 本文参考了ctf-wiki 和glibc 要了解fastbin attack,我们先要了解fastbin的机制.由于libc2.26后加入了tcache机制,我们这里就只 ...

  4. fastbin attack学习小结

    fastbin attack学习小结   之前留在本地的一篇笔记,复习一下. 下面以glibc2.23为例,说明fastbin管理动态内存的细节.先看一下释放内存的管理: if ((unsigned  ...

  5. 胖哈勃杯Pwn400、Pwn500详解

    概述 这次的胖哈博杯我出了Pwn400.Pwn500两道题目,这里讲一下出题和解题的思路.我个人感觉前两年的Pwn题更多的是考察单一的利用技巧,比我这有个洞怎么利用它拿到权限.但是我研究了一些最近的题 ...

  6. HITCON-Training-Writeup

    HITCON-Training-Writeup 原文链接M4x@10.0.0.55 项目地址M4x's github,欢迎star~ 更新时间5月16 复习一下二进制基础,写写HITCON-Train ...

  7. Buuctf刷题:部分

    get_started_3dsctf_2016 关键词:ROP链.栈溢出.mprotect()函数 可参考文章(优质): https://www.cnblogs.com/lyxf/p/12113401 ...

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

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

  9. off by null 实战

    前言 off by null 是一个比较有意思的技术 下面通过 hctf2018 的 heapstrom_zero 实战一波. 相关文件(exp, 题目)位于 https://gitee.com/ha ...

  10. House of Roman 实战

    前言 这是前几天国外一个 老哥 提出的一种思路 ,学习了一下感觉其中的堆布局的手法还不错,做个分享与记录. 这种利用手法的主要特点是不需要 leak libc的地址,通过 堆内存的布局 和 堆相关的漏 ...

随机推荐

  1. Prompt进阶系列4:LangGPT(构建高性能Prompt实践指南)--结构化Prompt

    Prompt进阶系列4:LangGPT(构建高性能Prompt实践指南)--结构化Prompt 1.结构化 Prompt简介 结构化的思想很普遍,结构化内容也很普遍,我们日常写作的文章,看到的书籍都在 ...

  2. 《Effective Java》笔记 4~5

    4. 类和接口 15. 使类和成员的可访问性最小化 把API与实现清晰地隔离开,组件间通过API进行通信,不需要知道其他模块的内部工作情况,这称为:实现信息隐藏或封装 解耦系统中的各个组件 尽可能地使 ...

  3. linux 安装mysql8.0.11

    1.使用系统的root账户 2.切换到/use/local 目录下 3.下载mysql ?wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysq ...

  4. 感悟:FPGA的串行及并行设计思路

    前言 FPGA设计过程中, 会遇到大量的串行转并行或者并行转串行的问题; 这些问题主要体现在FPGA对于速度和面积的均衡上; 一般而言, FPGA使用并行的设计可以提高处理的速度, 消耗更多的资源; ...

  5. 金仓数据库kbcrypto 插件实现sm加密算法

    首先介绍一下sm4 算法 SM4 算法是对称加密算法,国标 GB/T 32907 对 SM4 对称加密算法进行了详细描述.SM4 算法密钥长度固定为128bit,加密解密采用相同的密钥,加解密速度较快 ...

  6. WPF如何封装一个可扩展的Window

    前言 WPF中Window相信大家都很熟悉,有时我们有一些自定义需求默认Window是无法满足的,比如在标题栏上放一些自己东西,这个时候我们就需要写一个自己的Window,实现起来也很简单,只要给Wi ...

  7. 解密数仓的SQL ON ANYWHERE技术

    本文分享自华为云社区<GaussDB DWS的SQL ON ANYWHERE技术解密>,作者:tooooooooooomy. 1. 前言 适用版本:[8.1.1(及以上)] 查询分析是大数 ...

  8. #分治NTT#CF1218E Product Tuples

    Codeforces 用 OGF 表示 \(F(B,x)\) 就是 \[\prod_{i=1}^n(1+(q-a_i)x) \] 直接分治 NTT 把 \([x^k]\) 也就是这一位的系数求出来就可 ...

  9. OpenHarmony定义扩展组件样式:@Extend装饰器

      在前文的示例中,可以使用@Styles用于样式的扩展,在@Styles的基础上,我们提供了@Extend,用于扩展原生组件样式. 说明: 从API version 9开始,该装饰器支持在ArkTS ...

  10. Prometheus Operator与kube-prometheus之二-如何监控1.23+ kubeadm集群

    简介 系列文章: 标签 - Prometheus - 东风微鸣技术博客 (ewhisper.cn) Prometheus Operator 的上一篇: Prometheus Operator 与 ku ...