Usar conjuntos de caracteres personalizados en un ataque de máscara

Kali LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, explorará una característica avanzada de Hashcat: los conjuntos de caracteres personalizados (custom charsets) en ataques de máscara (mask attacks). Si bien los conjuntos de caracteres integrados de Hashcat (?l, ?u, ?d, ?s) son potentes, pueden ser ineficientes si tiene información específica sobre los caracteres utilizados en una contraseña. Por ejemplo, si sabe que una contraseña solo contiene los caracteres 'a', 'b', 'c', '1', '2', '3', el uso de los conjuntos de caracteres estándar ?l y ?d probaría muchos caracteres innecesarios.

Los conjuntos de caracteres personalizados le permiten definir un conjunto preciso de caracteres, reduciendo drásticamente el espacio de búsqueda y acelerando el proceso de cracking. Aprenderá a definir un conjunto de caracteres personalizado, crear una máscara que lo utilice y ejecutar un ataque dirigido para descifrar un hash de contraseña que sigue un patrón único.

Comprender las limitaciones de los conjuntos de caracteres integrados

En este paso, aprenderá sobre los conjuntos de caracteres integrados de Hashcat y por qué no siempre son la herramienta más eficiente para el trabajo.

Hashcat utiliza marcadores de posición, llamados conjuntos de caracteres (charsets), para representar diferentes tipos de caracteres en un ataque de máscara (mask attack):

  • ?l = abcdefghijklmnopqrstuvwxyz
  • ?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • ?d = 0123456789
  • ?s = !"#$%&'()*+,-./:;<=>?@[]^_`{|}~
  • ?a = Todos los anteriores combinados

Estos son útiles para casos generales, pero si sabemos que la contraseña está compuesta por un conjunto de caracteres muy específico y limitado, el uso de estos conjuntos de caracteres amplios es ineficiente.

Primero, inspeccionemos el hash objetivo que necesitamos descifrar. El script de configuración ya ha creado un archivo llamado hash.txt en su directorio actual (~/project).

Vea su contenido:

cat hash.txt

Debería ver el siguiente hash MD5:

2a5c3a657a73613391a8e58f1a43161e

Este hash corresponde a una contraseña de 8 caracteres compuesta únicamente por los caracteres l, a, b, e, x, 1, 2, 3. Si utilizáramos los conjuntos de caracteres integrados ?l y ?d, Hashcat perdería tiempo probando todas las 26 letras minúsculas y los 10 dígitos, en lugar de solo los 8 caracteres conocidos. En el siguiente paso, crearemos un conjunto de caracteres personalizado para resolver este problema.

Definir un conjunto de caracteres personalizado con --custom-charset1

En este paso, definirá un conjunto de caracteres personalizado que coincida con precisión con los caracteres que se sabe que están en la contraseña.

Hashcat le permite definir hasta cuatro conjuntos de caracteres personalizados utilizando las opciones de línea de comandos --custom-charset1, --custom-charset2, --custom-charset3 y --custom-charset4.

Para nuestro escenario, se sabe que la contraseña solo contiene caracteres del conjunto labex123. Podemos definir esto como nuestro primer conjunto de caracteres personalizado.

Construyamos un comando para ver cómo funciona esto. Usaremos la opción --stdout para imprimir los candidatos de contraseña generados en la pantalla en lugar de realizar un ataque real. También usaremos head para ver solo los primeros resultados.

Ejecute el siguiente comando para generar contraseñas de 3 caracteres utilizando nuestro conjunto de caracteres personalizado:

hashcat --stdout -a 3 --custom-charset1 labex123 ?1?1?1 | head -n 5

Analicemos este comando:

  • --stdout: Imprime los candidatos generados en la consola.
  • -a 3: Especifica un ataque de máscara.
  • --custom-charset1 labex123: Define ?1 como nuestro conjunto personalizado de caracteres.
  • ?1?1?1: La máscara, que le dice a Hashcat que genere candidatos de 3 caracteres donde cada carácter proviene del conjunto definido en ?1.

Verá una salida como esta, que muestra que solo se están utilizando los caracteres que especificamos:

lll
lla
llb
lle
llx

Ahora comprende cómo definir un conjunto de caracteres personalizado para un ataque dirigido.

Crear una máscara que utilice el conjunto de caracteres personalizado ?1

En este paso, construirá una máscara que utilice el conjunto de caracteres personalizado que definió en el paso anterior.

Los conjuntos de caracteres personalizados se referencian en una máscara utilizando los marcadores de posición ?1, ?2, ?3 y ?4, correspondientes a la opción --custom-charset<N> utilizada. Dado que utilizamos --custom-charset1, usaremos ?1 en nuestra máscara.

