BlogCyber Weapons Lab

Utilice Hash-Identifier para determinar los tipos de hash para descifrar contraseñas

Los hash se utilizan comúnmente para almacenar información confidencial como credenciales para evitar almacenarlos en texto sin formato. Con herramientas como Hashcat, es posible descifrar estos hash, pero solo si conocemos el algoritmo utilizado para generar el hash. Usando una herramienta llamada hash-identifier, podemos hacer huellas digitales de cualquier hash para descubrir el modo Hashcat correcto para usar para recuperar una contraseña.

Además de descifrar hash, el identificador de hash también es útil para identificar qué algoritmo de hash se está utilizando para proporcionar un valor de suma de comprobación para una descarga. Y se puede utilizar para determinar a qué programa puede pertenecer un archivo o valor hash, como una base de datos SQL u otro formato específico del proveedor.

¿Qué es un hash y cómo lo desciframos?

Cuando las contraseñas se extraen de una base de datos o computadora, generalmente se almacenan como hash para que los piratas informáticos no puedan leer las contraseñas en texto sin formato. Una función de hash convierte las contraseñas legibles en un lío de letras y números que no deberían poder someterse a ingeniería inversa.

Pero dos o más de las mismas contraseñas que utilizan la misma función de hash tendrán el mismo hash, por lo que se podrían determinar los hashes de una lista completa de contraseñas utilizando esa función de hash y luego usar esos datos para determinar la contraseña coincidente. Y eso es lo que hacen muchas herramientas para descifrar contraseñas.

Si bien los hash son mejores que almacenar una contraseña en texto plano, aún se pueden descifrar si se usa una buena regla o lista de contraseñas con Hashcat u otro programa de descifrado. Pero no puede simplemente apuntar Hashcat a cualquier hash y esperar que funcione. Imagínese Hashcat como un taladro con muchas brocas de diferentes tamaños. Para cada tipo de hash que queremos descifrar, necesitamos adjuntar un “bit” diferente a Hashcat configurándolo en el modo correcto para atacar el hash objetivo.

Si trabaja mucho con hashes, puede ser fácil detectar la diferencia entre los tipos de hashes que se utilizan habitualmente.

De un vistazo, ¿puede decir cuál de estos dos valores hash comunes es cuál?

8743b52063cd84097a65d1633f5c74f5
b89eaac7e61417341b710b727768294d0e6a277b

Aunque es posible que haya visto ambos antes, es posible que no sea obvio de inmediato cuál de estos hash es MD5 y cuál es SHA1. Puede volverse aún más confuso con tipos de hash similares que tienen diferentes números de modo en Hashcat. En el caso de los hash anteriores, hace una gran diferencia cuál es cuál.

Al usar Hashcat para descifrar este hash, tenemos que configurar el -metro opción al modo correcto. Para descifrar un hash MD5, usaríamos el número de modo 0 para conseguir el hachís.

~$ sudo hashcat -m 0 -a 0 8743b52063cd84097a65d1633f5c74f5 example.dict --force

hashcat (v4.0.1) starting...

OpenCL Platform #1: The pocl project
====================================
* Device #1: pthread-Intel(R) Core(TM)2 Duo CPU     E7500  @ 2.93GHz, 1024/3639 MB allocatable, 2MCU

8743b52063cd84097a65d1633f5c74f5:hashcat

Aquí, encontramos que el hash se hizo con la palabra “hashcat” identificándolo correctamente como MD5 y usando una buena lista de palabras.

¿Qué hashes son compatibles?

En la actualidad, se puede identificar una gran cantidad de hashes que Hashcat es capaz de descifrar. Sobre el Repositorio de GitHub para hash-identifier, la lista de hashes admitidos es bastante extensa.

Encryption formats supported:

ADLER-32
CRC-16
CRC-16-CCITT
CRC-32
CRC-32B
DES (Unix)
Domain Cached Credentials
FCS-16
GHash-32-3
GHash-32-5
GOST R 34.11-94
Haval-128
Haval-160
Haval-192 110080
Haval-224 114080
Haval-256
Lineage II C4
MD2
MD4
MD5
MD5 ($pass.$salt) - Joomla
MD5 (APR)
MD5 (Half)
MD5 (HMAC(WordPress))
MD5 (Middle)
MD5 (phpBB3)
MD5 (Unix)
MD5 (WordPress)
MySQL
MySQL 160bit - SHA-1(SHA-1($pass))
MySQL5 - SHA-1(SHA-1($pass))
NTLM
RAdmin v2.x
RipeMD-128
RipeMD-160
RipeMD-256
RipeMD-320
SAM - (LM_hash:NT_hash)
SHA-1
SHA-1 (Django)
SHA-1 (MaNGOS)
SHA-224
SHA-256
SHA-256 (Django)
SHA-384
SHA-384 (Django)
SHA-512
SNEFRU-128
SNEFRU-256
Tiger-128
Tiger-160
Tiger-192
XOR-32
Whirlpool

