house of tangerine
复制本地路径 | 在线编辑
其实和 house of orange 基本一样。一句话概括,篡改 top_chunk->size,让其变得很小,然后再申请一段内存,这样原来的 top_chunk 会被释放到 unsorted bin 或者 tcache bin 中。
区别就是 house of orange 之后用的是 FSOP,而 house of tangerine 用的是 tcache posioning,其实前面的真正核心原理是一模一样。
简单说明
还是简单说一下步骤,按照 how2heap 的脚本为例:
- 首先称当前这个 top chunk 叫做
top_chunk_a;修改top_chunk_a->size大小为0x61,然后申请一个块;此时top_chunk_a被释放到 tcache 中 - 称现在新的 top chunk 叫做
top_chunk_b;再次修改top_chunk_b->size大小为0x61,然后申请一个块;此时top_chunk_b也被释放到 tcache 中 - 现在 tcache 是
top_chunk_b --> top_chunk_a,对应的counts是 2 - 我们把
top_chunk_b->next修改为target,然后执行两次malloc,能够得到target
为什么要执行两次这种修改 top chunk,这个是为了让 tcache 对应的 counts 是 2,假如我们只执行一次的话:
- 当前 tcache 是
top_chunk_a,对应的counts是 1,此时修改next为target - 我们执行两次
malloc,第一次malloc之后counts变为了 0 - 所以第二次
malloc之后系统就认为 tcache 链表为空,不会返回target
上面内容其实是 tcache poisoning 的内容了,这里多提一下。