Descifrando contraseñas MD5

El viernes pasado mi director de proyecto me dio un mandato SQL para que probara si era vulnerable a inyecciones. Pasó la prueba, pero no habría sido muy raro que hubiese funcionado y me hubiera soltado todas las contraseñas.

Visto lo visto, me decidí a no guardar las contraseñas en texto plano, sino en MD5. El cambio a penas me llevó 5 minutos, pero quedé intrigado… ¿sería seguro?

Como no puedo estar quieto, me hice una pequeña herramienta de auditoría que extraía la lista de usuario, contraseña (md5) de la base de datos (o de un fichero con formato "login hashMD5") e intentaba sacar la contraseña. Por si alguien no sabe nada de MD5, aquí va una explicación muy por encima:

MD5 cifra la información utilizando un algoritmo fácil de realizar en un sentido, es decir, codificar la palabra "hola" nos llevará un abrir y cerrar de ojos, sin embargo, pasar de la versión cifrada a la palabra original resulta imposible. ¿Cómo puede el sistema verificar entonces si nuestra contraseña es correcta? En la base de datos está la versión codificada, tú introduces la contraseña, el sistema le aplica MD5, si coincide con la que tiene almacenada, es correcta, si no… mala suerte.

¿Cómo es posible que haya hecho un programita para crackear md5? Fácil, porque no lo he hecho. Imagina que tengo todas las combinaciones posibles con su correspondiente MD5… pasar de uno a otro sería tribial, el problema es que eso tomaría mucho espacio. Lo que hago es hacer uso de una web que tiene almacenadas un puñado de Hashes MD5 comunes… si por casualidad coincide, el programa te la mostrará.

Os dejo el programa y un fichero de ejemplo por si a alguien le resultase útil.

About the Author

Me llamo Pablo Carballude González, soy graduado en computación con master en HCI y Seguridad Informática. Actualmente trabajo para Amazon en Seattle como Software Developer Engineer. Soy de esas personas que no saben si los textos autobiográficos deben ser en primera o tercera persona. Lo intenté en segunda, pero no le entendí nada :P