And more…

Lo que necesitarás

Para seguir esta guía, necesitará Python3 instalado en su computadora (es multiplataforma), así que consígalo antes de continuar si aún no lo tiene. También necesitará Hashcat, que puede descargar ejecutando apto instalar hashcat después de actualizar su computadora con actualización apta y actualización apto.

Si desea generar algunos de sus propios hashes para intentar descifrarlos, puede hacerlo con el formato echo -n PLAINTEXT | (HASHTYPE) suma. Para crear un hash SHA1 de la palabra “nullbyte, Usaría el siguiente comando.

~$ echo -n nullbyte | sha1sum

32c0ced56f1fe08583bdb079d85a35a81995018c  -

Paso 1: Descargue e instale Hash-Identifier

Instalar el script de Python es realmente sencillo. Para comenzar, abra una ventana de terminal y ejecute el siguiente comando.

~$ git clone https://github.com/blackploit/hash-identifier.git

Cloning into 'hash-identifier'...
remote: Enumerating objects: 21, done.
remote: Total 21 (delta 0), reused 0 (delta 0), pack-reused 21
Unpacking objects: 100% (21/21), done.

Luego, navegue a su directorio con cd identificador de hash y enumere su contenido con ls.

~$ cd hash-identifier
~/hash-identifier$ ls

hash-id.py  README.md  screenshots

Debería ver un archivo llamado hash-id.py, que puede ejecutar con el siguiente comando para comenzar.

~/hash-identifier$ python3 hash-id.py

   #########################################################################
   #     __  __                     __           ______    _____           #
   #    / /                    /          /__  _  /  _ `         #
   #      _      __      ____   ___     /_/ /    /         #
   #        _    /'__`   / ,__    _ `                      #
   #          / _ _/__, `           _ __   _       #
   #        _ _ ___ _/____/   _ _     /_____  ____/      #
   #        /_//_//__//_//___/    /_//_/     /_____/  /___/  v1.2 #
   #                                                             By Zion3R #
   #                                                    www.Blackploit.com #
   #                                                   Root@Blackploit.com #
   #########################################################################
--------------------------------------------------
 HASH:

Paso 2: Hashes desconocidos de huellas dactilares

Para probar el identificador de hash, intentaremos intentar tomar las huellas digitales de los siguientes cinco hash desconocidos.

Hash 1: 7196759210defdc0
Hash 2: 1bbb234c81ef04a1c2f441253952a556276669d7fc9d1ee765bd4b18f796699d (256)
Hash 3: 32c0ced56f1fe08583bdb079d85a35a81995018c (1)
Hash 4: 753b27807b690ef889a259f3b219e024bf5c6c33c8d56116943d9285a0b55b2050981f29e6fafa660428c48d7db3c4bd2e8dd48f87c8e90bde5e0c82ed23be10 (512)
Hash 5: 5f804b61f8dcf70044ad8c1385e946a8 (md5)

Para comenzar, ingresemos el primero en el símbolo del sistema del identificador de hash en espera. Como puede ver, produce una identificación rápida como hash de MySQL. Este es el que intentaremos descifrar, así que volveremos a él más tarde.

HASH: 7196759210defdc0

Possible Hashs:
[+] MySQL
[+] MD5(Middle)

Least Possible Hashs:
[+] MD5(Half)

Nuestro segundo hash, que se ve a continuación, se identifica como un hash SHA256, siendo Haval256 otra posibilidad.

HASH: 1bbb234c81ef04a1c2f441253952a556276669d7fc9d1ee765bd4b18f796699d

Possible Hashs:
[+] SHA-256
[+] Haval-256

Least Possible Hashs:
[+] GOST R 34.11-94
[+] RipeMD-256
[+] SNEFRU-256
[+] SHA-256(HMAC)
[+] Haval-256(HMAC)
[+] RipeMD-256(HMAC)
[+] SNEFRU-256(HMAC)
[+] SHA-256(md5($pass))
[+] SHA-256(sha1($pass))

Nuestro tercer hash se identifica como SHA1:

