Stack Canary Bypass — Contournement du canari

Stack Protection

Le canari

Le stack canary est une valeur aléatoire placée entre les variables locales et l'adresse de retour ; elle est vérifiée à l'épilogue. Un overflow qui l'écrase déclenche __stack_chk_fail et arrête le programme.

Techniques de contournement

# 1. Leak du canari (format string, lecture mémoire)
%p%p%p... -> repérer la valeur (finit par 00, aléatoire)

# 2. Brute force (fork : le canari reste identique par fork)
for b in range(256): tester octet par octet

# 3. Écraser un pointeur AVANT le canari (sans le toucher)
# 4. Overwrite via une primitive d écriture arbitraire

Reconstruction

# Après leak, réinclure le canari dans le payload
payload = b'A'*off_to_canary + p64(canary)
payload += b'B'*8        # RBP sauvé
payload += rop_chain     # adresse de retour