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!

s

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:

Nella pratica:

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”).
crackmd5
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.

Il codice del programma potete scaricarlo dalla pagina dei Downloads.

Related Posts with Thumbnails
Be Sociable, Share!
PDF Creator    Invia l'articolo in formato PDF   

15 thoughts on “Crack di hash MD5 con PHP

  1. Ciao,
    ottimo programma! grazie.
    Avrei da farti una domanda.
    Mettiamo che io oggi provo combinazioni fino 5 bytes e non la trovo. Domani mi piacerebbe provare dai 6 bytes in avanti senza però dover ripassare quelle già fatte precedentemente… come posso fare???
    Grazie ancora
    R.

  2. Si, trovi il nuovo codice sempre nella sezione download.

    Adesso troverai un terzo parametro che indica il numero di caratteri di partenza per calcolare la combinazione. Il valore è opzionale così che la sintassi da riga di comando è compatibile con la prima versione.

    Saluti.

  3. Ciao e grazie…anche io ho degli hash md5, sto provando a convertirli con Cain in Bruteforce ma ci mette una vita…il tuo programma mi sembra interessante, ma non trovo neanche io la pagina dei download! E una volta scaricato il codice, come faccio per farlo partire? Scusa ma sono alle prime armi, però invece che chiedere aiuto sto cercando di studiare!

  4. La pagina download è tra le voci di menù in alto, sotto al mio nome.

    Per quanto riguarda lo script in PHP devi ovviamente installare il PHP sul tuo computer, se non sei molto esperto ti consiglio di installare un pacchetto come WAMP, XAMPP o LAMP (cercali con Google).

    Una volta installati, portati sulla riga di comando e interpreta il mio codice con PHP (guarda l’immagine nell’articolo, trovi la linea di comando che uso io per eseguire lo script).

    Buona fortuna.

  5. ehm…scusa ancora, ma avrei una domanda..
    mi è sembrato di capire che l’hash md5 sia un codice esadecimale
    Ora, ho visto dei siti nei quali si può trasformare in codice binario…e da lì non si può convertire in Ascii?
    Anche se l’hash fosse criptato, si potrebbe prima decriptarlo in esadecimale normale (visto in vari siti)
    Io ho provato, ma invece che un testo di senso compiuto mi uscivano i simbolini tipo Unicode. Perchè?
    (in php ho provato ma non sono riuscita neanche a capire bene come funzioni…mi servono un paio di giorni di impegno serio!!!)

  6. No, sei fuori strada. L’hash è un calcolo matematico irreversibile, non puoi trasformarlo con vari passaggi in testo in chiaro.
    Forse ti confondi con altri tipi di criptazione come l’utilizzo della funzione XOR che è reversibile (se si conosce la chiave) o altri ancora.
    Le uniche 2 cose che si possono fare con MD5 sono il Forza Bruta e la collisione cioè trovare un testo diverso dall’originale il cui hash sia identico. E’ questo secondo punto che ha reso nel tempo MD5 insicuro.
    Leggi il mio articolo “MD5 sicuro o insicuro?”.

  7. Ciao, ho letto il tuo articolo e, sempre se ho capito bene, il tuo ragionamento è anche abbastanza semplice.
    Ho provato a cercare il tuo script nell’ area download, ma ho trovato solamente sei voci che recitano come di seguito “This is not a valid download id”.
    Oltre a questo avrei una domanda: se io per assurdo passassi un anno intero a calcolare l’ MD5 della maggior parte delle parole e delle combinazioni che potrebbero essere utilizzate come pwd, prendessi la pwd in chiaro e quella in MD5 e le mettessi in due colonne, dentro un DB MYSQL…potrei fare uno script con una sola query sul DB che va a cercare l’ MD5 nella colonna “MD5″ per avere la pwd in chiaro corrispondente?
    Grazie.

  8. Ciao, il download adesso funziona (ho cambiato provider e ho scordato di aggiornare la tabella).
    Per quanto riguarda la domanda, benché sia formalmente corretta, dovresti tenere presente molte altre cose. Per esempio, in un anno di lavoro puoi generare milioni di hash ma non tutti gli hash realizzabili dalla combinazione di lettere maiuscole, minuscole, numeri e simboli normalmente accettati per comporre una password. Poi devi tener presente i tempi necessari sia a calcolare gli hash (dipende dal codice che si scrive e dalla macchina che lo esegue), sia ad effettuare la ricerca (ammesso sia possibile salvare i miliardi di miliardi di combinazioni dei caratteri che ho detto sopra.
    Detto tutto questo… la risposta alla domanda è si. Ed è anche il metodo usato dai database online come MD5Crack…

Leave a Reply