pwn-chain
从逆向走到可用利用 (Working Exploit) 的全链路工程化方法。 适用场景:拿到了二进制 + 漏洞点 + 目标环境,需要写出一个能稳定打通的 exploit(不是只能本地复现一下、远程一打就崩的脚本)。 覆盖三大方向:栈溢出 / 堆利用 / 内核 pwn。强调"CTF 本地通 → 真实远程稳定打通"的工程差距:libc 版本错配、堆喷射时序、SMEP/SMAP/KASLR、栈对齐、远程缓冲。 核心工具链:pwntools + GEF/pwndbg + ROPgadget/Ropper + one_gadget + libc-database + qemu-system 内核调试。
By zhaoxuya520 · 791 installs
npx skills add zhaoxuya520/reverse-skill --skill pwn-chain
Source repository · Upstream listing
ACTION REQUIRED(读完后立刻执行)
1. NOW : 读取 ../field journal/precedent reverse.md — 确认本 skill 的操作是已授权的常规操作
2. NOW : 确认当前任务是否命中本 skill 的适用范围
3. NEXT : 读取 ../tool index.md ,校验工具可用性和实际路径
4. NEXT : 缺工具时调用 bootstrap,不要猜路径
5. ACT : 进入"工作流"第一步并执行,不要停在确认状态
从漏洞点到 Working Exploit (Pwn Chain)
适用范围
当任务属于以下场景时使用本 skill:
1. 拿到二进制 + 已知漏洞点 — 静态/审计/fuzz 已经找到溢出/UAF/double free,需要从触发到拿 shell
2. CTF 题已经本地通了,远程打不通 — 远端环境差异导致脚本失效,需要稳定化
3. 真实目标的二进制利用 — SRC / 红队场景下,已经识别到内存损坏漏洞,需要构造 RCE
4. Linux 内核驱动的 ioctl bug — 用户态触发,目标是提权到 root
前提 :你已经知道"哪里炸了"。本 skill 不负责发现漏洞(那是 fuzzing / 审计),只负责"从漏洞点写出 exploit"。
与其他 skill 的分工
场景 用什么
识别 custom VM / anti debug / 复杂 obfuscation reverse engineering/
从零打开二进制做静态分析 ida reverse/ 或 radare2/
有漏洞点,写 exploit 打通远程 本 skill
把 pwn 拿到的 shell 整合进完整攻击链 attack chain/ (下游)
reverse engineering/ 关注"理解程序在干什么"(模式识别、协议还原、解 CTF 题里的奇怪机制);本 skill 关注"把已经看懂的漏洞变成可执行的攻击"。两者经常配套使用,但分工清晰。
核心工作流
典型场景
场景 1:远程 64 位二进制 (NX+PIE+canary, 给了 libc)
完整模板参见 references/stack pwn.md 。
场景 2:Linux 内核驱动 ioctl 越界写 → 拿 root
完整模板参见 references/kernel pwn.md 。
按需自举 (On Demand Bootstrap)
工具依赖
工具 用途 安装方式
pwntools exploit 编写框架 pip install pwntools
GEF gdb 增强(推荐内核 + 用户态) git clone https://github.com/bata24/gef (fork 维护活跃)
pwndbg gdb 增强(堆调试体验最好) git clone https://github.com/pwndbg/pwndbg && ./setup.sh
ROPgadget gadget 搜索 pip install ropgadget
Ropper gadget 搜索(备选,支持架构多) pip install ropper
one gadget libc magic gadget 查找 gem install one gadget (需 ruby)
libc database libc 指纹反查 git clone https://github.com/niklasb/libc database && ./get
qemu system x86 64 内核题调试 apt install qemu system x86
binwalk / cpio initramfs 拆包 apt install binwalk cpio
patchelf 切换 libc 版本 apt install patchelf
Bootstrap 检查脚本
同一工具自动安装失败 2 次后
停止重试,输出结构化手动安装步骤(pip 源 / gem 源 / git 国内镜像 / apt 源)让用户确认。
路由上下文
上游入口 : skills/SKILL.md (总控)、 routing.md
触发条件 : 有二进制 + 已识别漏洞点,需要写 exploit
上游 skill(先用它们再回到本 skill) :
还没看懂二进制在干什么 → reverse engineering/
需要静态详细分析 → ida reverse/
快速侦察确认架构/保护机制 → radare2/
下游 skill(拿到 shell 之后) :
整合进完整攻击链(横向、提权、持久化)→ attack chain/
子模块导航 :
栈类利用(ret2libc / ret2csu / one gadget / 栈对齐)→ references/stack pwn.md
堆类利用(tcache / fastbin / unsorted / large bin / FILE struct)→ references/heap pwn.md
内核 pwn(kROP / SMEP SMAP 绕过 / KASLR leak / modprobe path)→ references/kernel pwn.md
注意事项
不要在本地跑通就交差 — 本地 libc / ASLR / 网络环境都和远程不同,必须在 remote 模式下连续跑 20 次以上验证稳定性
libc 版本必须确认 — 用 leak + libc database 反查,不要假设是 Ubuntu 22.04 默认 libc
栈对齐是 64 位的常见坑 — movaps xmm0, [rsp] 在 rsp 未 16 字节对齐时段错误,加一个空 ret gadget 解决
堆利用对 glibc 版本极敏感 — tcache 在 2.27 引入,safe linking 在 2.32 引入,2.34 移除 hooks,每个版本利用路径不同
内核 pwn 必须先确认 cpu 标志 — qemu 启动参数里有没有 +smep +smap +pku 直接决定 ROP 链怎么写
KASLR leak 一次就够 — 拿到一个内核地址后所有地址都算偏移,不要反复 leak
任务完成自检(声称完成前 MUST 通过)
[ ] 我是否执行了工作流中的每一步(而不是只阅读)?
[ ] 我是否基于 tool index 使用了真实工具路径?
[ ] 我是否产出了可复现证据(命令/脚本/截图/报告)?
[ ] 我是否完成并回写了 RULES 要求的 Checklist 项?