Rompiendo hashes md5
Desde que se publicó la dichosa vulnerabilidad de SQL Injection en Wordpress 2.0 y 2.1, he tenido oportunidad/necesitado romper muchos hashes md5 (muchos, muchísimos, ya dije aquí que caerían como moscas).
Una alternativa al brute force clásico son las bases de datos de hashes, que es la misma idea, pero al revés. Encontramos varias de estas bases de datos online, pero de poca o nula utilidad casi todas ellas. GData, que en su momento fue muy publicitada (Slashdot, Digg… ) no vale para nada. Así, como suena. La única medianamente eficaz que he encontrado es ésta que, aunque anuncia más de cuarenta y dos millones de hashes en la base de datos, no me salen las cuentas.
Así que he recurrido al “hágalo usted mismo”, y esta semana he andado un poco atareado con ello. No necesitamos gran cosa: un servidor MySQL (vale, también sirven otros, pero donde se ponga MySQL…), un apache con PHP (opcional, pero que facilita bastante las cosas) y algunos archivos de diccionario variados que podemos obtener, por ejemplo, de aquí.
Para la parte de programación PHP es ideal, ya que está pensado para trabajar en conexión con bases de datos, para manejar ficheros de forma eficaz y para trabajar con hashes md5. Todo lo que necesitamos. Lo primero es hacer un script que procese cada diccionario y añada una entrada en la base de datos con cada palabra y su correspondiente hash. En el código de ejemplo uso una base llamada md5, a la que tiene acceso el usuario md5 con password (se me ocurrió en un momento de originalidad) md5, y que consta de una sola tabla, hashes, con dos valores, password y hash. El script está hecho en PHP pensado para usarse desde línea de comandos, pasándole como argumento el archivo de diccionario:
(Enlazo al código en un txt: procesa.txt)
Sólamente eso. Usando ese script procesamos cuantos más diccionarios mejor. Con los que podemos descargar desde el enlace que he puesto más arriba tendremos ya codificados más de doce millones de hashes. Un backup de esta base pesa 574 Mb. Para las búsquedas usamos otro script en PHP, éste pensado para ser interpretado por un servidor web:
Con esta sencilla utilidad, y con la base de datos según está (como ya he dicho, poco más de doce millones de entradas) podemos “romper” aproximadamente el 25 % de los hashes de las contraseñas usadas (cálculo basado en datos “de campo”, no teóricos). Y a más entradas, mayor proporción. Ese y no otro es el valor de usar contraseñas seguras. No seais malos ;)
:wq
Por ~aKira~ el Martes 29 de Mayo de 2007 a las 15:08 | Categoría: Hacking, Programación | Feed para los comentarios | Trackback













(CC) Debianizado (
Buenísimo esto.
De todos modos son contraseñas que estén en el diccionario ese 25 %.
Felicidades.
Efectivamente, deben estar entre los diccionarios procesados, al igual que con los atakes brute force. Lo que lo diferencia de éstos es que, una vez procesados los diccionarios, es muchísimo más rápido.
[…] Una alternativa al brute force clásico son las bases de datos de hashes, que es la misma idea, pero al revés. Encontramos varias de estas bases de datos online, pero de poca o nula utilidad casi todas ellas. GData, que en su momento fue muy publicitada (Slashdot, Digg… ) no vale para nada. Así, como suena. La única medianamente eficaz que he encontrado es ésta que, aunque anuncia más de cuarenta y dos millones de hashes en la base de datos, no me salen las cuentas. Continuar leyendo desde el autor […]
Muy buen aporte, FELICIDADES!!!.
Saludos y muy buen blog!!!.
No entiendo mucho de PHP pero si quiero passar el diccionario mediante formulario como debe ser el codigo en php ???
Gracias