用途:在已获得任意写原语(来自堆利用、格式化字符串或越界写)后,将其转化为代码执行,属于利用链的“最后一公里”。
主要内容:按 glibc 版本选择覆写目标,包含 GOT 覆写(需 Partial RELRO,printf/free/strlen/atoi/puts 等换 system)、__malloc_hook 与 __free_hook(glibc < 2.34,含 __realloc_hook 栈对齐技巧)、_IO_FILE vtable(<2.24 直接覆写、2.24–2.27 用 _IO_str_jumps、≥2.28 用 _IO_wfile_jumps、≥2.35 House of Cat)、__exit_funcs(函数指针需用指针 guard 解混淆)、TLS_dtor_list(glibc ≥ 2.34,同为指针混淆)、_dl_fini/link_map 破坏(无需指针混淆,需要 ld.so 基址)、modprobe_path(内核写,改动后触发未知格式文件执行)、.fini_array、C++ vtable 覆写,以及 setcontext 栈迁移(glibc <2.29 用 setcontext+53 走 RDI;≥2.29 用 setcontext+61 走 RDX)。
使用方式:文中给出格式化字符串 GOT 覆写示例(fmtstr_payload)、__malloc_hook 触发示例(发 '%100000c' 使 printf 内部 malloc)、__free_hook 配合 '/bin/sh'、指针混淆计算函数 mangle(ptr, guard)、伪造 tls_dtor_list 条目、内核写 modprobe_path 等代码片段,均需按目标环境调整地址与偏移。
适用场景:CTF pwn 与二进制漏洞利用,围绕 glibc、ELF GOT、FILE 结构、TLS、link_map、内核 modprobe_path 等目标完成利用链。
限制:各目标可用性取决于 glibc 版本与保护配置(Full RELRO 会禁用 GOT 覆写;2.34 起移除 hooks;vtable 与指针混淆有校验),需要相应基址、指针 guard 或泄漏信息;资料未提供具体平台、收费与使用门槛信息。