venerdì 9 marzo 2012

Semtex level 4 writeup

Il livello 4 di questo wargame è stato piuttosto difficile per me... Mai avevo usato ptrace(),e soprattutto era da un po' che non toccavo il C... Nella descrizione del livello si poteva leggere:

Ptrace your way
Pass prints the password for the level you are on. Try to make it print the next level's password.
This time it is not so easy:
/semtex/semtex4: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.15, stripped

Se il programma veniva lanciato, restituiva la password dell'utente che lo lanciava... Ed il file aveva solo i permessi di esecuzione, quindi tutti i tools come gdb,objdump,readelf erano inutili per risolvere il livello... E non si poteva usare LD_PRELOAD come fatto con il livello 2, visto che il programma è linkato staticamente... E qui arriva ptrace(), che con la possibilità di fork() e di monitoraggio delle chiamate mi ha permesso di inserirmi fra una chiamata e l'altra e modificare il valore... Il codice è molto commentato, e mi sono basato su questa pagina(ringrazio l'UIC per la risorsa condivisa e Bender0 per aver creato questo tutorial) per aggiustarlo un po':


Il codice come sempre in C è di difficilissima comprensione, quindi ho aggiungo i commenti alle singole scritture... Non ricordavo quanto il C fosse pieno di parentesi graffe... Alla fine ce ne sono 4 di fila... Assurdo... Volevo risolvere questo livello con python, ma la mancanza di documentazione su pytrace ha reso questo impossibile... Io non imparo un bel niente dalla documentazione, mentre da esempi svolti si impara molto di più...  Una cosa che non ho provato, ma che proverò... Se invece di 6005 avessi messo 6006???

Nessun commento: