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. 关于使用SSM+JSP开发时setter、getter隐式调用问题的小结

    [版权声明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/17977495 出自[进步*于辰的博客] 之前使用SSM ...

  2. C# 消息发送

    界面 frmMain using System; using System.Collections.Generic; using System.ComponentModel; using System ...

  3. linux安装crontab

    1.查看是否安装 rpm -qa | grep cron #没有输出内容说明没有安装 2.安装 yum -y install vixie-cron #cron 的主程序 yum -y install ...

  4. KingbaseES数据库分区表添加主键与索引的建议

    一.初始化测试环境 # 数据库版本信息 KingbaseES V008R006C007B0012 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 ...

  5. KingbaseES V8R6 几种不同的表复制方式

    前言 当数据库遇到未知问题,有时候无法入手分析,在非生产数据库或者征得客户同意获得特殊时间,需要重建表解决,下面提供了多种不同的复制表的方法,我们了解一下他们的差异. 测试 1.CREATE TABL ...

  6. 1 CSS的引入方式

    1 CSS的引入方式 CSS样式有三种不同的使用方式,分别是行内样式,嵌入样式以及链接式.我们需要根据不同的场合不同的需求来使用不同的样式. 行内样式 行内样式,就是写在元素的style属性中的样式, ...

  7. .NET 8使用日志功能以及自定义日志提供程序

    .NET 8使用日志功能以及自定义日志提供程序 日志级别 下表列出了 LogLevel 值.方便的 Log{LogLevel} 扩展方法以及建议的用法: 展开表 LogLevel "值&qu ...

  8. OpenHarmony Meetup北京站招募令

    OpenHarmony Meetup城市巡回北京站火热来袭!!日期:2023年11月25日14:00地点:中国科学院软件园区五号楼B402与OpenHarmony技术大咖近距离互动,分享技术见解,结交 ...

  9. Kubernetes 的 NameSpace 无法删除应该怎么办?

    概述 有时候我们操作不规范,或者删除的先后顺序有问题,或者某项关键服务没有启动,导致 Kubernetes 经常会出现无法删除 NameSpace 的情况.这种情况下我们应该怎么办? 规范删除流程 其 ...

  10. Avalonia下拉可搜索树(TreeComboBox)

    1.需求分析   树形下拉的功能是ComboBox和TreeView的功能结合起来,再结合数据模板来实现这一功能. 2.代码实现   1.创建UserControl集成TreeView控件   2.将 ...