Salta ai contenuti

pwndbg - Cheatsheet GDB/LLDB per lo sviluppo di exploit

pwndbg - Cheatsheet GDB/LLDB per lo sviluppo di exploit

pwndbg (pronunciato “pwn-dee-bee-gee”) è un plugin Python che si carica in GDB — e ora anche in LLDB — per rendere lo sviluppo di exploit e l’ingegneria inversa molto meno dolorosi. Aggiunge ispezione dell’heap, ricerca di gadget ROP, “telescoping” di registri/stack/puntatori, un display di contesto intelligente ad ogni stop, e dozzine di comandi che i debugger core non hanno mai fornito. È un successore spirituale di PEDA e un fratello di GEF.

Installation

MetodoComando
Setup script (consigliato)git clone https://github.com/pwndbg/pwndbg && cd pwndbg && ./setup.sh
Nixnix profile install github:pwndbg/pwndbg
Arch (AUR)yay -S pwndbg
Manual GDB loadaggiungi source /path/to/pwndbg/gdbinit.py a ~/.gdbinit
LLDBaggiungi command script import /path/to/pwndbg/lldbinit.py a ~/.lldbinit
Verifyavvia gdb — dovresti vedere il prompt pwndbg>

Avvio di una sessione

ComandoDescrizione
gdb ./binaryCarica un binario sotto pwndbg
gdb -p PIDSi collega a un processo in esecuzione
gdb ./binary coreApri un core dump per analisi post-mortem
startEsegui e interrompi a main
entryEsegui e interrompi all’entry point ELF
r ARGSEsegui con argomenti
startiFerma alla primissima istruzione

Contesto e navigazione

ComandoDescrizione
contextRidisegna il contesto completo (regs, disasm, stack, backtrace)
context regMostra solo il riquadro dei registri
ctx-watch EXPRAggiungi un’espressione al riquadro di osservazione del contesto
nextcallEsegui fino alla prossima istruzione call
nextretEsegui fino al prossimo ret
stepuntilasm movEsegui fino a una data mnemonico
xinfo ADDRSpiega a cosa si mappa un indirizzo (quale mapping/sezione)

Ispezione della memoria

ComandoDescrizione
telescope ADDRDereferenzia e “telescopia” una catena di puntatori
telescope $sp 20Telescopia 20 voci dal puntatore dello stack
hexdump ADDRDump esadecimale + ASCII (il comando che GDB non ha mai avuto)
vmmapMostra la mappa della memoria virtuale del processo
vmmap libcFiltra la mappa di memoria per nome
search -t string "PASS"Cerca una stringa in memoria
search -t bytes 0xdeadbeefCerca un modello di byte in memoria
distance ADDR1 ADDR2Distanza in byte tra due indirizzi
p2p MAP1 MAP2Trova catene di puntatori tra due mappings

Analisi dell’Heap (glibc)

ComandoDescrizione
heapElenca i chunk dell’heap
binsMostra tutti i bin liberi (fast, tcache, small, large, unsorted)
tcacheIspeziona il tcache
fastbinsMostra il contenuto dei fastbin
malloc_chunk ADDRDecodifica un’intestazione di chunk a un indirizzo
top_chunkMostra il chunk top (wilderness)
vis_heap_chunksVisualizza il layout dell’heap con colori
find_fake_fast ADDRCerca target di fake-chunk fastbin

Sviluppo di exploit

ComandoDescrizione
cyclic 200Genera un modello De Bruijn (offset finder)
cyclic -l 0x6161616cCercaa l’offset di un valore nel modello
rop --grep "pop rdi"Cerca gadget ROP
ropgadgetDumpa i gadget (integrazione ROPgadget)
checksecMostra le mitigazioni binarie (NX, PIE, RELRO, canary)
gotMostra il GOT e gli indirizzi risolti
pltMostra il PLT
aslrMostra/attiva ASLR per il debugee
canaryMostra il valore del canary dello stack corrente

Breakpoint e Watchpoint

ComandoDescrizione
b *0x401136Interrompi a un indirizzo assoluto
b mainInterrompi a un simbolo
breakrva 0x1136Interrompi a un RVA (utile con PIE)
watch GLOBALInterrompi quando un valore cambia
rwatch ADDRInterrompi sull’accesso in lettura
ignore N COUNTIgnora un breakpoint N volte

Workflow comuni

# Trova l'offset esatto per sovrascrivere un indirizzo di ritorno salvato
pwndbg> cyclic 200
pwndbg> r            # incolla il pattern, crash
pwndbg> cyclic -l $rsp   # segnala l'offset

# Ispeziona le mitigazioni, poi cerca una catena ROP amichevole per one-gadget
pwndbg> checksec
pwndbg> rop --grep "pop rdi"

# Percorri un heap use-after-free
pwndbg> vis_heap_chunks
pwndbg> bins

pwndbg vs GEF vs PEDA

FunzionepwndbgGEFPEDA
Supporto GDB
Supporto LLDBNoNo
Analisi heapProfonda (glibc)BuonaLimitata
Strumenti ROPIntegratiIntegratiIntegrati
Sviluppo attivoMinimo

Risorse