Fuerza Bruta con Hashcat Usando Ataques de Máscara

LinuxBeginner
Practicar Ahora

Introducción

Hashcat es una herramienta de recuperación de contraseñas de renombre mundial, capaz de descifrar una amplia variedad de hashes a velocidades increíbles. Si bien los ataques de diccionario son comunes, solo son efectivos si la contraseña existe en una lista de palabras determinada. Un ataque de fuerza bruta pura, que prueba cada combinación de caracteres posible, a menudo es demasiado lento para ser práctico.

Aquí es donde entra en juego el ataque de máscara (mask attack). Un ataque de máscara es una forma muy eficiente de ataque de fuerza bruta que se utiliza cuando se tiene algún conocimiento sobre la estructura de la contraseña. Por ejemplo, es posible que se conozca la longitud de la contraseña, o que comience con una letra mayúscula y termine con un número.

En este laboratorio, aprenderá los fundamentos para realizar un ataque de máscara con Hashcat. Comenzará comprendiendo el concepto, aprenderá a utilizar conjuntos de caracteres para construir máscaras y aplicará este conocimiento para descifrar hashes de contraseñas con patrones conocidos.

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 91%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Comprender el concepto de un ataque de máscara (-a 3)

En este paso, aprenderá el concepto básico de un ataque de máscara en Hashcat. El modo de ataque de máscara se especifica utilizando la opción -a 3. Este modo le indica a Hashcat que genere candidatos a contraseñas basándose en un patrón, o "máscara", que usted define.

Esto es diferente de un ataque de diccionario (-a 0), que utiliza una lista de palabras predefinida. Un ataque de máscara crea sus propios candidatos sobre la marcha.

Veamos cómo una máscara genera candidatos. Podemos usar la opción --stdout para imprimir las contraseñas generadas en la pantalla en lugar de intentar descifrar un hash. Usaremos ?d como un marcador de posición simple para un dígito (0-9).

Ejecute el siguiente comando para generar todos los números posibles de 3 dígitos:

hashcat -a 3 ?d?d?d --stdout

Hashcat generará todas las combinaciones posibles de 3 dígitos. Tenga en cuenta que el orden de salida puede parecer aleatorio debido a los algoritmos de optimización de Hashcat, pero generará todas las combinaciones desde 000 hasta 999.

...
476
576
876
976
...

Esto demuestra la idea central: la máscara ?d?d?d actúa como una plantilla, y Hashcat la rellena sistemáticamente con todas las combinaciones posibles del conjunto de caracteres especificado.

Aprender los conjuntos de caracteres integrados (?l, ?u, ?d, ?s)

En este paso, aprenderá sobre los bloques de construcción fundamentales de las máscaras: los conjuntos de caracteres integrados (built-in character sets). Estos son marcadores de posición que representan un grupo específico de caracteres.

Hashcat proporciona varios conjuntos de caracteres integrados convenientes:

Marcador de posición Conjunto de caracteres Descripción
?l abcdefghijklmnopqrstuvwxyz Todas las letras minúsculas
?u ABCDEFGHIJKLMNOPQRSTUVWXYZ Todas las letras mayúsculas
?d 0123456789 Todos los dígitos
?s !"#$%&'()*+,-./:;<=>?@[\]^_{}~ Todos los caracteres especiales (símbolos)
?a ?l?u?d?s Todos los caracteres posibles

Puede combinar estos marcadores de posición para crear máscaras complejas. La longitud de la máscara determina directamente la longitud de los candidatos a contraseña generados.

Intentemos generar candidatos para una contraseña que consta de una letra mayúscula seguida de un dígito. La máscara para esto sería ?u?d.

Utilice nuevamente la opción --stdout para ver la salida:

hashcat -a 3 ?u?d --stdout

Hashcat generará todas las combinaciones de una letra mayúscula seguida de un dígito. Tenga en cuenta que el orden de salida puede parecer aleatorio debido a los algoritmos de optimización de Hashcat, pero generará todas las combinaciones desde A0 hasta Z9.

...
B4
C7
D2
...

Al combinar estos conjuntos de caracteres, puede definir un patrón preciso para las contraseñas que desea probar.

Lanzar un ataque de máscara para un PIN de 3 dígitos (hash NTLM)

En este paso, aplicará sus conocimientos a un escenario del mundo real: descifrar un PIN de 3 dígitos. Tenemos un archivo llamado pin_hash.txt que contiene un hash de contraseña en formato NTLM. Sospechamos que la contraseña original es un número de 3 dígitos.

Primero, veamos el contenido del archivo hash:

cat pin_hash.txt

Verá el hash NTLM:

D2063C28444B9B742B9B89C282395EBF

Para descifrar esto, necesitamos indicarle a Hashcat tres cosas:

  1. El modo de ataque es ataque de máscara (-a 3).
  2. El tipo de hash es NTLM (-m 1000).
  3. La máscara para un PIN de 3 dígitos es ?d?d?d.

Ahora, combine esto en un solo comando para iniciar el ataque:

hashcat -a 3 -m 1000 pin_hash.txt ?d?d?d

Hashcat comenzará, y debido a que el espacio de claves (keyspace) (000-999) es muy pequeño, encontrará la contraseña casi instantáneamente.

...
D2063C28444B9B742B9B89C282395EBF:137
...
Status...........: Cracked
...

