Esegui la variabile ambientale del modulo mentre lo stack non è eseguibile

2

È successa una cosa strana. Ho creato EGG = NOPs + shellcode. Poi ottengo l'indirizzo di EGG;

Hofattooverflowdelbufferehosaltatosudiessoehoottenutolashell(l'indirizzodellashellèilsecondoparametro).Com'èpossibileselostacknonèeseguibile?

    
posta user2779060 29.12.2014 - 21:10
fonte

1 risposta

1

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.

    
risposta data 09.10.2016 - 00:30
fonte

Leggi altre domande sui tag