sabato 10 dicembre 2011

Protostar Stack4 writeup

Il quarto livello degli stack overflow è praticamente identico al terzo livello, fatta eccezione che per sovrascrivere l'eip si ha bisogno di scrivere molto di più oltre al buffer, perchè come suggerisce anche il livello stesso negli hint, l'eip potrebbe non essere subito dopo il buffer... Ma in questo caso, con l'aiuto di un tool fornito dal pacchetto metasploit, si trova facilmente quante A scrivere per arrivare al buffer... Alla fine è completamente identico... Qui il codice del livello:

Il codice è comprensibilissimo anche per chi non conosce il C, l'obiettivo è richiamare una funzione, win(), che è inutilizzata durante il main()... Questi i comandi da dare per arrivare alla soluzione:

I due comandi pattern* vanno dati sulla macchina attaccante, e di solito i tools di metasploit si trovano in /opt/metasploit-4.1.4/msf3/tools/... Con pattern_create si realizza una stringa di caratteri da utilizzare quanto sovrascrivere prima di arrivare all'eip, quanto passare per ottenere la segmentation fault... Mentre con pattern_offset si ottiene proprio il valore che viene usato per scrivere, di solito la lunga serie di A...

Si ottiene che l'offset è di 76 char, poi abbiamo i 4 byte da assegnare all'eip, reindirizzandolo dove vogliamo, cioè alla funzione win(), come fatto nel livello precedente... Ecco il codice python da usare:

Come sempre gli indirizzi saranno diversi da macchina a macchina... Quindi il mio
0x63413563 sarà dverso, come pure l'indirizzo che io ho assegnato a shellcode dentro al codice python... Che è stato ribaltato per tenere conto del fatto che la macchina è in little endian... Quindi il byte più rappresentativo è all'ultimo posto... Io in questo modo ottengo il messaggio code flow successfully changed, ma anche il segmentation fault... Non sono riuscito ad eliminarlo, ma l'importante è ottenere il messaggio...

Nessun commento: