house of rabbit:fastbin的其他攻击方式
Heap基础知识
[toc]
house of rabbit
house of rabbit
是一种fastbin
的攻击方法,可以在没有leak
的情况下通过获得一个overlap chunk
或者是一个fake chunk
。这是利用了malloc_consolidate
没有进行很好的安全校验来进行攻击的。
我们知道fastbin attack
需要保证取出的chunksize
和fastbin
的size
一样,在很多情况下需要寻找0x7f
或者是打unsortedbin attack
来找0x7f
。而house of rabbit
同样针对fastbin
,它只需要能够触发malloc_consolidate
(malloc
一个很大的值就可以触发),然后下列两者条件中的一个即可:
- 可以控制
fastbin
中chunk
的fd
指针 - 可以控制
fastbin
中chunk
的size
上面我们提到两个条件是二选一即可,是因为两个条件可以发起不同的攻击。下面让我们详细理解。
可以控制fd指针
当可以控制fd
指针的时候,师傅们很容易想到fastbin attack
,然而fastbin attack
在部分情况下存在局限性。
只要可以控制fastbin chunk
的fd
指针,之后只需要将fd
指针指向一个任意地方的fake chunk
,然后触发malloc_consolidate
,就可以申请到该位置的fake chunk
。但也需要附加条件,那就是需要该fake chunk
的下一个和下下个fake chunk
也构造好(实际上只需要构造chunk size
)。画个图来理解:
可以控制chunksize
当可以控制chunksize
时,可以获得一个chunk overlap
。具体过程如下:
首先申请两个相同大小的chunk
,例如0x40
的两个chunk
。释放后,我们将第一个chunksize
更改为0x80
,此时若触发malloc_consolidate
,那么会分别将两个chunk
添加到大小为0x40
和0x80
的smallbin
中。那么当size
被修改为0x80
的chunk
被添加到大小为0x80
的smallbin
中后,chunk overlap
实际上就已经发生了。因为只需要申请大小为0x80
的chunk
就可以获得这个chunk
了。