pwntools — Framework d'exploitation
★★★★★
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""")