💡
原文中文,约9200字,阅读约需22分钟。
📝
内容提要
这篇文章介绍了一种名为"House of Muney"的堆利用技术,可以绕过ASLR实现代码执行。文章详细解释了该技术的利用条件和原理,并提供了相关的代码和演示。该技术需要能够溢出size位并分配大块内存。文章指出在2.40版本的libc上可能会出现问题。
🎯
关键要点
- 介绍了一种名为'House of Muney'的堆利用技术,可以绕过ASLR实现代码执行。
- 该技术的利用条件包括:Partial RELRO / No RELRO、能够分配较大的堆、能够改写堆的prev_size和size字段。
- 在malloc时,如果大小大于mmap_threshold,则会利用mmap系统调用分配内存。
- mmap_threshold在x86_64上一般为128KB。
- mmap后,chunk的size第二位IS_MMAPED被设置为1,分配的位置靠近libc的高地址。
- free操作时,完整性检查只检查chunk是否对齐,而不检查prev_size和size。
- 通过修改chunk_size,可以覆盖libc的一部分,伪造Elf64_sym结构体以实现代码执行。
- 需要注意GNU使用哈希操作和bloom filter来快速确定符号的存在。
- 伪造Elf64_sym结构体时,需要记录相对于libc_base的偏移与变量的值。
- 在2.40版本的libc上可能会出现问题,导致free操作失败。
❓
延伸问答
什么是House of Muney技术?
House of Muney是一种堆利用技术,可以在没有泄露的情况下绕过ASLR实现代码执行。
House of Muney技术的利用条件是什么?
该技术的利用条件包括Partial RELRO / No RELRO、能够分配较大的堆、以及能够改写堆的prev_size和size字段。
在使用House of Muney时,malloc的mmap_threshold是什么?
在x86_64上,malloc的mmap_threshold一般为128KB。
如何通过House of Muney实现代码执行?
通过修改chunk的size字段,可以覆盖libc的一部分,伪造Elf64_sym结构体以实现代码执行。
在使用House of Muney时,free操作的完整性检查有什么问题?
free操作只检查chunk是否对齐,而不检查prev_size和size,这使得可以munmap任意大小的chunk。
House of Muney在libc 2.40版本上有什么问题?
在libc 2.40版本上可能会出现问题,导致free操作失败。
➡️