fastbin_attack中的House of Spirit(基础)
fastbin_attack中的House of Spirit(基础)
简介
House of Spirit是一个组合型漏洞的利用,具体来说就是变量覆盖和堆管理机制的组合利用。
原理
House of Spirit的利用关键在于能够覆盖一个堆指针变量(也就是调用malloc之后堆块中malloc_data返回的地址),让其指向可以控制的区域。
利用思路
1、伪造堆块
2、覆盖堆指针指向上一步伪造的堆块
3、释放堆块,将伪造的堆块放入fastbin单链表中(需要绕过检测)
4、申请堆块,将刚才释放的堆块申请出来,最终可以使得向目标区域中写入数据,以达控制内存的目的。
在free时需要绕过的检测
libc-2.23.so的malloc.c源码glibc2.23/malloc/malloc.c at master · balexios/glibc2.23 (github.com)
检测一
fake chunk的ISMMAP位不能为1,因为free时,如果是mmap的chunk,会单独处理。
1 | if (chunk_is_mmapped (p)) /* release mmapped memory. */ |
M标志位不能为1
检测二
fake chunk地址需要对齐,MALLOC_ALIGN_MASK
检测三
fake chunk的size大小需要满足对应的fastbin的需求,同时也得对齐。
1 | if ((unsigned long)(size) <= (unsigned long)(get_max_fast ()) |
检测四
fake chunk的next chunk的大小不能小于2*SIZE_SZ,同时也不能大于av–>system_mem。
1 | if (have_lock |
检测五
fake chunk对应的fastbin链表头部不能是该fake chunk,即不能构成double free的情况。
总结
house of spirit的主要意思是我们想要控制的区域控制不了,但是它前面和后面都可以控制,所以伪造好数据将它放入fastbin中,后面将该内存区域当作堆块申请出来,致使该区域被当作普通的内存使用,从而使目标区域变成可控的。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 zhuyuan-学习日记!