Descifrar las contraseñas es una competencia importante que aprender si usted realiza pruebas de intrusión. Por eso vamos a ver juntos cómo descifrar hashes en Linux utilizando Hashcat.
Recordatorio sobre el hash
Por qué utilizar Hashcat
Cómo instalar Hashcat en Linux
Cómo descifrar una contraseña mediante un ataque por diccionario
Descifrar los hashes a partir del archivo /etc/shadow
Hashcat es una herramienta potente y versátil que aplica la fuerza bruta sobre las credenciales almacenadas mediante hashes conocidos, llevando a cabo diversos modos de ataque. El artículo le guiará en el manejo de esta utilidad de descifrado de contraseñas utilizada por los pentesters, los administradores de sistemas, los espías o los hackers para encontrar contraseñas.
Recordatorio sobre el hash
El hash es una función matemática unidireccional o un identificador único que devuelve una salida de longitud fija, sea cual sea el tamaño o la longitud de la entrada. Se trata, por tanto, de un proceso irreversible que no necesita una clave, como en el cifrado, para descifrar el valor del hash.
El objetivo más común del hash es garantizar la integridad de los datos frente a la falsificación durante la transmisión de los datos. Las propiedades del hash son las siguientes:
- Un cálculo rápido
- Los buenos algoritmos evitan la misma salida para entradas diferentes
- Pequeños cambios en la entrada influyen considerablemente en el valor de hash de salida
¿Por qué utilizar Hashcat?
Hashcat es una utilidad multihilo que le permite configurar el número de hilos y limitar la ejecución en función de la prioridad. Admite más de 300 algoritmos de hash, como MD4, MD5, SHA1, SHA512, bcrypt, HMAC-SHA512, NTLM, MySQL, WHIRLPOOL, entre otros. Está disponible para todos los tipos de sistemas operativos, incluidos Windows, Linux, Unix y BSD.
Hashcat ofrece varios modos de ataque para descifrar el hash
He aquí una explicación de algunos ataques que Hashcat utiliza para descifrar las contraseñas cifradas mediante hash:
- Ataque por fuerza bruta: un ataque por fuerza bruta utiliza todas las combinaciones de caracteres posibles para determinar la contraseña exacta. No obstante, tiene una limitación en cuanto a la longitud máxima de la contraseña y el número de caracteres. Además, un nivel avanzado de ataque por fuerza bruta también puede optimizar el tiempo haciendo suposiciones de complejidad. Por ejemplo, una técnica avanzada de fuerza bruta puede suponer que el primer carácter tiene más probabilidades de estar en mayúscula y que los dígitos tienen más probabilidades de aparecer al final de una contraseña, etc.
- Ataque por diccionario: un ataque por diccionario utiliza una lista precalculada de contraseñas en función de la información recopilada en torno al objetivo o de un patrón observado entre los usuarios. Por consiguiente, toma algunas de las contraseñas más utilizadas y les añade algunas permutaciones para ampliar el alcance.
- Ataque híbrido: el híbrido es una combinación de los ataques descritos arriba, ya que comprueba si la contraseña es «descifrable» mediante un ataque por diccionario y pasa a la técnica de la fuerza bruta si no es posible.
Cómo instalar hashcat en Linux
Hashcat está disponible de forma predeterminada en Kali Linux. Para instalarlo en Ubuntu y Debian:
sudo apt update
sudo apt install hashcat
Después de la instalación, utilice el comando help para mostrar las opciones disponibles:
hashcat --help
Cómo descifrar una contraseña mediante un ataque por diccionario
1. Cree un diccionario con hashes MD5
Para comenzar esta demostración, vamos a crear varias entradas de hash que contienen varias contraseñas.
En detalle, luego se volcarán en un archivo llamado «hashes_list.txt». Cada comando debe ejecutarse en el terminal, como se muestra a continuación:
echo -n "password" | md5sum | tr -d " -">> hashes_list.txt
echo -n "HELLO" | md5sum | tr -d " -">> hashes_list.txt
echo -n "MYSECRET" | md5sum | tr -d " -">> hashes_list.txt
echo -n "Test1234" | md5sum | tr -d " -">> hashes_list.txt
echo -n "P455w0rd" | md5sum | tr -d " -">> hashes_list.txt
echo -n "GuessMe" | md5sum | tr -d " -">> hashes_list.txt
echo -n "S3CuReP455Word" | md5sum | tr -d " -">> hashes_list.txt
La opción -n suprime la nueva línea añadida al final de «Password». Esto es importante porque no queremos que los caracteres de nueva línea se cifren mediante hash junto con nuestra contraseña. La parte « tr –d ' -' » suprime todos los caracteres que sean un espacio o un guion de la salida.
2. Compruebe los hashes de la contraseña
Para ello, debemos escribir la siguiente línea de comandos en el terminal:
cat hashes_list.txt
He aquí la salida a continuación:
root@kali:# cat hashes_list.txt
dc647eb65e6711e155375218212b3964
eb61eead90e3b899c6bcbe27ac581660
958152288f2d2303ae045cffc43a02cd
2c9341ca4cf3d87b9e4eb905d6a3ec45
75b71aa6842e450f12aca00fdf54c51d
031cbcccd3ba6bd4d1556330995b8d08
b5af0b804ff7238bce48adef1e0c213f
3. Inicie Hashcat en Kali Linux
Hashcat puede iniciarse en la consola de Kali con la siguiente línea de comandos:
hashcat -h


