Crack di hash MD5 con PHP
Nel titolo uso la parola “crack” ma vorrei chiarire subito che NON SI PUO’ craccare un hash MD5 (ho usato “crack” perché sarebbe stato troppo lungo mettere una cosa simile a “trovare la corrispondente stringa in chiaro di un hash MD5″). Craccare prevede il reverse della funzione e con MD5 questo non è possibile. Ho letto in rete molti articoli di “esperti” informatici che in modo disinvolto usano la parola crack o addirittura indicano come reversibile un hash MD5. Questo è falso!
Quello che è possibile fare è usare metodi “forza bruta” per trovare la corrispondente stringa in chiaro già precedentemente calcolata. Questo è possibile facendo un match tra due hash, quando l’hash sconosciuto è uguale all’hash archiviato si va a vedere il corrispondente testo in chiaro. Per far questo è necessario avere un database contenente anche solo due informazioni per record: l’hash e il testo in chiaro.
Partiamo dalla base, consideriamo la parola “password” e calcoliamone l’hash MD5, otterremo la stringa “5f4dcc3b5aa765d61d8327deb882cf99″. Archiviando questa informazione avremi un record che associa la parola all’hash. Se facessimo questa operazione su tutti i vocabolari del mondo e aggiungessimo tutte le combinazioni di lettere e numeri usate principalmente dalle persone quando scrivono una password o uno username ecco che potremmo ragionevolmente dire che avremmo in mano uno strumento potente per recuperare il testo in chiaro di un hash MD5 (questo vale anche per altre codifiche come SHA1).
Ho scritto quindi un programmino a riga di comando in linguaggio PHP per calcolare l’hash delle combinazioni di caratteri ASCII e compararlo con l’hash sconosciuto, oggetto della ricerca. L’utente quindi, lanciando il programma, deve indicare l’hash di cui cerca la corrispondenza in chiaro ed il numero di caratteri di cui pensa sia fatto il testo corrispondente all’hash sconosciuto. Facciamo un esempio pratico:
BruteForce.php
Nella pratica:
C:\ForzaBruta.php 098f6bcd4621d373cade4e832627b4f6 4
Notate che come parametri vengono passati l’hash sconosciuto ed il numero di caratteri di cui pensiamo sia lunga la parola corrispondente all’hash sconosciuto (in questo caso la parola è “test”).
E’ bene fare ora alcune pratiche considerazioni. Essendo un sistema a forza bruta, più alto è il numero di caratteri di cui pensiamo sia fatto il testo in chiaro, più aumenta considerevolmente il tempo di calcolo. Per darvi un’idea, su un PC con un Intel Core 2 Duo e 2Gb di RAM per calcolare tutte le combinazioni ASCII fino a 4 caratteri ed arrivare a scoprire che si tratta della parola “test” è stato necessario 1h di tempo circa. Già un testo lungo 5 caratteri necessita di circa 16/17h… e così via.

























gennaio 18th, 2010 - 17:25
Ma questo programma lo hai? R3m3mb3r? Lo posti?