House_Of_Orange
参考:
House of Orange - CTF Wiki (ctf-wiki.org)
1.介绍
house of orange 在于我们没有free的时候,一样可以达到free的效果,将一个chunk放进unsorted bin中,然后达到泄露libc的效果
操作的原理简单来说是当前堆的 top chunk 尺寸不足以满足申请分配的大小的时候,原来的 top chunk 会被释放并被置入 unsorted bin 中,通过这一点可以在没有 free 函数情况下获取到 unsorted bins。
- 正常情况下malloc的执行过程
malloc调用位于libc.so中的__int_malloc函数,该函数中以此检查fastbin,small bins,unsorted bin,large bin,若这些都不满足,则在top chunk中找
- top chunk也不满足
此时会执行sysmalloc分配chunk
1 | else { |
但是堆分配有mmap和brk分配方式,我们要用brk的分配方式拓展chunk,这样,之前的top chunk就会放到unsorted bin中,这也就达到了house of orange的利用
一些check
- malloc的大小要小于mmp_.mmap_threshold(默认128k)
- sysmalloc函数对top chunk size的check
1 | assert((old_top == initial_top(av) && old_size == 0) || |
简单来说,top chunk的size要大于等于MINSIZE,top chunk的结束地址必须是页对其的,top chunk相邻的前一个chunk必须处于inuse状态。
总结一下check
伪造的size必须页对其
size要大于MINSIZE(0x10)
size要小于之后申请的chunk size + MINSIZE
size的prev inuse位必须是1
然后top chunk就会执行_int_free进入unsorted bin中
- 标题: House_Of_Orange
- 作者: D0wnBe@t
- 创建于 : 2024-10-08 18:35:05
- 更新于 : 2024-10-08 19:12:47
- 链接: http://downbeat.top/2024/10/08/House-Of-Orange/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论