Aller au contenu

pwndbg - Antisèche Développement d'Exploits GDB/LLDB

pwndbg - Antisèche Développement d’Exploits GDB/LLDB

pwndbg (prononcé “pwn-dee-bee-gee”) est un plugin Python qui se charge dans GDB — et maintenant LLDB — pour rendre le développement d’exploits et l’ingénierie inverse beaucoup moins douloureux. Il ajoute l’inspection du heap, la recherche de gadgets ROP, le “telescoping” des registres/pile/pointeurs, un affichage de contexte intelligent à chaque arrêt, et des dizaines de commandes que les debuggers ne fournirent jamais. C’est un successeur spirituel de PEDA et un frère de GEF.

Installation

MéthodeCommande
Script d’installation (recommandé)git clone https://github.com/pwndbg/pwndbg && cd pwndbg && ./setup.sh
Nixnix profile install github:pwndbg/pwndbg
Arch (AUR)yay -S pwndbg
Chargement GDB manuelajouter source /path/to/pwndbg/gdbinit.py à ~/.gdbinit
LLDBajouter command script import /path/to/pwndbg/lldbinit.py à ~/.lldbinit
Vérificationdémarrer gdb — vous devriez voir l’invite pwndbg>

Démarrage d’une Session

CommandeDescription
gdb ./binaryCharger un binaire sous pwndbg
gdb -p PIDAttacher à un processus en cours d’exécution
gdb ./binary coreOuvrir un dump mémoire pour l’analyse post-mortem
startExécuter et arrêter à main
entryExécuter et arrêter au point d’entrée ELF
r ARGSExécuter avec des arguments
startiS’arrêter à la toute première instruction

Contexte et Navigation

CommandeDescription
contextRedessiner le contexte complet (registres, désassembly, pile, backtrace)
context regAfficher uniquement le volet des registres
ctx-watch EXPRAjouter une expression au volet de surveillance du contexte
nextcallExécuter pas à pas jusqu’à la prochaine instruction call
nextretExécuter pas à pas jusqu’au prochain ret
stepuntilasm movExécuter pas à pas jusqu’à un mnémonique donné
xinfo ADDRExpliquer à quoi une adresse correspond (quel mappage/section)

Inspection Mémoire

CommandeDescription
telescope ADDRDéréférencer et “telescoper” une chaîne de pointeurs
telescope $sp 20Telescoper 20 entrées à partir du pointeur de pile
hexdump ADDRDump hex+ASCII (la commande que GDB n’a jamais eu)
vmmapAfficher la carte mémoire virtuelle du processus
vmmap libcFiltrer la carte mémoire par nom
search -t string "PASS"Chercher une chaîne en mémoire
search -t bytes 0xdeadbeefChercher un motif d’octets en mémoire
distance ADDR1 ADDR2Distance en octets entre deux adresses
p2p MAP1 MAP2Trouver des chaînes de pointeurs entre deux mappages

Analyse du Heap (glibc)

CommandeDescription
heapLister les chunks de heap
binsAfficher tous les bins libres (fast, tcache, small, large, unsorted)
tcacheInspecter le tcache
fastbinsAfficher le contenu des fastbins
malloc_chunk ADDRDécoder un en-tête de chunk à une adresse
top_chunkAfficher le chunk supérieur (wilderness)
vis_heap_chunksVisualiser la disposition du heap avec des couleurs
find_fake_fast ADDRChercher les cibles de fake-chunk fastbin

Développement d’Exploits

CommandeDescription
cyclic 200Générer un motif De Bruijn (chercheur de décalage)
cyclic -l 0x6161616cChercher le décalage d’une valeur dans le motif
rop --grep "pop rdi"Chercher des gadgets ROP
ropgadgetDumper les gadgets (intégration ROPgadget)
checksecAfficher les mitigations binaires (NX, PIE, RELRO, canary)
gotAfficher la GOT et les adresses résolues
pltAfficher la PLT
aslrAfficher/basculer ASLR pour le debugee
canaryAfficher la valeur actuelle du canary de pile

Points d’Arrêt et Watchpoints

CommandeDescription
b *0x401136Arrêter à une adresse absolue
b mainArrêter à un symbole
breakrva 0x1136Arrêter à une RVA (pratique avec PIE)
watch GLOBALArrêter quand une valeur change
rwatch ADDRArrêter lors d’un accès en lecture
ignore N COUNTIgnorer un point d’arrêt N fois

Flux de Travail Courants

# Trouver le décalage exact pour écraser une adresse de retour sauvegardée
pwndbg> cyclic 200
pwndbg> r            # coller le motif, crash
pwndbg> cyclic -l $rsp   # rapporter le décalage

# Inspecter les mitigations, puis chercher une chaîne ROP friendly one-gadget
pwndbg> checksec
pwndbg> rop --grep "pop rdi"

# Parcourir une use-after-free du heap
pwndbg> vis_heap_chunks
pwndbg> bins

pwndbg vs GEF vs PEDA

FonctionnalitépwndbgGEFPEDA
Support GDBOuiOuiOui
Support LLDBOuiNonNon
Analyse du heapProfonde (glibc)BonneLimitée
Outils ROPIntégrésIntégrésIntégrés
Développement actifOuiOuiMinimal

Ressources