Sabemos que nuestra contraseña objetivo tiene 8 caracteres de longitud, y cada carácter proviene de nuestro conjunto personalizado. Por lo tanto, la máscara correcta es ?1 repetida ocho veces.

Para mayor claridad y reutilización, es una buena práctica guardar su máscara en un archivo. Creemos un archivo llamado mask.txt y pongamos nuestra máscara dentro.

Ejecute el siguiente comando para crear el archivo:

echo "?1?1?1?1?1?1?1?1" > mask.txt

Ahora, verifique el contenido del archivo para asegurarse de que sea correcto:

cat mask.txt

La salida debe ser exactamente lo que ingresó:

?1?1?1?1?1?1?1?1

Con el archivo de máscara listo, ahora está preparado para lanzar el ataque.

Ejecutar un ataque de máscara con el conjunto de caracteres personalizado

Ahora combinará todo para lanzar el ataque de máscara utilizando su conjunto de caracteres personalizado y el archivo de máscara.

Tiene el hash en hash.txt, el conjunto de caracteres personalizado definido y la máscara en mask.txt. Ensamblemos el comando final de Hashcat.

Ejecute el siguiente comando en su terminal para iniciar el ataque:

hashcat -m 0 -a 3 hash.txt --custom-charset1 labex123 mask.txt

Aquí hay un desglose del comando completo:

  • -m 0: Especifica que el tipo de hash es MD5.
  • -a 3: Selecciona el modo de ataque de máscara.
  • hash.txt: El archivo de entrada que contiene nuestro hash objetivo.
  • --custom-charset1 labex123: Define nuestro conjunto de caracteres personalizado ?1.
  • mask.txt: El archivo que contiene la máscara ?1?1?1?1?1?1?1?1.

Hashcat iniciará el ataque. Debido a que nuestro conjunto de caracteres personalizado es muy específico, el espacio de claves es pequeño y el ataque debería finalizar muy rápidamente. Verá una salida que indica el progreso y, finalmente, un estado de Cracked.

...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: 2a5c3a657a73613391a8e58f1a43161e
Time.Started.....: ...
Time.Estimated...: 0 secs (0.00ms)
Guess.Mask.......: ?1?1?1?1?1?1?1?1 [8]
Guess.Charset....: Custom Charset 1: 'labex123', len=8
Speed.#1.........:  ... H/s (0.00ms) @ Accel:1 Loops:1 Thr:1 Vec:1
Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.........: 16777216/16777216 (100.00%)
Rejected.........: 0/16777216 (0.00%)
Restore.Point....: 1/1 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: labex123 -> labex123
Hardware.Mon.#1..: Util:  0%

Started: ...
Stopped: ...

El ataque está completo y es exitoso. En el siguiente paso, verificará la contraseña descifrada.

Verificar que la contraseña descifrada coincide con el patrón personalizado

En este paso final, verá la contraseña descifrada y confirmará que coincide con el patrón esperado.

Hashcat guarda automáticamente las contraseñas descifradas con éxito en un archivo llamado "potfile" (porque "guarda" el hash y la contraseña). Esto evita volver a descifrar el mismo hash en el futuro. La forma más sencilla de ver la contraseña descifrada para un archivo de hash determinado es utilizar la opción --show.

Ejecute el siguiente comando para mostrar la contraseña descifrada para el hash en hash.txt:

hashcat -m 0 --show hash.txt

Este comando le indica a Hashcat que busque el hash de hash.txt en su potfile y muestre la contraseña en texto plano correspondiente.

La salida será clara y sencilla:

2a5c3a657a73613391a8e58f1a43161e:labex123

Como puede ver, la contraseña descifrada es labex123. Observe que tiene 8 caracteres de longitud y contiene solo caracteres del conjunto de caracteres personalizado labex123 que definió. Esto confirma que su ataque de máscara dirigido fue exitoso y altamente eficiente.

Resumen

En este laboratorio, ha aprendido una técnica de descifrado de contraseñas potente y eficiente utilizando Hashcat.

Comenzó comprendiendo las limitaciones de los conjuntos de caracteres integrados de Hashcat para contraseñas con conjuntos de caracteres específicos y conocidos. Luego aprendió a definir su propio conjunto de caracteres utilizando la opción --custom-charset1 y a referenciarlo en una máscara con ?1. Al crear un archivo de máscara y lanzar un ataque dirigido, pudo descifrar un hash MD5 en segundos.

Este método de uso de conjuntos de caracteres personalizados es esencial para la auditoría y recuperación eficientes de contraseñas cuando se tiene información sobre la estructura de la contraseña, lo que reduce significativamente el tiempo y los recursos computacionales necesarios para un ataque.