HASH: 32c0ced56f1fe08583bdb079d85a35a81995018c

Possible Hashs:
[+] SHA-1
[+] MySQL5 - SHA-1(SHA-1($pass))

Least Possible Hashs:
[+] Tiger-160
[+] Haval-160
[+] RipeMD-160
[+] SHA-1(HMAC)
[+] Tiger-160(HMAC)
[+] RipeMD-160(HMAC)
[+] Haval-160(HMAC)
[+] SHA-1(MaNGOS)
[+] SHA-1(MaNGOS2)
[+] sha1($pass.$salt)
[+] sha1($salt.$pass)
[+] sha1($salt.md5($pass))
[+] sha1($salt.md5($pass).$salt)
[+] sha1($salt.sha1($pass))
[+] sha1($salt.sha1($salt.sha1($pass)))
[+] sha1($username.$pass)
[+] sha1($username.$pass.$salt)
[+] sha1(md5($pass))
[+] sha1(md5($pass).$salt)
[+] sha1(md5(sha1($pass)))
[+] sha1(sha1($pass))
[+] sha1(sha1($pass).$salt)
[+] sha1(sha1($pass).substr($pass,0,3))
[+] sha1(sha1($salt.$pass))
[+] sha1(sha1(sha1($pass)))
[+] sha1(strtolower($username).$pass)

Y nuestro cuarto hash se identifica como SHA512:

HASH: 753b27807b690ef889a259f3b219e024bf5c6c33c8d56116943d9285a0b55b2050981f29e6fafa660428c48d7db3c4bd2e8dd48f87c8e90bde5e0c82ed23be10

Possible Hashs:
[+] SHA-512
[+] Whirlpool

Least Possible Hashs:
[+] SHA-512(HMAC)
[+] Whirlpool(HMAC)

Finalmente, nuestro último hash se identifica como MD5:

HASH: 5f804b61f8dcf70044ad8c1385e946a8

Possible Hashs:
[+] MD5
[+] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username)))

Least Possible Hashs:
[+] RAdmin v2.x
[+] NTLM
[+] MD4
[+] MD2
[+] MD5(HMAC)
[+] MD4(HMAC)
[+] MD2(HMAC)
[+] MD5(HMAC(WordPress))
[+] Haval-128
[+] Haval-128(HMAC)
[+] RipeMD-128
[+] RipeMD-128(HMAC)
[+] SNEFRU-128
[+] SNEFRU-128(HMAC)
[+] Tiger-128
[+] Tiger-128(HMAC)
[+] md5($pass.$salt)
[+] md5($salt.$pass)
[+] md5($salt.$pass.$salt)
[+] md5($salt.$pass.$username)
[+] md5($salt.md5($pass))
[+] md5($salt.md5($pass))
[+] md5($salt.md5($pass.$salt))
[+] md5($salt.md5($pass.$salt))
[+] md5($salt.md5($salt.$pass))
[+] md5($salt.md5(md5($pass).$salt))
[+] md5($username.0.$pass)
[+] md5($username.LF.$pass)
[+] md5($username.md5($pass).$salt)
[+] md5(md5($pass))
[+] md5(md5($pass).$salt)
[+] md5(md5($pass).md5($salt))
[+] md5(md5($salt).$pass)
[+] md5(md5($salt).md5($pass))
[+] md5(md5($username.$pass).$salt)
[+] md5(md5(md5($pass)))
[+] md5(md5(md5(md5($pass))))
[+] md5(md5(md5(md5(md5($pass)))))
[+] md5(sha1($pass))
[+] md5(sha1(md5($pass)))
[+] md5(sha1(md5(sha1($pass))))
[+] md5(strtoupper(md5($pass)))

Eso fue fácil, pero el siguiente paso es atacar estos hash convirtiendo el tipo de hash identificado en un número de modo Hashcat.

Paso 3: busque los modos hash de Hashcat

Para buscar un modo hash, podemos echar un vistazo a la lista exhaustiva de tipos de hash compatibles con Hashcat. en la página de ejemplos de Hashcat. A continuación se muestra una lista abreviada de algunos de los hash más populares.

