本文适合
已经理解 栈、返回地址与控制流、ROP基础 和基础逆向调试的 Pwn 学习者。学完你能:识别 PE/WinAPI/调用约定带来的利用差异,在 x64dbg 中确认崩溃点、偏移、模块基址,并设计 ret2api 或 VirtualProtect ROP 路线
本文适合
已经理解 栈、返回地址与控制流、ROP基础 和基础逆向调试的 Pwn 学习者。学完你能:识别 PE/WinAPI/调用约定带来的利用差异,在 x64dbg 中确认崩溃点、偏移、模块基址,并设计 ret2api 或 VirtualProtect ROP 路线
本文适合
已经理解 ROP基础 和 shellcode与syscall,但在 gadget 稀缺、需要一次性控制多个寄存器时卡住的 Pwn 学习者。学完你能:判断 SROP 是否适用,构造 SigreturnFrame 控制寄存器,并用 rt_sigreturn 组织 execve、mprotect 或 ORW 利用链
本文适合
已经理解 栈、返回地址与控制流 和 ROP基础,准备直接写机器码或系统调用链的 Pwn 学习者。学完你能:按目标架构写出最小 execve 或 ORW shellcode,判断 NX/seccomp/bad char 对路线的影响,并用 syscall 编号和调用约定验证 payload
本文适合
已经能控制 RIP 或构造 ROP,但 system("/bin/sh")、execve 或 shellcode 在远程被 kill 的 Pwn 学习者。学完你能:用 seccomp-tools 读懂 syscall 过滤规则,并把利用目标从起 shell 改成 ORW、openat、mprotect 或允许的 syscall 链
seccomp 是 Linux 的系统调用过滤机制。Pwn 题里它常用来限制程序能调用哪些 syscall,从而让常规 execve("/bin/sh") 失效。
本文适合
CTF Pwn 入门学习者。学完你能:在 NX 开启时找到参数 gadget,完成 puts(puts@got) 泄露、libc 基址计算和 system("/bin/sh") 或 ORW 二阶段利用
ROP 是 Return-Oriented Programming,返回导向编程。它的核心思想是:不直接注入新代码,而是把程序或 libc 中已有的小片段拼成想要的行为。
本文适合
已经理解 ROP基础,但在小二进制里找不到完整 pop rdi/rsi/rdx gadget 的 Pwn 学习者。学完你能:识别 __libc_csu_init 两段 gadget,按 rbx/rbp/r12-r15 约束构造一次三参数函数调用,并处理 call 后的栈副作用
本文适合
已经理解 ELF、PLT、GOT与libc、ROP基础、堆基础 的 Pwn 学习者。学完你能:识别 Alpine/musl 环境,放弃不适用的 glibc 模板,并选择 ret2libc、syscall ROP、ORW 或简单堆原语路线
本文适合
已经理解 堆基础、libc 泄露和任意写原语,准备处理 _IO_FILE、stdout/stderr 劫持或 glibc IO 链的 Pwn 学习者。学完你能:判断 FSOP 是否适用,定位 _IO_FILE 关键字段、触发点和 glibc 版本限制,并把堆任意写转成泄露或控制流劫持
本文适合
已经能让 ELF 程序崩溃,但不清楚 PLT/GOT/libc 泄露、ret2libc 和 RELRO 影响的 Pwn 入门学习者。学完你能:区分 PLT 调用入口、GOT 真实地址表和 libc 基址,并用一次函数地址泄露计算 system、/bin/sh 或改走 GOT 覆写路线
Pwn 里经常出现 ELF、PLT、GOT、libc。这些不是玄学名词,它们都和 Linux 程序如何加载、调用函数、定位地址有关。