pwntools — Framework d'exploitation

Python CTF incontournable

Qu'est-ce que pwntools ?

pwntools est la bibliothèque Python de référence pour les challenges d'exploitation binaire (pwn). Elle fournit des fonctions pour interagir avec des processus ou des services réseau, construire des payloads, trouver des gadgets ROP, et manipuler des structures binaires.

Template de base

from pwn import *

# Connexion
p = process("./binary")          # processus local
p = remote("target", 4444)       # service distant

# Envoyer et recevoir
p.sendline(b"hello")
p.recvuntil(b"Password: ")
response = p.recvline()

# Construire un payload
offset = 72
ret    = 0x401234
payload = flat(b"A" * offset, ret)

# Debug interactif
p.interactive()

Fonctions utiles

cyclic(200)              # générer un pattern
cyclic_find(0x61616174)  # trouver l offset

p64(0x401234)   # packer en little-endian 64 bits
u64(data)       # unpacker 64 bits

flat(a, b, c)   # concaténer en bytes
fit({0: b"A"*8, 8: p64(addr)})  # payload avec offset

elf = ELF("./binary")    # charger le binaire
elf.sym["main"]          # adresse d une fonction
elf.got["puts"]          # adresse dans la GOT
elf.plt["system"]        # adresse dans la PLT

libc = ELF("./libc.so.6")
libc.address = leak - libc.sym["puts"]  # rebaser

GDB intégré

gdb.attach(p, """         # attacher GDB au processus
    b *main+42
    continue
""")

# Ou démarrer dans GDB
p = gdb.debug("./binary", """break main
continue""")