Hash-Mode   Hash-Name                   Example
0           MD5                         8743b52063cd84097a65d1633f5c74f5
10          md5($pass.$salt)            01dfae6e5d4d90d9892622325959afbe:7050461
20          md5($salt.$pass)            f0fda58630310a6dd91a7d8f0a4ceda2:4225637426
30          md5(utf16le($pass).$salt)   b31d032cfdcf47a399990a71e43c5d2a:144816
40          md5($salt.utf16le($pass))   d63d0e21fdc05f618d55ef306c54af82:13288442151473
50          HMAC-MD5 (key = $pass)      fc741db0a2968c39d9c2a5cc75b05370:1234
60          HMAC-MD5 (key = $salt)      bfd280436f45fa38eaacac3b00518f29:1234
100         SHA1                        b89eaac7e61417341b710b727768294d0e6a277b
110         sha1($pass.$salt)           2fc5a684737ce1bf7b3b239df432416e0dd07357:2014
120         sha1($salt.$pass)           cac35ec206d868b7d7cb0b55f31d9425b075082b:5363620024
130         sha1(utf16le($pass).$salt)  c57f6ac1b71f45a07dbd91a59fa47c23abcd87c2:631225
140         sha1($salt.utf16le($pass))  5db61e4cd8776c7969cfd62456da639a4c87683a:8763434884872
150         HMAC-SHA1 (key = $pass)     c898896f3f70f61bc3fb19bef222aa860e5ea717:1234
160         HMAC-SHA1 (key = $salt)     d89c92b4400b15c39e462a8caa939ab40c3aeeea:1234
200         MySQL323                    1EAFFED54F552AA5
300         MySQL4.1/MySQL5             fcf7c1b8749cf99d88e5f34271d636178fb5d130

Arriba, podemos ver dos ejemplos que podrían coincidir con nuestro primer hash (7196759210defdc0) del paso anterior. De un vistazo, el modo 200 “MySQL323” parece ser la mejor coincidencia, pero podemos confirmarlo ejecutando el hash de ejemplo a través del identificador de hash.

HASH: 1EAFFED54F552AA5

Possible Hashs:
[+] MySQL
[+] MD5(Middle)

Least Possible Hashs:
[+] MD5(Half)

Es una coincidencia exacta con nuestro hash de muestra:

HASH: 7196759210defdc0

Possible Hashs:
[+] MySQL
[+] MD5(Middle)

Least Possible Hashs:
[+] MD5(Half)

Si ejecutamos el otro tipo de hash MySQL que posiblemente coincida, el modo 300, podemos ver que no coincide con la huella digital de nuestra muestra desconocida.

HASH: fcf7c1b8749cf99d88e5f34271d636178fb5d130

Possible Hashs:
[+] SHA-1
[+] MySQL5 - SHA-1(SHA-1($pass))

Least Possible Hashs:
[+] Tiger-160
[+] Haval-160
[+] RipeMD-160
[+] SHA-1(HMAC)
[+] Tiger-160(HMAC)
[+] RipeMD-160(HMAC)
[+] Haval-160(HMAC)
[+] SHA-1(MaNGOS)
[+] SHA-1(MaNGOS2)
[+] sha1($pass.$salt)
[+] sha1($salt.$pass)
[+] sha1($salt.md5($pass))
[+] sha1($salt.md5($pass).$salt)
[+] sha1($salt.sha1($pass))
[+] sha1($salt.sha1($salt.sha1($pass)))
[+] sha1($username.$pass)
[+] sha1($username.$pass.$salt)
[+] sha1(md5($pass))
[+] sha1(md5($pass).$salt)
[+] sha1(md5(sha1($pass)))
[+] sha1(sha1($pass))
[+] sha1(sha1($pass).$salt)
[+] sha1(sha1($pass).substr($pass,0,3))
[+] sha1(sha1($salt.$pass))
[+] sha1(sha1(sha1($pass)))
[+] sha1(strtolower($username).$pass)

Eso prueba que hemos identificado el número de modo Hashcat correcto, 200, para usar en nuestro ataque Hashcat.

Paso 4: Ataca el Hash con Hashcat

Una vez que sepamos el modo a usar identificando el hash, podemos atacarlo usando Hashcat. Para que funcione, necesitaremos crear un archivo de diccionario con contraseñas, que luego Hashcat usará para atacar el hash. Hay muchas listas disponibles en línea como RockYou, pero, en este caso, crearemos una llamada example.dict para adivinar algunas contraseñas.

Si todavía está en la herramienta de identificación de hash, presione Control-C en su teclado primero. Luego, cree y abra un archivo en nano escribiendo lo siguiente.

~/hash-identifier$ nano example.dict

Después de agregar algunas conjeturas de contraseña que incluyen la palabra “hashcat” para este ejemplo, presione Control-X para salir, entonces Yy confirme el nombre del archivo. Ahora podemos usar este archivo como nuestra lista de conjeturas en texto plano, junto con el modo que descubrimos, para descifrar el hash. La fórmula básica que usaremos se verá así:

