fastbin_attack_double_free
本文最后更新于 2024年10月13日 晚上
fastbin_attack_double_free
Fastbin Attack
简单的介绍一下,我们可以根据名字看出,这一类漏洞利用的方法主要基于fastbin机制的缺陷,其实fastbin attack并不是指某一种利用方法,而是一些。这类利用的前提是:
存在堆溢出、use-after-free等能控制chunk内容的漏洞
漏洞发生于fastbin类型的chunk中
如果细分的话,可以做如下的分类:
Fastbin Double FreeHouse of SpiritAlloc to StackArbitrary Alloc
前两种主要漏洞侧重于利用free函数释放的真的 chunk或伪造的chunk,然后再次申请chunk进行攻击,后两种侧重于故意修改fd指针,直接利用malloc申请指定位置chunk进行攻击。这篇文章主要讲解的是Fastbin Double Free,后几种会在之后文章中继续讲解
原理:
1.fastbin 管理chunk是单链表管理
2.由fastbin管理的chunk即使被释放,其next_chunk的prev_inuse位也不会被清空
利用
先创建3个chunk并free掉,可以看到三个chunk按单链表的形式进入fastbin,
chunk3的fd指针是指向chunk2的,chunk2的fd指针是指向chunk1,那么是谁来指向chunk3呢?
其实是main_arena指向了chunk3的prev_size
并且free的验证只验证main_arena指向的chunk,
也就是说fastbin中的chunk1是可以再次free的
此时chunk1的fd指针是指向chunk2的,如果我们可以控制chunk1的fd指针,我们假设将指针指向一个在bss段的未free的chunk,在把三个chunk重新申请
可以看到,虽然bss_chunk没有free,但是fastbin还是把他当成free来用
