È successa una cosa strana. Ho creato EGG = NOPs + shellcode. Poi ottengo l'indirizzo di EGG;
Hofattooverflowdelbufferehosaltatosudiessoehoottenutolashell(l'indirizzodellashellèilsecondoparametro).Com'èpossibileselostacknonèeseguibile?
È successa una cosa strana. Ho creato EGG = NOPs + shellcode. Poi ottengo l'indirizzo di EGG;
Hofattooverflowdelbufferehosaltatosudiessoehoottenutolashell(l'indirizzodellashellèilsecondoparametro).Com'èpossibileselostacknonèeseguibile?
Questo è sicuramente perché non stai eseguendo nulla nello stack. Senza il file binario in questione, cercherò di indovinare cosa sta succedendo qui.
Con il primo print "A"*268 + '\x68\x96\x04\x08'
probabilmente stai sovrascrivendo un puntatore per puntare a 0x08049668
. Questo indirizzo è probabilmente una voce GOT per una funzione chiamata in seguito come printf()
o exit()
.
Quindi, nel secondo argomento specifichi il valore a cui punta il puntatore. In altre parole, si sovrascrive quella voce GOT ( 0x08049668
) con l'indirizzo del codice shell ( 0xbffff891
).
Quindi, quando il programma chiama quella funzione di libreria condivisa ( exit()
, printf()
, whatever()
, ...), verrà chiamato il codice shell, perché è stato sovrascritto.
In questo processo, nessun codice viene inserito nello stack. Un puntatore nello stack viene sovrascritto. È tutto. Quindi si utilizza quel puntatore sovrascritto per sovrascrivere un indirizzo di funzione della libreria condivisa con l'indirizzo del codice shell.
Leggi altre domande sui tag exploit buffer-overflow shellcode