用途:拿到已定位的漏洞(越界读写 / 崩溃 / 危险输入)后升级为 RCE 或任意读写,是漏洞分析的利用开发环节。适用于 ROP 链构造(gadget 搜索、栈布局、ret2csu / SROP / ret2dlresolve)、堆利用(fastbin / tcache 攻击、unsorted bin 泄露、double free 系列)、seccomp 沙箱绕过(ORW:open / read / write 链)以及内核利用。入门级 pwn(ret2win / 简单 ret2libc / 格式化字符串)不在本技能范围。
工具准备:pwntools(pip install pwntools,发行版亦有官方包);gadget 搜索用 ropper(pip install ropper)与 ROPgadget(pip install ROPgadget);调试用 gdb + pwndbg/gef,堆利用建议 pwndbg 的 heap / bins 命令;可选 angr(pip install angr)用于溢出偏移与路径约束。验证命令:pwn --version、ropper --version、ROPgadget --binary ./target | head。
主要步骤:一、利用面分析——确认可控字节范围与偏移,pwn checksec 查看 NX/PIE/Canary/RELRO,检查 seccomp 规则;二、ROP 链——搜索传参 gadget(ROPgadget --binary ./target | grep 'pop rdi')、按 SysV ABI 布局、缺 rdx gadget 时用 ret2csu 或 ret2dlresolve,注意 16 字节栈对齐;三、堆利用——按 glibc 版本选攻击面(tcache、fastbin、unsorted bin 泄露),用 pwndbg heap/bins 逐 chunk 验证;四、缓解绕过——PIE 先泄露 base,Canary 先泄露再溢出,full RELRO 不打 GOT;五、PoC 验证——pwntools 脚本分步验证,先泄露后覆盖,记录文件与 sha256。内核利用涉及 modprobe_path、cred 覆写、io_uring / BPF 与 SLUB 堆喷。
限制与陷阱:gadget 地址受 ASLR/PIE 影响须泄露为先;glibc 2.32+ tcache fd 有 safe-linking 异或(PROTECT_PTR),2.29+ double free 有 key 检查;2.34 起删除 __malloc_hook/__free_hook;各版本检查差异需按 ldd 确认并可能用 patchelf 换 libc 复现。利用验证是动态执行,默认在沙箱内运行;远程目标仅做最终验证。组合绕过多重保护时应先写利用规划表再分步实现分步验证,并注意 movaps 栈对齐问题。