fastbin attack学习总结


之前没有全面的学习,现在网上资料真是比几年前全面的多了,这里总结回顾一下fastbin attack的原理思路。这里参考的博主链接如下,写的确实很详实
https://blog.csdn.net/Breeze_CAT/article/details/103788698

一、基础知识

需要了解fastbin的分配原理,fastbins是管理在malloc_state结构体重的一串单向链表,分为0x20-0x80总共7个链表:

  • 每次free释放对应大小的堆块,会加入到对应的链表中
  • 每次malloc分配堆块,会从对应大小的链表中分配一个堆块
  • 维护malloc_state遵循后入先出的原则(LIFO)

关于第三条原则,用引用网站的两张图便可以解释清楚
在这里插入图片描述

在这里插入图片描述

二、double free

double free+fastbin attack的利用场景,通常在对堆块有越界写入的情况下,实现申请任意地址的malloc块
直接用下面的步骤进行举例说明

步骤一:申请两个fastbin大小的堆块1和2,然后分别释放chunk 1和chunk 2,fastbin的链表结构就会如下图
在这里插入图片描述
步骤二:通过越界写入,修改chunk1的状态值,使得chunk1能够再次被free,经过第二次free的chunk1后,链表状态如下
在这里插入图片描述
具体如何通过越界修改chunk1,我在后面会出一个unlink攻击篇详细介绍

步骤三:malloc一个新的chunk,chunk1被申请
在这里插入图片描述
步骤四:修改chunk1的指针指向(目的地址-0x10),然后申请新的chunk,原chunk2被申请
在这里插入图片描述

步骤五:申请新的new chunk,此时状态如下
在这里插入图片描述
可以看到,只要在申请一个new chunk,就可以申请一个到目标地址的块了,自此实现完毕

三、use after free

我理解的UAF应用场景比double free更广,而且实际是double free的后面几步(不知道自己的理解对不对)

步骤一:申请一个对应fastbin区间内的堆块并释放
在这里插入图片描述
步骤二:通过越界写入或者本身的指针操作修改free过的chunk的内容,指向目标地址
在这里插入图片描述

后面步骤和doule free一致

四、chunk extend

这个chunk extend大致讲的是通过堆布局或者一字节溢出,修改某个bin的大小,最终导致堆同一堆块内不同地址的操作,具体用一张图可以大致表示出来,详细还是去看原博主的内容把(个人目前没碰到过需要用这种方法的)
在这里插入图片描述

五、相关练习题目

  • bugku Baby-heap1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值