Publicado el 26/02/2010 12:02:00 en Criptografía. Total de votos: 8 Votar
Hi
El otro día entro el muertito en el chat preguntando si podíamos ayudarle con un hash que no podía sacarlo. Todavía no ha salido, pero es cuestión de tiempo. Esto prueba que la mejor defensa contra este tipo de ataques es una contraseña fuerte, esto es, la combinación aleatoria de mayúsculas, minúsculas, números y símbolos y nunca menor de 10 caracteres.
Lo primero que habría que saber es que tipo de hash es. En el caso del muertito era un hash de Joolma. La tendencia de los CMS es diversificar los métodos de encriptación, pero utilizando alguno de los algoritmos mas comunes como MD5 o SHA1. Con lo que lo primero a la hora de enfrentarnos a un hash de un CMS es saber que tipo de hash es. Para eso ya tenemos el trabajo hecho, existen tablas como estas:

Y sino existen programas como el Hash Analizer que te dicen el tipo de encriptacion que lleva, pero yo me fiaría mas de las tablas.
Una vez que ya sabemos que tipo de cifrado lleva vamos a ver el programa PasswordsPro. En el caso del muertito era un hash de Joolma, donde $hash=md5($pass.$salt). Donde el hash es el resultado de añadirle un salto generado aleatoriamente a la pass en claro, y luego el resultado cifrarlo en MD5.
El programa PasswordsPro esta diseñado para recuperar contraseñas de diferentes tipos de hashes. Funciona bajo windows (en linux el wine parece que lo emula bien), no lleva instalación y usa sus propias librerias con los algoritmos. Soporta mas de 30 tipos de hashes y la versión comercial admite hasta 256 hash simultáneamente, la versión shareware esta limitada a un hash. También se le pueden cargar plugins con utilidades como un generador de contraseñas seguras, un generador de diccionario, conversores de texto y algunos mas.
La lista de algoritmos que admite es:
MySQL5
DES(Unix)
MD2
MD4
MD4(HMAC)
MD4(Base64)
MD5
MD5(APR)
MD5(Unix)
MD5(HMAC)
MD5(Base64)
MD5(phpBB3)
MD5(Wordpress)
MD5_HMAC($salt,MD5_HMAC($salt,$pass))
SHA-1
SHA-1(HMAC)
SHA-1(Base64)
SHA-1(Django)
SHA-256
SHA-256(Unix)
SHA-256(Django)
SHA-256(md5($pass))
SHA-256(PasswordSafe)
SHA-384
SHA-384(Django)
SHA-512
SHA-512(Unix)
Haval-128
Haval-160
Haval-192
Haval-224
Haval-256
Tiger-128
Tiger-160
Tiger-192
RipeMD-128
RipeMD-160
MaNGOS
Whirlpool
RAdmin v2.x
Lineage II C4
Domain Cached Credentials
md5(md5($pass))
md5($pass.$salt)
md5($salt.$pass)
md5(sha1($pass))
md5($hex_salt.$pass)
md5(md5(md5($pass)))
md5(md5($pass).$salt)
md5(md5($salt).$pass)
md5($salt.md5($pass))
md5($salt.$pass.$salt)
md5(md5($salt).md5($pass))
md5(md5($pass).md5($salt))
md5(md5($pass).$const_salt)
md5($salt.md5($salt.$pass))
md5($salt.md5($pass.$salt))
md5($salt.md5($pass).$salt)
md5(sha1(md5(sha1($pass))))
md5($hex_salt.$pass.$hex_salt)
md5($username.md5($pass).$salt)
md5(md5($username.$pass).$salt)
sha1(md5($pass))
sha1($salt.$pass)
sha1($pass.$salt)
sha1($username.$pass)
sha1($salt.sha1($pass))
sha1($username.$pass.$salt)
sha1($salt.sha1($salt.sha1($pass)))
Podremos introducir los hash de varias formas:
* La primera seria desde un archivo .hashes, extension con la cual el programa puede exportarlos.
* Desde un archivo de texto con el siguiente formato:
Login:Hash:Salt(or HMAC-key):Password:Comment
* Desde el menu edit -> Add, Nos saldra un cuadro de dialogo como este:

