Stack Canary Bypass — Contournement du canari
★★★★★
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