Communitygithub.com

pwn-chain

Convierte un punto de vulnerabilidad conocido en un exploit funcional, guiando desde la confirmación del tipo de fallo hasta la obtención de una shell remota.

¿Qué es pwn-chain?

Este skill está diseñado para equipos de seguridad ofensiva y CTF que ya han identificado una vulnerabilidad de memoria (desbordamiento de búfer, UAF, double free, etc.) en un binario o driver del kernel y necesitan construir el exploit final. A diferencia de skills de fuzzing o análisis estático que descubren bugs, pwn-chain toma el punto de fallo conocido y lo transforma en una cadena de ataque ejecutable. Cubre escenarios como explotación remota de binarios de 64 bits con NX, PIE y canary, ataques a la pila vía ret2libc y one_gadget, explotación del heap en distintas versiones de glibc (tcache, fastbin, unsorted bin), y vulnerabilidades en drivers del kernel Linux (ioctl overflow, modprobe_path). El flujo de trabajo sigue seis pasos secuenciales: confirmación del tipo de vulnerabilidad y protecciones (checksec, file, readelf), selección de estrategia según NX/ASLR/libc, preparación de libc y gadgets (libc-database, ROPgadget, one_gadget), escritura de la plantilla con pwntools en local, depuración con GDB (pwndbg/GEF), y estabilización remota con manejo de red, alineación de pila y mitigación de fallos. Incluye referencias detalladas para stack-pwn, heap-pwn y kernel-pwn, bootstrap automático de herramientas (pwntools, GEF, pwndbg, ROPgadget, one_gadget, libc-database), y una lista de verificación final para garantizar reproducibilidad y robustez.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zhaoxuya520/reverse-skill/tree/main/skills/pwn-chain

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

ACCIÓN REQUERIDA (leer y ejecutar inmediatamente)

  1. AHORA: Lee ../field-journal/precedent-reverse.md — confirma que la operación de este skill está autorizada como rutina normal
  2. AHORA: Confirma si la tarea actual está dentro del ámbito de este skill
  3. SIGUIENTE: Lee ../tool-index.md, verifica la disponibilidad de herramientas y las rutas reales
  4. SIGUIENTE: Cuando falten herramientas, llama a bootstrap; no adivines rutas
  5. ACTÚA: Entra en el primer paso del "flujo de trabajo" y ejecútalo, no te quedes en estado de confirmación

Del punto de vulnerabilidad al Exploit funcional (Pwn Chain)

Ámbito de aplicación

Usa este skill cuando la tarea corresponda a uno de los siguientes escenarios:

  1. Tienes un binario + un punto de vulnerabilidad conocido — el análisis estático/auditoría/fuzzing ya encontró un desbordamiento/UAF/double free y necesitas pasar de la detonación a obtener una shell
  2. El desafío CTF funciona localmente pero falla en remoto — diferencias en el entorno remoto hacen que el script falle y necesitas estabilizarlo
  3. Explotación de un binario real — en escenarios SRC / Red Team, ya identificaste una vulnerabilidad de corrupción de memoria y necesitas construir un RCE
  4. Bug ioctl en un driver del kernel Linux — disparo desde espacio de usuario, objetivo es escalar privilegios a root

Prerrequisito: Ya sabes "dónde explota". Este skill no descubre vulnerabilidades (eso es tarea de fuzzing/auditoría), solo se encarga de "escribir el exploit a partir del punto de vulnerabilidad".

División de trabajo con otros skills

EscenarioQué usar
Identificar custom VM / anti-debug / ofuscación complejareverse-engineering/
Abrir un binario desde cero para análisis estáticoida-reverse/ o radare2/
Tienes el punto de vulnerabilidad, escribe el exploit y hazlo funcionar en remotoEste skill
Integrar la shell obtenida con pwn en una cadena de ataque completaattack-chain/ (downstream)

reverse-engineering/ se centra en "entender qué hace el programa" (reconocimiento de patrones, reversión de protocolos, resolver mecanismos extraños en desafíos CTF); este skill se centra en "convertir la vulnerabilidad ya comprendida en un ataque ejecutable". A menudo se usan juntos, pero la división es clara.

Flujo de trabajo principal