Hashcat ha recuperado la contraseña con éxito: 137. Una vez que se descifra una contraseña, Hashcat la guarda en un archivo llamado "potfile". Puede ver todas las contraseñas descifradas para este tipo de hash con la opción --show:

hashcat -m 1000 pin_hash.txt --show

Salida:

D2063C28444B9B742B9B89C282395EBF:137

Crear una máscara personalizada para un patrón de contraseña conocido

En este paso, abordará una contraseña más compleja. Imagine que una empresa tiene una política de contraseñas: "Las contraseñas deben constar exactamente de 5 letras minúsculas". Un ejemplo de contraseña sería labex.

Tenemos el hash NTLM para dicha contraseña en el archivo pattern_hash.txt.

Primero, traduzcamos la política de contraseñas a una máscara de Hashcat:

  • Los 5 caracteres deben ser letras minúsculas: ?l?l?l?l?l

Esto nos da la máscara final: ?l?l?l?l?l.

Ahora, usemos esta máscara para descifrar el hash en pattern_hash.txt. El comando es similar al paso anterior, pero con nuestra nueva máscara.

hashcat -a 3 -m 1000 pattern_hash.txt ?l?l?l?l?l

Hashcat comenzará a probar todas las combinaciones que se ajusten a este patrón específico. Esto es mucho más eficiente que un ataque de fuerza bruta puro que intenta todas las combinaciones de 5 caracteres. Después de un corto tiempo, encontrará la contraseña.

...
2BF7D33EC706798E0308F5DF34BC7D2F:labex
...
Status...........: Cracked
...

Ha descifrado con éxito una contraseña con un patrón específico creando una máscara personalizada que coincide con precisión con la política requerida de 5 letras minúsculas.

Comparar el rendimiento de los ataques de máscara frente a los ataques de diccionario

En este paso final, compararemos el ataque de máscara que acaba de realizar con un ataque de diccionario tradicional para comprender sus respectivas fortalezas.

Un ataque de diccionario (-a 0) es muy rápido si la contraseña está en la lista de palabras (wordlist). Tenemos un pequeño archivo de diccionario llamado dict.txt que contiene la contraseña del paso anterior.

Ejecutemos un ataque de diccionario contra pattern_hash.txt:

hashcat -a 0 -m 1000 pattern_hash.txt dict.txt

Debido a que labex está en dict.txt, Hashcat lo encuentra casi instantáneamente.

hashcat (v6.2.5) starting

OpenCL API (OpenCL 2.0 pocl 1.8  Linux, None+Asserts, RELOC, LLVM 11.1.0, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
=====================================================================================================================================
* Device #1: pthread-Intel(R) Xeon(R) Platinum 8575C, 6808/13680 MB (2048 MB allocatable), 4MCU

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256

INFO: All hashes found in potfile! Use --show to display them.

Started: Sat Oct 11 16:05:20 2025
Stopped: Sat Oct 11 16:05:20 2025

Hashcat nos informa que el hash ya fue encontrado y almacenado en el potfile. Para ver la contraseña descifrada, podemos usar la opción --show:

hashcat -a 0 -m 1000 pattern_hash.txt dict.txt --show

Salida:

2bf7d33ec706798e0308f5df34bc7d2f:labex

Entonces, ¿cuándo tiene ventaja un ataque de máscara? Un ataque de diccionario solo tendrá éxito si la contraseña exacta existe en la lista de palabras. Si la contraseña fuera testx en su lugar, y esa no estuviera en nuestro diccionario, el ataque fallaría.

Sin embargo, el ataque de máscara del Paso 4 (?l?l?l?l?l) seguiría teniendo éxito porque genera y prueba sistemáticamente todas las contraseñas que se ajustan al patrón, independientemente de si están en un diccionario. Probaría labex, testx, hello, y así sucesivamente.

Conclusión:

  • Ataque de Diccionario (-a 0): El mejor para descifrar contraseñas comunes o cuando se dispone de una lista de palabras dirigida y de alta calidad. Es rápido pero limitado por el contenido del diccionario.
  • Ataque de Máscara (-a 3): El mejor cuando se conoce la estructura o el patrón de la contraseña (por ejemplo, a partir de una política de contraseñas conocida). Es mucho más exhaustivo que un ataque de diccionario e infinitamente más eficiente que un ataque de fuerza bruta puro.

Resumen

En este laboratorio, ha adquirido experiencia práctica con una de las características más potentes de Hashcat: el ataque de máscara (mask attack).

Usted ha aprendido:

  • El concepto fundamental de un ataque de máscara (-a 3) y cómo genera candidatos a contraseñas basándose en un patrón.
  • Cómo utilizar los conjuntos de caracteres integrados de Hashcat (?l, ?u, ?d, ?s) para construir máscaras.
  • Cómo aplicar una máscara simple para descifrar un PIN de 3 dígitos.
  • Cómo crear una máscara personalizada basada en una política de contraseñas conocida (5 letras minúsculas) para descifrar una contraseña con un patrón específico.
  • Las diferencias clave y las ventajas estratégicas de usar un ataque de máscara en comparación con un ataque de diccionario estándar.

Los ataques de máscara son una habilidad esencial para cualquier profesional de la seguridad, ya que proporcionan un equilibrio perfecto entre la velocidad de un ataque de diccionario y la exhaustividad de un ataque de fuerza bruta puro.