Ataques de Diccionario con Hashcat

LinuxBeginner
Practicar Ahora

Introducción

Hashcat es una herramienta potente y versátil para la recuperación de contraseñas, ampliamente utilizada en ciberseguridad para evaluar la fortaleza de las contraseñas y recuperar aquellas que se han perdido. Soporta numerosos algoritmos de hashing y varios modos de ataque.

En este laboratorio, se centrará en una de las técnicas fundamentales de cracking de contraseñas: el ataque de diccionario (dictionary attack). Aprenderá a utilizar el modo de ataque "Directo" (Straight) de Hashcat (-a 0) para descifrar un hash MD5 simple utilizando una lista de palabras (wordlist) personalizada. Esta experiencia práctica le proporcionará una base sólida para comprender cómo funciona el cracking de contraseñas.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 100%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Comprender el concepto de ataque de diccionario (-a 0)

En este paso, aprenderá sobre el ataque de diccionario y cómo se implementa en Hashcat.

Un ataque de diccionario es un método para acceder a un sistema protegido por contraseña introduciendo sistemáticamente cada palabra de una lista, denominada diccionario o lista de palabras (wordlist), como contraseña. Es una técnica simple pero efectiva, especialmente contra contraseñas débiles o comunes.

Hashcat denomina a este método ataque "Directo" (Straight), al cual se le asigna el número de modo de ataque 0. Se especifica el modo de ataque utilizando la opción -a.

Usemos el comando hashcat --help para ver ejemplos del modo de ataque 0. Podemos canalizar (pipe) la salida a grep para encontrar las líneas específicas.

hashcat --help | grep -- "-a 0"

Verá la siguiente salida, que muestra ejemplos de ataques de diccionario usando -a 0:

  Wordlist         | $P$   | hashcat -a 0 -m 400 example400.hash example.dict
  Wordlist + Rules | MD5   | hashcat -a 0 -m 0 example0.hash example.dict -r rules/best64.rule

Esto confirma que para realizar un ataque de diccionario, utilizará la opción -a 0 en su comando de Hashcat, donde -a 0 representa el modo de ataque Directo (diccionario).

Preparar un archivo hash objetivo y una lista de palabras simple

En este paso, preparará los dos archivos esenciales necesarios para un ataque de diccionario: un archivo que contiene el hash objetivo y un archivo de lista de palabras (wordlist). Todas las operaciones se realizarán en el directorio ~/project.

Primero, crearemos un archivo para almacenar nuestro hash objetivo. Utilizaremos el hash MD5 de la cadena "password123", que es 482c811da5d5b4bc6d497ffa98491e38.

Use el comando echo para crear un archivo llamado my_hash.txt que contenga este hash.

echo "482c811da5d5b4bc6d497ffa98491e38" > my_hash.txt

A continuación, cree un archivo de lista de palabras simple llamado my_wordlist.txt. Una lista de palabras del mundo real puede contener millones de palabras, pero para este laboratorio, crearemos una pequeña que incluya la contraseña correcta.

echo "password" > my_wordlist.txt
echo "123456" >> my_wordlist.txt
echo "password123" >> my_wordlist.txt
echo "qwerty" >> my_wordlist.txt

Ahora, verifique el contenido de ambos archivos usando el comando cat.

Primero, revise el archivo de hash:

cat my_hash.txt

Salida esperada:

482c811da5d5b4bc6d497ffa98491e38

Luego, revise el archivo de lista de palabras:

cat my_wordlist.txt

Salida esperada:

password
123456
password123
qwerty

Ahora tiene un hash objetivo y una lista de palabras, listos para el ataque.

Lanzar un ataque de diccionario contra un hash MD5

En este paso, lanzará el ataque de diccionario contra el hash MD5 que preparó.

Para hacer esto, necesita construir un comando de Hashcat que especifique el modo de ataque, el tipo de hash y los archivos de hash y lista de palabras.

La estructura del comando es la siguiente:
hashcat [opciones] [archivo_hash] [archivo_lista_de_palabras]

Estas son las opciones que utilizaremos:

  • -a 0: Especifica el modo de ataque Directo (Straight) (diccionario).
  • -m 0: Especifica el tipo de hash. El valor 0 corresponde a MD5. Es crucial que el tipo de hash coincida correctamente.
  • --force: Esta opción a menudo es necesaria en entornos virtualizados o al ejecutarse en una CPU para omitir ciertas advertencias y forzar la ejecución de Hashcat.

Ahora, ejecute el comando para iniciar el ataque:

hashcat -a 0 -m 0 my_hash.txt my_wordlist.txt --force

Hashcat comenzará y mostrará una pantalla de estado. Dado que nuestra lista de palabras es muy pequeña, el proceso finalizará casi instantáneamente. La salida se verá similar a esto (algunos detalles como la hora de inicio variarán):