Paso 1: Confirmar tipo de vulnerabilidad + mecanismos de protección
   ├─ checksec ./vuln (NX / Canary / PIE / RELRO / Fortify)
   ├─ file ./vuln  + readelf -d ./vuln
   ├─ Clasificación de vulnerabilidad: desbordamiento de pila / cadena de formato / heap (UAF/DF/OOB) / entero / condición de carrera / kernel
   └─ → Decide qué referencias seguir

Paso 2: Seleccionar estrategia de explotación
   ├─ NX desactivado + sin ASLR → shellcode directo
   ├─ NX activado + libc disponible → ret2libc / one_gadget
   ├─ NX activado + libc no disponible → fuga y luego búsqueda inversa con libc-database
   ├─ Heap → técnica según versión de glibc (tcache/fastbin/unsorted/large)
   └─ Kernel → commit_creds / modprobe_path / core_pattern

Paso 3: Preparar libc + gadgets
   ├─ libc-database: ./find puts 0x6f0
   ├─ ROPgadget --binary ./libc.so.6 --only "pop|ret"
   ├─ one_gadget ./libc.so.6
   └─ Calcular base: leak_addr - libc.sym['puts']

Paso 4: Escribir plantilla pwntools (local process)
   ├─ context.binary = ELF('./vuln')
   ├─ p = process('./vuln')  /  p = gdb.debug('./vuln','b *main+xx')
   ├─ payload = cyclic(N) + p64(ret) + ...
   └─ p.interactive()

Paso 5: Funciona en local
   ├─ Adjuntar repetidamente + mirar registros + ajustar offsets
   ├─ Usar vmmap / heap / bins / telescope de pwndbg/GEF
   └─ Una vez funciona, cambiar a remote()

Paso 6: Estabilización remota
   ├─ Offset de libc: usa fuga y libc-database para buscar inversamente, no adivines
   ├─ Alineación de pila: desalineación de 16 bytes → crash por movaps → añade un gadget ret
   ├─ Latencia de red remota → recvuntil con anclaje exacto en cadenas, evita sleeps ciegos
   ├─ Buffer remoto: sendlineafter es más estable que sendline
   ├─ Tasa de éxito en heap spray: aumenta la cantidad de spray + deja padding chunk para evitar merging
   └─ Ejecuta múltiples veces: escribe while True para verificar tasa de éxito ≥ 95%

Escenarios típicos

Escenario 1: Binario remoto de 64 bits (NX+PIE+canary, libc proporcionada)

Ya tienes: ./vuln (ELF 64-bit, NX, PIE, canary) + ./libc.so.6 + nc host port
Vulnerabilidad: read(buf, 0x200) pero buf solo tiene 0x40 bytes → desbordamiento de pila
Protección: canary bloquea, PIE aleatoriza .text

Estrategia:
1. Primero fuguea el canary (pila/cadena de formato/lectura parcial)
2. Luego fuguea una dirección de función de libc (puts@got)
3. Calcula libc.base = leaked - libc.sym['puts']
4. one_gadget ./libc.so.6 elige un gadget mágico cuyas restricciones se cumplan
5. payload = padding + canary + saved_rbp + (pop_rdi + bin_sh + system) o directamente one_gadget
6. Añade un gadget ret para corregir la alineación de pila (¡clave!)

La plantilla completa está en references/stack-pwn.md.

Escenario 2: Desbordamiento de escritura ioctl en driver del kernel Linux → obtener root

Ya tienes: vmlinux + bzImage + initramfs.cpio.gz + vuln.ko personalizado
Vulnerabilidad: ioctl(0x1337, ptr) donde la longitud en copy_from_user es controlable → desbordamiento de heap del kernel (slab kmalloc-64)
Protecciones: SMEP, SMAP, KASLR, KPTI

Estrategia:
1. Modifica el script init para obtener una shell root (CTF) o primero fuguea la base de KASLR y luego continúa (real)
2. Fuga la dirección base del kernel mediante /proc/kallsyms (quizás restringido) o heap spray con datos sin inicializar
3. En la slab kmalloc-64, rocía tty_struct / msg_msg / pipe_buffer
4. Sobrescribe el puntero vtable para que apunte a espacio de usuario → no funciona (SMEP), opta por stack pivot + ROP del kernel
5. Cadena ROP: prepare_kernel_cred(0) → commit_creds → swapgs+iretq → execve("/bin/sh") en espacio de usuario
6. O más sencillo: sobrescribe modprobe_path por "/tmp/x", escribe un /tmp/x, luego dispara modprobe