En este caso le puse el hash del muertito
* Desde el portapapeles
Una vez que tenemos el/los hash a descifrar, vamos a ver los tipos de ataque que puede soportar el programa y como se configurarían las opciones.
Ataque preliminar
Lo primero seria realizar un ataque preliminar (preliminary attack). Esto consiste en pasarle un diccionario pequeño con las contraseñas débiles mas comunes, como podría ser qwerty, 123456, contraseña en blanco, admin y cosas así.
En Service -> options o settings tenemos las opciones de este tipo de ataque.
Podemos seleccionar opciones como que compruebe todas las combinaciones posibles de 1 y 2 caracteres, que compruebe también el comentario, caracteres repetidos o que incluya uno de los diccionarios que incluye el programa, en concreto el combinations.txt.
Seleccionadas las opciones, iriamos a Audit, seleccionaríamos el preliminary attack y arrancariamos el ataque.
Una vez pasado este ataque preliminar sin éxito, tendríamos que decantarnos entre varios tipos de ataque por diccionario, que vamos explicar:
Ataque simple con diccionarios
No creo que haya que explicar mucho de como seria este ataque, a partir de uno o varios diccionarios iría comparando los hash hasta dar con la contraseña o terminar el diccionario sin obtener la contraseña en claro.
Para ello tendremos que añadirle nuestros diccionarios, en la sección Dictionaries de las opciones se los añadiríamos. El programa viene con uno llamado insidepro.dic.
Luego en Audit elegiríamos el Simple Dictionary Attack y a darle caña.
Ataque combinado con diccionarios
Este tipo de ataque incluye la validación de contraseñas compuesto por varias palabras tomadas de diferentes diccionarios. Este ataque permite recuperar contraseñas complejas pero compuestas con dos palabras comunes, como "superadmin", "admin * admin", etc
En los settings del programa, en la sección Combined Dictionary Attack podremos elegir los diccionarios a combinar.
Ataque híbrido de diccionario
Este tipo de ataque permite variar las contraseñas de los diccionarios (por ejemplo, cambio de minúsculas a mayúsculas, añadir un 1 al final de la contraseña, etc). Estas acciones de variación llaman reglas. La lista completa de estas normas se pueden encontrar en el archivo "rules.txt. Si queremos usarlas todas, simplemente tendremos que ir a las opciones, y en el apartado Hybrid Dictionary Attack añadir el rules.txt.
Luego como siempre, seleccionaríamos el tipo de ataque y a esperar y tener suerte.
Si los ataques con diccionario no funcionasen... malo, tendríamos que irnos a realizar un ataque por fuerza bruta.
Ataque de fuerza bruta
Poco hay que decir de esta forma de sacar hash, es la mas efectiva pero a su vez la que mas tiempo tardará en darnos la contraseña, consistiría en ir probando todas las combinaciones posibles. En las opciones podemos elegir los juegos de caracteres a utilizar, podríamos combinar mayúsculas, minúsculas y símbolos. Tiene la opción de limitar el ataque en cuanto a longitud de password y de estar limitado también en un rango, para así hacer ataques distribuidos en varias maquinas. Es la ultima opción que deberíamos seleccionar, y normalmente lleva mucho tiempo.
Ataque de mascara
Este seria una variación de un ataque de fuerza bruta limitando las combinaciones a una mascara en concreto. Se utiliza cuando se dispone de información parcial sobre la contraseña. Por ejemplo:
- Contraseña comienza por "12345" o
- Los primeros 4 caracteres de la contraseña son los números, otras letras del alfabeto latino;
- Y así sucesivamente.
Para ello, definiremos lo que llamaremos una mascara. Tendremos caracteres comodín a los que podremos asignar cierto comportamiento.
La mascara se pondría en las opciones, en la sección Mask Attack. Los juegos de caracteres que utilizaría cada comodín están definidos en la opción Character Sets. Alli vemos que ?d utilizaría solo los números, ?v utilizaría las vocales mayúsculas y minúsculas o que ?s combinaría solo los caracteres, etc...
Por ejemplo, si queremos que compruebe todas las combinaciones que empiecen por un numero y que el resto sean mayúsculas, limitandolo a una longuitud de 7 caracteres, tendríamos que poner una mascara así: ?d?u?u?u?u?u?u en la sección Mask Attack de las opciones.
Ataque con rainbow tables.
El programa también admite rainbow tables como diccionarios. El que las tenga... yo tenia casi todas las MD5 y ahora me estoy arrepintiendo bastante de haberlas borrado, Si alguien quiere saber sobre el tema... san google. Y si alguien tiene rainbow tables MD5 en cualquier formato (preferentemente rti), que se ponga en contacto conmigo, ya que no las encuentro por ningún sitio y estoy interesado en volverlas a conseguir.
Si se han leido hasta aquí ya tendrán unos conocimientos básicos necesarios para crackear hashes de los CMS. Una recomendación... paciencia, es la madre de las ciencias. Crackear una contraseña no es fácil ni rápido (a no ser que sea muy débil). Faltaria tratar el tema de plugins, pero se haria demasiado extenso, el que quiera que lo mire por su cuenta.
Espero que lo usen de una manera adecuada y educativa, o sea, no se dediquen a defacear x defacear, eso es de lammers.
Bye
Fuentes:
http://hashkiller.com/index.php?topic=986.0
Ayuda del programa PasswordsPro
Software:
Hash Analizer: http://rapidshare.com/files/269982860/Hash_Analyzer_1.0.rar
PasswordsPro (version shareware): http://www.insidepro.com/download/passwordspro.zip
Nick: blackrusian


![Newbie [x]](http://www.diosdelared.com/images/rangos/Newbie.jpg)
![Veteran [x]](http://www.diosdelared.com/images/rangos/Veteran.jpg)
![Master [x]](http://www.diosdelared.com/images/rangos/Master.jpg)
![Veteran-Master [x]](http://www.diosdelared.com/images/rangos/Veteran-Master.jpg)