¿Qué es Hascat?

Hashcat es una herramienta de descifrado de contraseñas muy eficiente, diseñada para romper hashes mediante diferentes métodos, como ataques de fuerza bruta, diccionario y combinaciones personalizadas.

Enlaces de interés:

Tipos de ataques en Hashcat

hashcat -a 0 -m 400 sha1.txt rockyou.txt

En este comando, los argumentos -a y -m especifican el tipo de ataque y el tipo de hash respectivamente. Hashcat admite varios modos de ataque:

  • Ataque de diccionario 0:
    Utiliza una lista de palabras predefinida para probar diferentes contraseñas.
  • Ataque combinado 1:
    Mezcla dos diccionarios y prueba combinaciones de palabras.
  • Ataque con máscaras 3:
    Prueba todas las combinaciones posibles según un patrón, aunque puede ser el más lento.
  • Ataque híbrido 6 y 7:
    Combina un diccionario con una máscara.

Puedes consultar la lista completa de tipos de hash con ejemplos.

Ataque de diccionario con Hashcat

No es raro encontrar organizaciones con políticas de contraseñas débiles, donde los usuarios eligen palabras comunes sin complejidad como contraseñas.

Un análisis de contraseñas filtradas muestra las siguientes como las más utilizadas a nivel mundial:

123456
123456789
QWERTY
password
12345
qwerty123
1q2w3e
12345678
111111
1234567890

Todos hemos pasado por esa fase de “creatividad” en la que las contraseñas eran tan originales como password o 123456 😜

El ataque de diccionario lee una lista de palabras y las compara con los hashes para intentar descifrarlos.

Su sintaxis básica es:

hashcat -a 0 -m [tipo-de-hash] [hash|archivo-de-hashes] [wordlist]

Por ejemplo, el siguiente comando intentará descifrar un hash SHA-256 usando el diccionario rockyou.txt:

hash: '196b71e275549699fccbb3473f14f2629682f85b1bf67f9547bcbf9fd5559d1b'

En Kali Linux, el diccionario rockyou.txt se encuentra en /usr/share/wordlists/ y está comprimido como rockyou.txt.gz. Puedes descomprimirlo con gunzip rockyou.txt.gz.

hashcat -a 0 -m 1400 sha256.txt /usr/share/wordlists/rockyou.txt

Ejemplo de ataque de diccionario en Hashcat

En la última línea de la imagen anterior aparece el hash y, después de los dos puntos, la contraseña descifrada.

Ataque combinado con Hashcat

El ataque combinado usa dos listas de palabras y genera combinaciones entre ellas, lo cual es útil cuando los usuarios tienden a unir dos o más palabras, como nombres de mascotas, familiares, lugares y años.

Listas de ejemplo:

Familiares, Mascotas, Lugares (wordlist1.txt)

mateo
sofia
ana
laura
marco
luna
max
lola
rocky
madrid
barcelona
newyork
paris
roma

Años (wordlist2.txt)

1985
1990
1995
2000
2005
2024 

Para ver las combinaciones generadas sin ejecutarlas, puedes usar la opción --stdout, que proporciona una vista previa de cómo Hashcat combina las listas:

hashcat -a 1 --stdout wordlist1.txt wordlist2.txt 

Ejemplo de combinaación de listas en Hashcat

En este ejemplo, se han generado 84 combinaciones.

La sintaxis básica del ataque combinado es:

hashcat -a 1 -m [tipo-de-hash] [hash|archivo-de-hashes] [wordlist1] [wordlist2]

Ejemplo para descifrar un hash MD5 usando las listas de ejemplo:

hash: 3989cdc35e946b6c7db4a5b76a070adf
hashcat -a 1 -m 0 md5.txt wordlist1.txt wordlist2.txt

Ejemplo de cracking con listas combinadas usando Hashcat

En la última línea de la imagen anterior aparece el hash y, después de los dos puntos, la contraseña descifrada.

Ataque de máscara con Hashcat

Los ataques de máscara generan palabras que coinciden con un patrón específico, útil cuando se conoce la longitud o formato de la contraseña.

Marcadores de máscara

Marcador Descripción
?l Letras minúsculas (az)
?u Letras mayúsculas (AZ)
?d Dígitos (0-9)
?h Hexadecimal minúscula (0123456789abcdef)
?H Hexadecimal mayúscula (0123456789ABCDEF)
?s Símbolos comunes «space»!”#$%&’()*+,-./:;<=>?@[]^_`{
?a Todos los anteriores (?l?u?d?s)
?b Rango completo de bytes (0x00 - 0xff)

Más detalles en la wiki de Hashcat.

Ejemplo: si se sospecha que una contraseña tiene un formato de 8 caracteres con letras seguidas de números y un símbolo, una máscara adecuada sería ?l?l?l?l?d?d?d?s.

hashcat -a 3 -m 0 9b578151b98d2c9f1b6d15ea68639b26 '?l?l?l?l?d?d?d?s'

Ejemplo de uso de máscara en Hashcat

Conjuntos personalizados

Puedes combinar los marcadores de máscara con conjuntos personalizados (-1 a -4). Por ejemplo, para contraseñas de 8 caracteres con letras seguidas del año, podrías usar -1 012 '?l?l?l?l20?1?d', donde ?1 corresponde al conjunto 012.

Otro ejemplo con dos conjuntos personalizados -1 12 -2 012 '?l?l?l?l?10?2?d':

Ejemplo para descifrar un hash MD5 usando conjuntos personalizados:

hash: 633a20265a58c9c64fcef09f5ef62465
hashcat -a 3 -m 0 633a20265a58c9c64fcef09f5ef62465 -1 012 '?l?l?l?l20?1?d'

Ejemplo de cracking con un conjunto personalizado

Máscaras incrementales

En una máscara incremental, se puede especificar la longitud y el tipo de cada carácter en la contraseña.

Un ejemplo con una máscara incremental: Supongamos que crees que la contraseña tiene letras minúsculas y números y es de entre 2 y 4 caracteres.

hashcat -a 3 -m 0 md5.txt '?1?1?1?1' --increment --increment-min 2 --increment-max 4 -1 ?l?d

En este ejemplo, pudes ver el uso del conjunto personalizado -1 con el valor ?l?d.

Contraseñas con longitud entre 1 y 8 caracteres de cualquier tipo:

hashcat -a 3 -m 0 md5.txt '?a?a?a?a?a?a?a?a' --increment --increment-max 8

Ataque híbrido con Hashcat

El ataque híbrido es una combinación de un diccionario con una máscara. Es útil cuando se tiene una idea general de la política de contraseñas.

Usaremos una lista de palabras para el ejemplo:

Familiares, Mascotas, Lugares (wordlist1.txt)

mateo
sofia
ana
laura
marco
luna
max
lola
rocky
madrid
barcelona
newyork
paris
roma

Ataque Híbrido (Diccionario seguido de máscara)

El ataque híbrido -a 6 permite postponer una máscara a un diccionario. Por ejemplo, utilizamos una lista de palabras y le añadimos al final una combinación de dos dígitos ?6?6.

hashcat -a 6 -m 0 2cfbb9b891aaaa291b028b3dbefafe60 wordlist1.txt '?d?d'

ejemplo de ataque híbrido -a 6

Ataque Híbrido (Máscara seguida de diccionario)

El ataque híbrido -a 7 antepone una máscara a un diccionario. Por ejemplo, utilizamos una lista de palabras y le añadimos al principio un símbolo ?s.

hashcat -a 7 -m 0 054fc918ced4acc2b9d8f167059fb00b '?s' wordlist1.txt 

ejemplo de ataque híbrido -a 7