Stack buffer overflow: le basi che reggono tutto
Le variabili locali vivono sullo stack, accanto all'indirizzo di ritorno della funzione. Un gets() o un strcpy() senza limiti scrive oltre il buffer e raggiunge quel puntatore.
void vuln(){ char buf[64]; gets(buf); } // nessun limiteCon 64 byte di buffer + salvataggio di rbp, il 73esimo gruppo di byte finisce nel return address. Controllandolo, controlli dove salta la CPU al ret.
Trovare l'offset
cyclic 200 # pattern De Bruijn
# dopo il crash:
cyclic -l 0x6161... # offset esatto del return addressDifesa
Stack canary (rileva l'overflow prima del ret), NX (stack non eseguibile), ASLR, e soprattutto funzioni con limiti (fgets, strncpy). Compilatori moderni con _FORTIFY_SOURCE intercettano molti casi.