Obiettivo: modifica del valore della variabile modified
a tempo di esecuzione
gets()
è deprecata in favore di fgets()
che limita i caratteri letti → non c’è controllo sul buffer overflow
pmap
stampa il layout di memoria di un processo in esecuzione → lo stack del programma è piazzato sugli indirizzi alti
Lo stack contiene un record di attivazione (frame) per ciascuna funzione invocata → l’inserimento di frame fa crescere lo stack verso gli indirizzi bassi di memoria
Lo stack viene gestito mediante tre registri
La variabile buffer
dovrebbe essere piazzata ad un indirizzo più basso della variabile modified
L’attaccante fornisce a stack0 un input qualsiasi lungo almeno 65 caratteri
python -c 'print "a" * 65' | /opt/protostar/bin/stack0
Obiettivo: impostare la variabile modified
al valore 0x61626364
a tempo di esecuzione
0x61
→ a, 0x62
→ b, 0x63
→ c, 0x64
→ d
L’architettura Intel è Little Endian → l’input appare al rovescio nell’output
/opt/protostar/bin/stack1 $(python -c 'print "a" * 64 + "dcba"')