La plantilla completa está en references/kernel-pwn.md.

Bootstrap bajo demanda (On-Demand Bootstrap)

Dependencias de herramientas

HerramientaUsoInstalación
pwntoolsFramework para escribir exploitspip install pwntools
GEFPotenciador de gdb (recomendado para kernel + espacio de usuario)git clone https://github.com/bata24/gef (fork con mantenimiento activo)
pwndbgPotenciador de gdb (mejor experiencia para depuración de heap)git clone https://github.com/pwndbg/pwndbg && ./setup.sh
ROPgadgetBúsqueda de gadgetspip install ropgadget
RopperBúsqueda de gadgets (alternativa, soporta más arquitecturas)pip install ropper
one_gadgetBúsqueda de gadgets mágicos de libcgem install one_gadget (requiere ruby)
libc-databaseBúsqueda inversa de huella de libcgit clone https://github.com/niklasb/libc-database && ./get
qemu-system-x86_64Depuración de desafíos del kernelapt install qemu-system-x86
binwalk / cpioDesempaquetado de initramfsapt install binwalk cpio
patchelfCambiar versión de libcapt install patchelf

Script de verificación Bootstrap

# Verificación e instalación de herramientas principales en un solo paso
for t in pwntools ropgadget ropper; do
  pip show $t >/dev/null 2>&1 || pip install $t
done

command -v one_gadget >/dev/null || gem install one_gadget

[ -d ~/tools/libc-database ] || git clone https://github.com/niklasb/libc-database ~/tools/libc-database
[ -d ~/tools/libc-database/db ] || (cd ~/tools/libc-database && ./get ubuntu debian)