hashcat (v6.2.6) starting

... (some initial warnings and info) ...

Session..........: hashcat
Status...........: Cracked
Hash.Type........: MD5
Hash.Target......: 482c811da5d5b4bc6d497ffa98491e38
Time.Started.....: Sun Nov 19 10:30:00 2023 (0 secs)
Time.Estimated...: Sun Nov 19 10:30:00 2023 (0 secs)
Guess.Base.......: File (my_wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#*.........:   133.7 kH/s (0.02ms) @ Accel:128 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 4/4 (100.00%)
Rejected.........: 0/4 (0.00%)
Restore.Point....: 3/4 (75.00%)
Restore.Sub.#*...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#*....: password123 -> qwerty
Hardware.Mon.#*..: Temp: 45c

Started: ...
Stopped: ...

La línea Status...........: Cracked indica que la contraseña fue encontrada exitosamente en su lista de palabras.

Analizar el estado de la salida y las palabras clave

En este paso, examinaremos más de cerca la salida del paso anterior para comprender lo que significa. Cuando Hashcat descifra exitosamente un hash, guarda el resultado en un archivo llamado "potfile" e informa el éxito en la pantalla.

Analicemos las líneas clave de la salida de estado:

  • Status...........: Cracked: Este es el indicador más importante. Confirma que al menos un hash fue descifrado con éxito. Si dijera Exhausted (Agotado), significaría que Hashcat probó cada palabra de la lista de palabras sin éxito.
  • Hash.Type........: MD5: Confirma el algoritmo de hash que se está atacando.
  • Hash.Target......: 482c811da5d5b4bc6d497ffa98491e38: Muestra el hash que está siendo atacado.
  • Guess.Base.......: File (my_wordlist.txt): Indica que la fuente de los candidatos a contraseña es nuestro archivo de lista de palabras.
  • Recovered........: 1/1 (100.00%) Digests: Muestra que de 1 hash total proporcionado, 1 ha sido recuperado.
  • Progress.........: 4/4 (100.00%): Indica que las 4 palabras de nuestra lista de palabras han sido probadas.

Después de un descifrado exitoso, Hashcat almacena automáticamente el hash descifrado y su contraseña en texto plano correspondiente en su potfile. La ubicación predeterminada para este archivo es ~/.local/share/hashcat/hashcat.potfile. Esto le evita perder tiempo volviendo a descifrar el mismo hash en el futuro.

Puede verificar que el potfile se creó listando su contenido, pero utilizaremos una función más directa de Hashcat en el siguiente paso.

Ver la contraseña descifrada usando la opción '--show'

En este paso, aprenderá a ver la contraseña descifrada utilizando una opción conveniente de Hashcat.

Aunque podría mirar directamente dentro del potfile, Hashcat proporciona la opción --show para mostrar las contraseñas descifradas de los hashes en un archivo dado. Compara su archivo de hash con su potfile e imprime cualquier coincidencia que encuentre.

Para usar esta opción, debe proporcionar el archivo de hash original y especificar el tipo de hash, tal como lo hizo para el ataque.

Ejecute el siguiente comando:

hashcat -m 0 my_hash.txt --show

Hashcat imprimirá inmediatamente el resultado en el formato hash:password.

482c811da5d5b4bc6d497ffa98491e38:password123

Esta salida muestra claramente el hash MD5 original y su contraseña en texto plano correspondiente, "password123".

A modo de comparación, también puede ver el contenido sin procesar del potfile. Esto mostrará la misma información, pero --show suele ser más limpio cuando desea verificar hashes específicos.

cat ~/.local/share/hashcat/hashcat.potfile

Salida esperada:

482c811da5d5b4bc6d497ffa98491e38:password123

Usar --show es la forma estándar de verificar las contraseñas ya descifradas en la base de datos de Hashcat.

Resumen

En este laboratorio, aprendió los fundamentos para realizar un ataque de diccionario con Hashcat. Descifró con éxito un hash MD5 probando candidatos de una lista de palabras pequeña y personalizada.

Ha adquirido experiencia práctica con las siguientes habilidades clave:

  • Comprender el concepto de ataque de diccionario y el modo de ataque Directo (Straight attack) de Hashcat (-a 0).
  • Preparar un archivo de hash objetivo y un archivo de lista de palabras.
  • Iniciar un ataque contra un hash MD5 especificando el modo de ataque correcto (-a 0) y el tipo de hash (-m 0).
  • Analizar la pantalla de estado para confirmar un descifrado exitoso.
  • Ver la contraseña descifrada utilizando la opción --show.

Este conocimiento constituye una base fundamental para explorar técnicas de descifrado de contraseñas más avanzadas y comprender la importancia de utilizar contraseñas seguras y únicas.