Perché questo buffer overflow ha payload e system- & exit- & BINSH

0

Sto seguendo un tutorial per scrivere un semplice overflow del buffer. Ho conoscenza (di base) dell'assemblaggio e dello stack. Ho scritto un overflow del buffer basato sullo stack e l'ho capito. Il programma che sto sfruttando questa volta ha abilitato NX, il che significa che non è possibile eseguire codice dallo stack o una variabile di ambiente. L'autore di questo tutorial suggerisce quindi di dichiarare una variabile di ambiente:

export $BINSH="/bin/sh"

e il payload alimentato al buffer overflow sarà l'indirizzo del 'sistema' nel programma, seguito dall'indirizzo 'exit' nel programma e infine dall'indirizzo della nostra variabile di ambiente:

payload is : &system - &exit - &BINSH

Sono riuscito a far funzionare l'exploit ma non capisco la teoria alla base del payload. Sfortunatamente non è spiegato nel tutorial (che può essere trovato qui ).

Perché sovrascrivo EIP con l'indirizzo su "sistema" (e a cosa corrisponde questo indirizzo)?

Come si inserisce l'indirizzo nella mia variabile di ambiente contenente / bin / sh come la terza parola nel payload lo esegue?

PS: Linux, 32 bit. Intel

    
posta Juicy 04.02.2014 - 02:49
fonte

1 risposta

1

Questa è una classe di attacco conosciuta come return-to-libc che è un metodo di esclusione DEP.Questo funziona chiamando funzioni esistenti in una libreria condivisa che conosci è eseguibile. In questo caso, l'exploit chiama la funzione system () .

Le funzioni passano i parametri sullo stack. Controllando lo stack, puoi controllare quali funzioni vengono passate nella chiamata system() . In questo caso, dici a system() di chiamare qualsiasi cosa sia nella variabile ambientale che hai impostato su /bin/sh . In sostanza, stai chiamando system(/bin/sh) che genera una shell. Boom, sfruttato.

    
risposta data 04.02.2014 - 04:40
fonte

Leggi altre domande sui tag