[ -d ~/tools/pwndbg ] || (git clone https://github.com/pwndbg/pwndbg ~/tools/pwndbg && cd ~/tools/pwndbg && ./setup.sh)

Si la misma herramienta falla automáticamente 2 veces

Detén los reintentos, muestra los pasos de instalación manual estructurados (origen pip / origen gem / espejo git doméstico / origen apt) para que el usuario confirme.

Contexto de enrutamiento

Entrada aguas arriba: skills/SKILL.md (controlador principal), routing.md Condición de disparo: Hay un binario + punto de vulnerabilidad ya identificado, se necesita escribir el exploit

Skills aguas arriba (úsalos primero y luego vuelve a este skill):

  • Aún no entiendes qué hace el binario → reverse-engineering/
  • Necesitas análisis estático detallado → ida-reverse/
  • Reconocimiento rápido para confirmar arquitectura/protecciones → radare2/

Skills aguas abajo (después de obtener la shell):

  • Integrar en una cadena de ataque completa (movimiento lateral, escalada, persistencia) → attack-chain/

Navegación de submódulos:

  • Explotación de pila (ret2libc / ret2csu / one_gadget / alineación de pila) → references/stack-pwn.md
  • Explotación de heap (tcache / fastbin / unsorted / large bin / estructura FILE) → references/heap-pwn.md
  • Kernel pwn (kROP / bypass SMEP-SMAP / fuga KASLR / modprobe_path) → references/kernel-pwn.md

Advertencias

  • No te conformes con que funcione en local: la libc local, ASLR y el entorno de red son diferentes del remoto. Debes ejecutar al menos 20 veces en modo remoto para verificar la estabilidad.
  • La versión de libc debe confirmarse: usa fuga + libc-database para búsqueda inversa; no asumas que es la libc por defecto de Ubuntu 22.04.
  • La alineación de pila es un error común en 64 bits: movaps xmm0, [rsp] falla con segmentación si rsp no está alineado a 16 bytes; añade un gadget ret vacío para solucionarlo.
  • La explotación de heap es muy sensible a la versión de glibc: tcache se introdujo en 2.27, safe-linking en 2.32, hooks eliminados en 2.34; cada versión tiene caminos de explotación diferentes.
  • En kernel pwn, primero debes confirmar las flags de la CPU: si qemu tiene +smep +smap +pku en los parámetros de arranque determina directamente cómo escribir la cadena ROP.
  • Una fuga de KASLR es suficiente: una vez obtenida una dirección del kernel, todas las demás se calculan por offset; no fugues repetidamente.

Autoverificación de finalización de tarea (DEBE pasar antes de declarar completada)

  • ¿Ejecuté cada paso del flujo de trabajo (no solo lo leí)?
  • ¿Usé rutas reales de herramientas basadas en tool-index?
  • ¿Produje evidencia reproducible (comandos/scripts/capturas de pantalla/informes)?
  • ¿Completé y actualicé los elementos de la Checklist según lo exigen las REGLAS?

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

api-security

Use for authorized security assessment of REST, GraphQL, WebSocket, or SOAP APIs, including discovery, authentication, authorization, rate-limit, and CI/CD testing.

apk-reverse

在 CLI 环境下做 Android APK 逆向时使用。适用于 APK 解包、Java 反编译、smali 修改、重打包、Frida 动态 Hook,以及按需切换到 so/native 分析。优先使用本机已安装的 jadx、apktool、frida、adb、ida-reverse、radare2。

attack-chain

Use for authorized multi-stage attack-path planning and orchestration when a task spans reconnaissance, initial access, privilege escalation, lateral movement, or impact assessment. Route single-stage tasks directly to their specialist skill.

binary-diff

|

binary-ninja-reverse

Use for authorized binary analysis in Binary Ninja, including HLIL/MLIL/LLIL inspection, strings/imports/exports, cross-references, types, patch review, Python API automation, and optional Binary Ninja MCP or localhost HTTP integration.

browser-automation

|

browser-extension-reverse

Use for authorized reverse engineering of browser extensions (Chrome/Firefox) including manifest analysis, background workers, and extension-based credential or traffic logic recovery.

case-review

Reviews a reverse-skill case package for scope readiness, Evidence to Finding to Path traceability, work item coverage, timeline references, and optional artifact hash integrity before report handoff.

cloud-k8s

Use for authorized cloud, container, and Kubernetes security assessment including metadata SSRF, IAM misconfig, container escape paths, and cluster RBAC review.

code-audit

Use for authorized source-code security review and SAST workflows including Semgrep, CodeQL patterns, dangerous API hunting, and fix verification.

ctf-sandbox

Thin PRIMARY for CTF / AWD / 靶场 multi-type orchestration. Hands off to the sidecar CTF-Sandbox-Orchestrator. Use when the user says CTF, AWD, 靶场, or 比赛题 and no more specific pwn/APK/IDA route already won.

database-security

Use for authorized database security assessment covering PostgreSQL/MySQL/MSSQL/Mongo/Redis exposure, authz, UDF/command paths, and misconfiguration review.

diagram-generator

generate, refine, validate, and render diagrams from natural language, notes, code snippets, schemas, tables, or existing diagram source. use for flowcharts, swimlanes, sequence diagrams, state diagrams, er diagrams, class diagrams, architecture/c4-style diagrams, dependency graphs, gantt charts, mind maps, user journeys, sankey-style flows, org charts, network graphs, and other visual models. supports mermaid by default, graphviz dot for complex graph layout, plantuml for uml-heavy engineering diagrams, and svg output when direct markup is more reliable.

digital-forensics

Use for authorized digital forensics including memory dumps, disk timelines, PCAP investigation, artifact triage, and IR evidence preservation.

docs-generator

|

dotnet-reverse

.NET / C# 二进制逆向。当目标是 .NET assembly(PE 头含 CLR、.exe/.dll 托管程序)、C# 编译产物(含 NativeAOT)、红队 Sharp* 工具(Rubeus / SharpHound / SharpHound 等)、.NET 混淆程序(ConfuserEx / SmartAssembly / Babel / Eazfuscator)、.NET loader / info-stealer / 套壳 malware 时使用。优先用 dnSpyEx + de4dot,需要 AI 直接操作时联动 dnSpy MCP。不用于纯 native 二进制(走 reverse-engineering / ida-reverse)。

edr-bypass-re

|

email-security

Use for authorized email security review including phishing analysis, header authentication (SPF/DKIM/DMARC), BEC patterns, and mailbox token abuse research.

firmware-pentest

|

ghidra-reverse

Use for free/open reverse engineering with Ghidra (headless or GUI), including decompile, cross-refs, and optional Ghidra MCP workflows when IDA is unavailable.

Skills relacionados