venerdì 9 dicembre 2011

Protostar Stack3 writeup

Era da un po' che non effettuavo un buffer overflow leggermente complesso... Questo è si facile, ma sicuramente su un livello superiore rispetto agli altri 3 livelli precedenti... Non mi ricordavo assolutamente niente... Quindi ho riguardato il mio video sul mio primo buffer overflow:



Quindi riguardando questo video mi è venuto di nuovo tutto in mente... Quello che cerchiamo è una "Segmentation fault" , quell'errore che ci permette di controllare l'eip, l'instruction pointer e rimandarlo dove più ci piace... La macchina, come già sappiamo, riceve i dati in little endian, quindi tutti gli offset vanno invertiti, dal byte più significativo all'ultimo, mentre gdb ce li restituisce in little endian... Alla fine si tratta solo di capovolgere l'offset...

In questo caso poi non ho usato il pattern_create di metasploit... Abbiamo il codice sorgente che ci informa del buffer, quindi stampiamo 64 A e abbiamo riempito il buffer... Ne aggiungiamo altre 4 per controllare che possiamo sovrascrivere l'eip, e fatto questo sempre con gdb troviamo l'offset della funzione win presente nel codice a cui ricollegarci... Il codice di questo livello è:


Qui si legge perchè io vado a cercare la funzione win, perchè così è definita dentro al codice sorgente. Ecco i comandi per gdb:


Il programma non mi accettava dentro python... Non so come mai... Ma tanto cambia poco... Con i r vediamo che l'eip è stato sovrascritto e con disassemble win troviamo il valore dell'ebp a cui ricollegarci... Per ogni macchina i valori sono diversi... Quindi i valori qui riportati potrebbero essere diversi, ma cambia poco... Dalla schermata di disassemble win prendere il primo valore in alto, quello con scritto accanto... Io riporto il mio codice a cui cambiare solo l'offset... Ovviamente in python:
Otteniamo così la frase code flow successfully changed...

Nessun commento: