buffer / heap overflow - registro di ciò che viene eseguito

4

Quando viene eseguito l'overflow del buffer / overflow dell'heap, EIP è quello che indica quale parte verrà eseguita successivamente? Inoltre, quando si sfrutta la vulnerabilità di overflow del buffer, dopo l'esecuzione, ESP punta all'inizio dei codici di exploit (che saranno alcune combinazioni di codici shell e gibbersih)?

Se questo sembra troppo vago, qualcuno può mostrarmi a cosa punta ogni registro durante l'esecuzione degli exploit?

    
posta Sue Katty 11.07.2012 - 13:30
fonte

1 risposta

8

will ESP point to the start of the exploit codes (which will be some combinations of shell codes and gibbersih)?

In realtà, è EIP che indicherà l'inizio del codice exploit invece di ESP. In un classico overflow del buffer di stack, ESP continuerà ad essere dove sarebbe stato con / senza codice exploit. L'unica cosa che sovrascrivi è l'EIP che lo cambia in un indirizzo diverso in memoria - dove hai già "piantato" il tuo codice exploit in qualche modo.

Per illustrare vediamo il diagramma di una pila e i valori delle note di vari registri:

Supponiamochecisiaunbuffersfruttabilenellafunzionedelcalleeincuièpossibilefornireunaquantitàarbitrariadidati(gets,rouguesrtcpy,ecc.).L'attaccantecalcolailnumeroesattodibyteprimadelpuntoinpilaincuièmemorizzatol'indirizzodiritorno(EIP).Quindil'inputpotrebbeesserediforma(ognibloccocorrispondenteaciascunarigarossasotto).

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0834FD4C

dove0834FD4Cèilnuovopuntatorediistruzionichel'attaccantevuolepiazzarenellaposizioneEIPsalvataeleprecedentiAsonosolopadperraggiungerel'EIP(ricordachelostacksiriduce)

Dopol'overflow,diciamochelapilaassomigliaaquesta:

A questo punto, l'attaccante ha piazzato con successo il nuovo EIP. Ogni volta che la funzione del callee ritorna, l'istruzione ret poperà il registro EIP (ora 0x0834FD4C) al registro % eip e il flusso di controllo riprenderà da questo indirizzo di memoria e inizierà ad eseguire le istruzioni che trova lì . Ancora una volta, l'attaccante deve assicurarsi di aver pianificato il codice exploit in questa posizione in anticipo.

Invio post-callee:
EBP : può cambiare o non può cambiare in base a ciò che l'attaccante fornisce nei dati del buffer overflower. Ricorda che dal momento che deve tromp EBP prima che raggiunga EIP, certamente dovrà fornire un valore per EBP pure. Generalmente l'attaccante sarà abbastanza diligente da enumerare lo stack per determinare l'EBP corrente e installarlo nel payload in modo che rimanga lo stesso di prima. Per es. potrebbe (e dovrebbe) fornire qualcosa come:

AAAAAAAA AAAAAAAA AAAAAAAA AAAAAAAA 082376ED 0834FD4C

Dove 082376ED è l'EBP esistente. Ciò assicurerà che non venga modificato in un valore arbitrario nella missione per sovrascrivere l'EIP.

EIP : viene modificato nel nuovo valore

ESP : tornerà allo stesso valore indipendentemente dal sovraccarico del buffer o meno.

Quindi, dopo il ritorno della funzione, vivrai nello stack frame del vecchio chiamante, ma eseguirai un altro codice.

Smashing the Stack for Fun and Profit è un'ottima fonte per ulteriori informazioni.     
risposta data 11.07.2012 - 19:48
fonte

Leggi altre domande sui tag