sudo hashcat -m MODE_NUMBER -a 0 HASH_VALUE example.dict

Cuando lo ejecutamos con nuestro hash de 7196759210defdc0 (el “HASH_VALUE”) con nuestro modo de 200 (el “MODE_NUMBER”), los resultados deberían verse a continuación. Si tiene un sistema más antiguo como el de ejemplo que estoy usando, es posible que deba usar el –fuerza comando con él.

~/hash-identifier$ sudo hashcat -m 200 -a 0 7196759210defdc0 example.dict --force

hashcat (v5.1.0) starting...

OpenCL Platform #1: The pocl project
====================================
* Device #1: pthread-Intel(R) Core(TM)2 Duo CPU     E7500  @ 2.93GHz, 1024/3639 MB allocatable, 2MCU

/usr/share/hashcat/OpenCL/m00200_a0-optimized.cl: Pure OpenCL kernel not found, falling back to optimized OpenCL kernel
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1

Applicable optimizers:
* Optimized-Kernel
* Zero-Byte
* Not-Iterated
* Single-Hash
* Single-Salt

Password length minimum: 0
Password length maximum: 31

Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature abort trigger disabled.
Watchdog: Temperature retain trigger disabled.

* Device #1: build_opts '-I /usr/share/hashcat/OpenCL -D VENDOR_ID=64 -D CUDA_ARCH=0 -D AMD_ROCM=0 -D VECT_SIZE=4 -D DEVICE_TYPE=2 -D DGST_R0=0 -D DGST_R1=1 -D DGST_R2=2 -D DGST_R3=3 -D DGST_ELEM=4 -D KERN_TYPE=200 -D _unroll'
* Device #1: Kernel m00200_a0-optimized.44d10a8c.kernel not found in cache! Building may take a while...
Dictionary cache hit:
* Filename..: example.dict
* Passwords.: 17
* Bytes.....: 76
* Keyspace..: 17

- Device #1: autotuned kernel-accel to 1024
- Device #1: autotuned kernel-loops to 1
[s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => The wordlist or mask that you are using is too small.
This means that hashcat cannot use the full parallel power of your device(s).
Unless you supply more work, your cracking speed will drop.
For tips on supplying more work, see: https://hashcat.net/faq/morework

Approaching final keyspace - workload adjusted.

7196759210defdc0:hashcat

Session..........: hashcat
Status...........: Cracked
Hash.Type........: MySQL323
Hash.Target......: 7196759210defdc0
Time.Started.....: Mon Dec  9 17:00:25 2019 (0 secs)
Time.Estimated...: Mon Dec  9 17:00:25 2019 (0 secs)
Guess.Base.......: File (example.dict)
Guess.Queue......: 1/1 (100.00%)
Speed.Dev.#1.....:        0 H/s (0.03ms)
Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.........: 17/17 (100.00%)
Rejected.........: 0/17 (0.00%)
Restore.Point....: 0/17 (0.00%)
Candidates.#1....: wow -> again
HWMon.Dev.#1.....: N/A

Started: Mon Dec  9 17:00:17 2019
Stopped: Mon Dec  9 17:00:27 2019

¡Aquí vamos! Obtenemos la salida de 7196759210defdc0: hashcat, lo que significa que encontramos que el valor del hash MySQL323 es la palabra “hashcat” comparándolo con todas las palabras del archivo example.dict.

Hash-Identifier facilita la toma de huellas dactilares

Siempre que se trate de un tipo de hash desconocido, el primer paso para hacerlo útil es identificarlo correctamente. Si bien el identificador de hash no es una herramienta perfecta, es una forma fácil de detectar la mayoría de los hash y distinguir entre varios tipos de hash comunes y de aspecto similar que tienen un modo diferente en Hashcat. Incluso si el identificador de hash no está seguro de qué tipo de hash está tratando, comparar la respuesta de los hash de ejemplo del sitio web de Hashcat puede ayudarlo a verificar que ha encontrado el hash correcto.

¡Espero que haya disfrutado de esta guía para tomar huellas dactilares de hashes desconocidos! Si tiene alguna pregunta sobre este tutorial sobre descifrado e identificación de hash o si tiene un comentario, pregunte a continuación o no dude en comunicarse conmigo en Twitter. @KodyKinzie.

Imagen de portada de Kody / Null Byte

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar