Stack 0

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



Stack 1

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"')