Paolo Perego
Paolo Perego Specialista di sicurezza applicativa e certificato OSCE e OSCP, amo spaccare e ricostruire il codice in maniera sicura. Sono cintura nera di taekwon-do, marito e papà. Ranger Caotico Neutrale, scrivo su @codiceinsicuro.

IOLI Crackme 0x00

IOLI Crackme 0x00 Photo by on Unsplash
408 parole - Lo leggerai in 2 minuti

Smaltita la sbornia della certificazione e ricevuto il tanto agoniato “pezzo di carta”, è tempo di pensare al prossimo passo. Il prossimo passo si chiama OSCE, è ancora più tosta ed è incentrata sulla scrittura di exploit.

Per partire, ho deciso di iniziare questo viaggio dalla binary exploitation, con degli esercizi base, per prendere confidenza con l’assembly ed il patching di file binari.

I primi esercizi che ho scelto sono gli IOLI Crackme, una serie di file binari pensati per essere patchati per accettare qualsiasi password in ingresso.

crackme0x00

La prima cosa che ho fatto, analizzando l’eseguibile crackme0x00, è stato quello di stampare tutte le stringhe attraverso il comando strings. Tra il testo all’interno dell’eseguibile, una stringa 250382, poteva essere una password. Provandola, otteniamo il messaggio che ci conferma che è la password corretta.

Tuttavia, lo scopo dell’esercizio è quello di modificare il binario affinché accetti qualsiasi password in ingresso. Per fare questo, usiamo radare2, uno strumento che aiuta nel debugging e nel disassembly, incluso in Kali Linux e disponibile per qualsiasi sistema operativo.

Lanciando radare coi parametri -A e -w, diciamo al tool di iniziare a fare delle analisi sul binario (-A) aprendo il file in scrittura (-w) per farne il patching.

Osservando il codice della funzione main, è immediato vedere il punto dove viene caricato il valore costante “250382”, della password, dove viene fatto il compare con quanto letto dall’utente e il jump nel caso di successo.

Tutto quello che dobbiamo fare, quindi, è modificare l’istruzione di jump, da condizionato ad una situazione di uguaglianza, ad un jump non condizionato. Per fare questo, ci posizioniamo sull’istruzione di jump, attraverso il comando ‘s’ specificando l’indirizzo dell’istruzione interessata e con il comando ‘wa’, scriviamo il codice assembly corrispondente ad un salto non condizionato.

In questo modo, qualsiasi sia la stringa inserita dall’utente, verrà preso il branch che porta ad un messaggio di password accettata.

Off by one

Questo esercizio era veramente molto semplice e mostra un utilizzo molto semplice di radare per disassemblare un binario, farne del reverse, capire dove e cosa modificare e modificare il codice per cambiare il comportamento del binario stesso.

Una volta finita questa serie, penso di passare agli esercizi di Stack Overflow di Protostar.

La linea guida che sto seguendo, per iniziare la preparazione all’OSCE è quella descritta in questo post. Il viaggio sembra lungo, ma ormai… fatta la prima tappa bisogna per forza continuare.

Enjoy it!

Vuoi aiutarmi a portare avanti il progetto Codice Insicuro con una donazione? Fantastico, allora non ti basta che premere il pulsante qui sotto.

Supporta il progetto

comments powered by Disqus
Codice Insicuro, blog di Cyber Security, sviluppo sicuro, code review e altro.   Non perdere neanche un post, iscriviti ora alla mailing list