House Of Lorce

概述

针对small bin的堆利用

作用:分配任意地址的chunk

要求:堆溢出修改chunk的bk域

利用原理

感觉和fastbin attack差不多,都是修改指向的堆块,然后申请出来

不过在small bin上需要注意绕过堆bck->fd的检测,而且small bin是FIFO即先进先出的

1
2
3
4
5
6
7
8
9
10
11
12
// 获取 small bin 中倒数第二个 chunk 。
bck = victim->bk;
// 检查 bck->fd 是不是 victim,防止伪造
if (__glibc_unlikely(bck->fd != victim)) {
errstr = "malloc(): smallbin double linked list corrupted";
goto errout;
}
// 设置 victim 对应的 inuse 位
set_inuse_bit_at_offset(victim, nb);
// 修改 small bin 链表,将 small bin 的最后一个 chunk 取出来
bin->bk = bck;
bck->fd = bin;

举一个简单的例子:

  1. 申请chunkA,chunkB,chunkC三个chunk,其中chunkB位于smallbin范围内
  2. 释放chunkB,使其进入unsortedbin中
  3. 申请一个比chunkB还大的堆块,使chunkB进入smallbin中
  4. 修改chunkBbk指针为伪造的fake chunk
  5. 构造fake chunk使fake chunkfd指针指向chunkB
  6. malloc两次即可申请到fake chunk

总结

一句话就修改bk伪造堆块然后就行了