Algunas de las opciones más importantes de hashcat son -m (el tipo de hash) y -a (modo de ataque). Por lo general, debemos utilizar las dos opciones en la mayoría de los intentos de descifrado de contraseñas al utilizar Hashcat.
Hashcat tiene además reglas diseñadas especialmente para usarse sobre un archivo de lista de palabras. La lista de caracteres puede personalizarse para descifrar la contraseña o las contraseñas.
Hashcat proporciona numerosas opciones para los hashes de contraseña que pueden descifrarse. Esto puede verse un poco más abajo, después del comando.
4. Elija el diccionario de palabras
Kali Linux contiene numerosas listas de palabras integradas. Para encontrarlas, utilice la siguiente línea de comandos: (antiguamente locate wordlists)
wordlists

Utilizaremos la lista de palabras «rockyou» en la siguiente ubicación: /usr/share/wordlists/rockyou.txt.gz
La extensión .gz indica que la lista está comprimida. Introduzcamos el comando gzip para descomprimirla, así:
sudo gzip -d /usr/share/wordlists/rockyou.txt.gz
5. Descifrar los hashes
En el último paso, ahora podemos empezar a descifrar los hashes contenidos en el archivo hashes_list.txt. Utilizaremos la siguiente línea de comandos, como se muestra a continuación:
hashcat -m 0 -a 0 -o cracked.txt hashes_list.txt /usr/share/wordlists/rockyou.txt
El algoritmo de hash se selecciona con la opción -m, el 0 hace referencia al md5
Los resultados se guardarán en el archivo cracked.txt especificado con la opción -o
La opción -a permite definir el tipo de ataque utilizado.
Descifrar los hashes a partir del archivo /etc/shadow en Linux
El archivo /etc/shadow almacena los valores cifrados mediante hash de todas las contraseñas de los usuarios en Linux. Es un archivo crítico con permisos de acceso estrictos; solo la cuenta root puede acceder a él, y solo ella debe hacerlo.
Por consiguiente, si usted encuentra un archivo /etc/shadow legible a través de cualquier cuenta de usuario normal, puede obtener el valor de hash de la cuenta root y descifrar el hash de la contraseña con la utilidad Hashcat.
Con fines de demostración, vamos a cambiar a la cuenta root y crear una nueva cuenta de usuario alice para comprender el funcionamiento de Hashcat:
sudo su
useradd -c "Bob" bob
Creemos una contraseña con el comando passwd:
passwd alice
Comprobemos el valor de la contraseña cifrada mediante hash en el archivo /etc/shadow con el comando cut, que permitirá extraer directamente el campo buscado:
tail /etc/shadow

El hash en la salida anterior comienza a partir de « bob: ».
El valor $y$ indica que se trata de yescrypt, un esquema de hash reciente utilizado de forma predeterminada en Debian 11, Fedora 35+ y Kali Linux 2021.1+. Está admitido por Fedora 29+ y Ubuntu 20.04+, y se recomienda también para las nuevas contraseñas.
yescrypt de momento no está disponible en Hashcat, así que habrá que probar con otro algoritmo de hash u otra máquina Linux para realizar su prueba.
Históricamente, el uso de SHA-512
A continuación encontrará un ejemplo de hash con SHA-512, que se utiliza mucho y fue, por lo demás, el método predeterminado en Kali Linux antes de yescrypt.

El valor $6$ indica un hash de contraseña de tipo 6 (SHA-512, varias vueltas). Los caracteres después de $6$, hasta el siguiente $, son el SALT.
En el ejemplo, el SALT es CqiOcwyE
Puede dirigirse a el sitio web de hashcat para identificar el tipo de función de hash y el valor de referencia asociado. El modo de hash SHA512 se identifica generalmente con el término $6$ y tiene un valor de referencia de 1800.
