House of 系列总结
- House of Force
- 机制:通过溢出覆盖 Top Chunk 的
size字段为一个极大的值(如-1),使得后续的堆分配操作可以跨越到内存空间中的任意地址(如 bss 段、GOT 表或栈)。 - 适用环境:glibc 2.27 及之前未对 Top Chunk 进行严格尺寸校验的版本。
- House of Spirit
- 机制:在目标地址(如栈或 bss 段)手动伪造一个合法的 chunk 头部结构,然后将其指针传递给
free函数使其进入 Fastbin 或 Tcache。后续执行malloc即可直接获得该目标地址的控制权。 - House of Orange
- 机制:一种无需调用
free函数即可实现堆利用的经典技术。通过覆盖 Top Chunk 的size(需满足页对齐等严格校验),触发sysmalloc导致原来的 Top Chunk 被放入 Unsorted Bin。常结合 FSOP(File Stream Oriented Programming)劫持_IO_list_all触发控制流劫持。 - House of Einherjar
- 机制:利用单字节溢出(Off-by-One)将物理相邻的下一个 chunk 的
PREV_INUSE标志位清零,并修改其prev_size。当该 chunk 被释放时,会触发向后合并(Backward Coalescing)至攻击者伪造的 chunk 位置,导致严重的内存重叠(Overlapping)。 - House of Roman
- 机制:结合 Fastbin 攻击和 Unsorted Bin 攻击的无泄漏利用技术。利用局部覆盖(Partial Overwrite)技术修改指针的低 12 位(不受 ASLR 影响),能够在完全没有泄露 libc 基址的情况下劫持
__malloc_hook或其他关键指针。 - House of Lore
- 机制:经典的 Small Bin 攻击技术。利用漏洞修改 Small Bin 链表中 chunk 的
bk指针,伪造一个双向链表。当程序再次分配 Small Bin 时,会将伪造的地址链入,实现任意地址分配。 - House of Botcake
- 机制:针对 Tcache 机制的重叠利用。通过将 Tcache 填满(7 个 chunk),利用漏洞使同一个 chunk 同时存在于 Tcache 和 Unsorted Bin 中(或者使其与 Unsorted Bin 中的 chunk 合并),从而在后续分配中实现绕过 Tcache 检查的堆块重叠。
- House of Storm
- 机制:结合了 Large Bin 攻击和 Unsorted Bin 攻击。利用这两个 bin 在插入新 chunk 时的指针解引用机制,实现在任意可写地址伪造出一个合法的 chunk
size,并成功将其malloc出来。 - House of Pig
- 机制:结合了 Tcache Stashing Unlink 攻击和 FSOP 技术的复杂利用链。通常利用 Large Bin Attack 劫持
_IO_list_all,配合 Tcache Stashing Unlink 将目标地址(如__free_hook)写入特定数据,以此在 glibc 2.31 等存在 Tcache 保护机制的版本中完成利用。 - House of Husk
- 机制:主要针对 glibc 2.29+。利用 UAF 或任意写漏洞,将可控的堆块地址分别覆盖全局变量
__printf_arginfo_table和__printf_function_table。随后,只要程序调用格式化字符串输出(如printf),就会触发位于堆上的伪造函数指针,劫持控制流。 - House of Kiwi
- 机制:专门针对 glibc 2.32+(移除了各种 hook 的版本)。通过修改
_IO_file_jumps及相关结构,并主动触发堆校验失败(调用__malloc_assert),这会导致系统调用fflush(stderr)。利用此过程中的_IO_file_sync或_IO_file_close_mmap执行链,最终实现控制流劫持。 - House of Emma
- 机制:针对 glibc 2.34+ 移除了
__free_hook和__malloc_hook后的进阶利用。利用 Large Bin Attack 将堆地址写入stderr,通过伪造_IO_cookie_file结构体,巧妙绕过 Pointer Guard (PTR_MANGLE) 保护,利用_IO_cookie_jumps中的 vtable 劫持程序流。 - House of Apple (1 & 2)
- 机制:针对高版本 glibc 的通用 FSOP 技术。不再局限于传统的 vtable,而是深入利用
_IO_wstrn_jumps或_IO_wfile_jumps等宽字符相关的 vtable 内部调用链,通过精心伪造 IO_FILE 结构体,极简且高效地触发栈迁移并执行 ROP。 - House of Banana
- 机制:针对 glibc 2.23 - 2.31 版本。通过劫持
rtld_global结构体(常利用 Large Bin Attack 篡改_rtld_global._dl_ns[0]._ns_loaded),在程序调用exit或从main函数返回时,利用动态链接器在_dl_fini中的清理逻辑,劫持link_map结构体并执行伪造的函数指针。 - House of Rabbit
- 机制:一种用于快速制造堆块重叠的高级技术。核心在于通过伪造 Fastbin chunk 的
size和物理相邻状态,触发malloc_consolidate将原本不能合并的 Fastbin 丢入 Unsorted Bin 中,并在随后的分配中利用系统对size检查的盲区实现重叠。
更新: 2026-04-28 13:54:10
原文: https://www.yuque.com/idcm/wnemg9/ah1gu7vn7u7mgnqn