Ir al contenido

pwndbg - Hoja de Referencia de Desarrollo de Exploits con GDB/LLDB

pwndbg - Hoja de Referencia de Desarrollo de Exploits con GDB/LLDB

pwndbg (pronunciado “pwn-dee-bee-gee”) es un complemento de Python que se carga en GDB — y ahora en LLDB — para hacer mucho menos doloroso el desarrollo de exploits y la ingeniería inversa. Añade inspección de heap, búsqueda de gadgets ROP, “telescopio” de registros/pila/punteros, una visualización de contexto inteligente en cada parada, y docenas de comandos que los depuradores base nunca proporcionaron. Es un sucesor en espíritu de PEDA y un hermano de GEF.

Instalación

MétodoComando
Script de instalación (recomendado)git clone https://github.com/pwndbg/pwndbg && cd pwndbg && ./setup.sh
Nixnix profile install github:pwndbg/pwndbg
Arch (AUR)yay -S pwndbg
Carga manual en GDBañade source /path/to/pwndbg/gdbinit.py a ~/.gdbinit
LLDBañade command script import /path/to/pwndbg/lldbinit.py a ~/.lldbinit
Verificarinicia gdb — deberías ver el prompt pwndbg>

Iniciar una Sesión

ComandoDescripción
gdb ./binaryCargar un binario bajo pwndbg
gdb -p PIDAdjuntar a un proceso en ejecución
gdb ./binary coreAbrir un volcado de núcleo para análisis post-mortem
startEjecutar y detenerse en main
entryEjecutar y detenerse en el punto de entrada del ELF
r ARGSEjecutar con argumentos
startiDetenerse en la primera instrucción

Contexto y Navegación

ComandoDescripción
contextRedibujar el contexto completo (registros, desensamblado, pila, backtrace)
context regMostrar solo el panel de registros
ctx-watch EXPRAñadir una expresión al panel de observación del contexto
nextcallAvanzar hasta la siguiente instrucción call
nextretAvanzar hasta el siguiente ret
stepuntilasm movAvanzar hasta un mnemónico dado
xinfo ADDRExplicar a qué corresponde una dirección (qué mapeo/sección)

Inspección de Memoria

ComandoDescripción
telescope ADDRDesreferenciar y “telescopiar” una cadena de punteros
telescope $sp 20Telescopiar 20 entradas desde el puntero de pila
hexdump ADDRVolcado hex+ASCII (el comando que GDB nunca tuvo)
vmmapMostrar el mapa de memoria virtual del proceso
vmmap libcFiltrar el mapa de memoria por nombre
search -t string "PASS"Buscar una cadena en la memoria
search -t bytes 0xdeadbeefBuscar un patrón de bytes en la memoria
distance ADDR1 ADDR2Distancia en bytes entre dos direcciones
p2p MAP1 MAP2Encontrar cadenas de punteros entre dos mapeos

Análisis de Heap (glibc)

ComandoDescripción
heapListar los chunks del heap
binsMostrar todos los bins libres (fast, tcache, small, large, unsorted)
tcacheInspeccionar el tcache
fastbinsMostrar el contenido de los fastbins
malloc_chunk ADDRDecodificar el encabezado de un chunk en una dirección
top_chunkMostrar el chunk superior (wilderness)
vis_heap_chunksVisualizar el diseño del heap con colores
find_fake_fast ADDRBuscar objetivos de chunk falso para fastbin

Desarrollo de Exploits

ComandoDescripción
cyclic 200Generar un patrón De Bruijn (buscador de desplazamientos)
cyclic -l 0x6161616cBuscar el desplazamiento de un valor en el patrón
rop --grep "pop rdi"Buscar gadgets ROP
ropgadgetVolcar gadgets (integración con ROPgadget)
checksecMostrar las mitigaciones del binario (NX, PIE, RELRO, canary)
gotMostrar la GOT y las direcciones resueltas
pltMostrar la PLT
aslrMostrar/alternar ASLR para el proceso depurado
canaryMostrar el valor actual del canario de pila

Puntos de Interrupción y Observación

ComandoDescripción
b *0x401136Punto de interrupción en una dirección absoluta
b mainPunto de interrupción en un símbolo
breakrva 0x1136Punto de interrupción en una RVA (útil con PIE)
watch GLOBALDetenerse cuando cambia un valor
rwatch ADDRDetenerse en un acceso de lectura
ignore N COUNTIgnorar un punto de interrupción N veces

Flujos de Trabajo Comunes

# Encontrar el desplazamiento exacto para sobrescribir una dirección de retorno guardada
pwndbg> cyclic 200
pwndbg> r            # pega el patrón, provoca el fallo
pwndbg> cyclic -l $rsp   # reporta el desplazamiento

# Inspeccionar las mitigaciones y luego buscar una cadena ROP compatible con one-gadget
pwndbg> checksec
pwndbg> rop --grep "pop rdi"

# Recorrer un use-after-free de heap
pwndbg> vis_heap_chunks
pwndbg> bins

pwndbg frente a GEF frente a PEDA

CaracterísticapwndbgGEFPEDA
Compatibilidad con GDB
Compatibilidad con LLDBNoNo
Análisis de heapProfundo (glibc)BuenoLimitado
Herramientas de ROPIntegradasIntegradasIntegradas
Desarrollo activoMínimo

Recursos