È 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