fastbin_attack_double_free
本文最后更新于 2024年10月13日 晚上
fastbin_attack_double_free
Fastbin Attack
简单的介绍一下,我们可以根据名字看出,这一类漏洞利用的方法主要基于fastbin机制的缺陷,其实fastbin attack并不是指某一种利用方法,而是一些。这类利用的前提是:
存在堆溢出、use-after-free等能控制chunk内容的漏洞
漏洞发生于fastbin
类型的chunk中
如果细分的话,可以做如下的分类:
Fastbin Double Free
House of Spirit
Alloc to Stack
Arbitrary 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来用