Solución de problemas de errores comunes de Hashcat

Kali LinuxBeginner
Practicar Ahora

Introducción

Hashcat es una herramienta potente y versátil para la recuperación de contraseñas, pero como cualquier software complejo, los usuarios pueden encontrar errores que inicialmente pueden ser confusos. Comprender estos problemas comunes es clave para utilizar Hashcat de manera efectiva.

En este laboratorio, aprenderá a diagnosticar y solucionar algunos de los errores más frecuentes que ocurren durante las operaciones de Hashcat. Cubriremos problemas relacionados con el formato del hash, el análisis de archivos y la gestión del hardware. Al final de este laboratorio, estará mejor preparado para solucionar problemas en sus propias sesiones de Hashcat.

Investigar el error 'Token length exception'

En este paso, exploraremos el error Token length exception. Este error ocurre cuando un hash en su archivo de entrada no tiene la longitud correcta para el modo de hash especificado (-m). Por ejemplo, un hash MD5 estándar debe tener exactamente 32 caracteres hexadecimales. Si Hashcat encuentra una línea más corta o más larga, informará este error y se detendrá.

Primero, intentemos ejecutar Hashcat en un archivo que contiene un hash malformado. Hemos preparado un archivo llamado hashes_token_length.txt para este propósito. Usaremos el modo de hash 0, que corresponde a MD5.

Ejecute el siguiente comando en su terminal:

hashcat -m 0 -a 0 hashes_token_length.txt wordlist.txt

Verá un mensaje de error similar a este:

hashcat (v6.2.x) starting

...

* Token length exception: 1/2 hashes
  This error happens if the hashes you are trying to crack do not meet the length requirements of the selected hash-mode.
  Please make sure you have specified the correct hash-mode and that all of your hashes are valid.
  ...
* Startup failed: Invalid hash-length

El mensaje indica claramente una "Token length exception". Para solucionar esto, necesita identificar y corregir o eliminar el hash inválido de su archivo. Una forma sencilla de encontrar líneas con longitudes incorrectas es utilizando herramientas como awk. Para un hash MD5 (32 caracteres), podemos verificar cualquier línea que no tenga una longitud de 32.

Ejecute este comando para inspeccionar el archivo:

awk 'length != 32' hashes_token_length.txt

La salida mostrará la línea problemática:

5d41402abc4b2a76b9719d911017c59

Ahora que ha encontrado el hash inválido, puede crear un archivo corregido. Creemos un nuevo archivo llamado hashes_corrected.txt que contenga solo los hashes válidos.

awk 'length == 32' hashes_token_length.txt > hashes_corrected.txt

Ahora puede ejecutar Hashcat con éxito con el archivo corregido:

hashcat -m 0 -a 0 hashes_corrected.txt wordlist.txt

Esta vez, Hashcat se iniciará sin el error.

Resolver el error 'No hashes loaded'

En este paso, abordaremos el error No hashes loaded. Este es uno de los problemas más comunes y generalmente significa que Hashcat no pudo analizar ninguna de las líneas de su archivo de hashes como hashes válidos para el modo de hash seleccionado. Esto puede deberse a un modo de hash incorrecto, un archivo corrupto o un formato de archivo incorrecto.

Tenemos un archivo llamado hashes_no_load.txt. Intentemos descifrarlo usando el modo de hash 10 (md5(pass.salt)). Este modo espera que el hash y la sal estén separados por dos puntos (:), pero nuestro archivo contiene solo hashes MD5 en bruto.

Ejecute el siguiente comando:

hashcat -m 10 -a 0 hashes_no_load.txt wordlist.txt

Hashcat se iniciará pero saldrá inmediatamente con un mensaje de estado que indica que no se cargaron hashes:

...
Hashes: 2 digests; 2 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1

Applicable optimizers:
* Zero-Byte
* Precompute-Init
* Precompute-Merkle-Demgard
* Meet-In-The-Middle
* Early-Skip
* Not-Iterated
* Not-Salted
* Raw-Hash

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

Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature monitoring is disabled.

No hashes loaded.

Started: ...
Stopped: ...

La línea clave es No hashes loaded. Esto le indica que hay una discrepancia entre el contenido de su archivo de hashes y el modo de hash que especificó. El archivo hashes_no_load.txt contiene un hash MD5 en bruto, que corresponde al modo 0.

Para solucionar esto, debe proporcionar el modo de hash correcto. Ejecutemos el comando nuevamente con -m 0.

hashcat -m 0 -a 0 hashes_no_load.txt wordlist.txt

Esta vez, Hashcat cargará correctamente el hash válido del archivo e iniciará la sesión de descifrado. Ignorará la línea "not_a_hash" porque no parece un hash válido para el modo 0.

...
Hashes: 1 digests; 1 unique digests, 1 unique salts
...
Session..........: hashcat
Status...........: Running
...

Abordar las advertencias 'Device temperature abort'

En este paso, discutiremos cómo manejar los problemas relacionados con la temperatura. Al ejecutarse en hardware potente como las GPUs, Hashcat puede generar mucho calor. Para proteger su hardware de daños, Hashcat monitorea las temperaturas de los dispositivos y pausará o abortará automáticamente una sesión si estas se vuelven demasiado altas.

En el entorno virtual de LabEx, no tenemos acceso a una GPU física, por lo que no podemos activar este error directamente. Sin embargo, es una característica crítica para entender su uso en el mundo real. El mensaje de error se vería algo así como Device #1 temperature abort trigger reached.

Hashcat proporciona opciones de línea de comandos para gestionar este comportamiento:

  • --gpu-temp-abort=X: Aborta la sesión cuando cualquier GPU alcance la temperatura X en Celsius.
  • --gpu-temp-retain=Y: Pausa la sesión cuando cualquier GPU alcance la temperatura Y en Celsius, y la reanuda cuando se enfríe.

Puede usar estas banderas para establecer límites de temperatura personalizados que se adapten a su hardware y configuración de refrigeración. Por ejemplo, para indicar a Hashcat que se detenga si la temperatura supera los 90°C, agregaría --gpu-temp-abort=90 a su comando.

Ejecutemos un comando con esta bandera para ver cómo se usa. Utilizaremos el archivo valid_hash.txt creado durante la configuración.

hashcat -m 0 -a 0 valid_hash.txt wordlist.txt --gpu-temp-abort=90

El comando se ejecutará como de costumbre, pero Hashcat ahora está configurado con su límite de temperatura personalizado.

En algunos casos, el monitoreo de hardware puede ser defectuoso o no ser compatible, lo que lleva a lecturas de temperatura incorrectas y apagados innecesarios. Si está seguro de que su refrigeración es adecuada y las lecturas de temperatura son erróneas, puede deshabilitar por completo la función de monitoreo de hardware con la bandera --hwmon-disable.

hashcat -m 0 -a 0 valid_hash.txt wordlist.txt --hwmon-disable

Use esta opción con precaución, ya que deshabilita una característica de seguridad importante.

Corregir la 'Line-length exception' en Listas de Palabras o Reglas

En este paso, abordaremos el error Line-length exception. Este error es similar a la excepción de longitud de token del Paso 1, pero se aplica a sus archivos de entrada, como listas de palabras o archivos de reglas, en lugar del archivo de hashes. Hashcat tiene un búfer interno para las líneas que lee de estos archivos, y si una línea excede este límite (típicamente 256 bytes), se activa este error.

Esto puede ocurrir con listas de palabras corruptas o archivos de reglas mal generados. Tenemos un archivo llamado wordlist_long_line.txt que contiene una línea extremadamente larga.

Intentemos usarlo en una sesión de descifrado contra nuestro valid_hash.txt:

hashcat -m 0 -a 0 valid_hash.txt wordlist_long_line.txt

Recibirá un mensaje de error que apunta al archivo de lista de palabras:

...
ATTENTION!
The wordlist 'wordlist_long_line.txt' contains a line that is larger than 256 bytes.
The line is ignored.
To fix this, remove the line from the wordlist.
...

Aunque Hashcat puede continuar después de esta advertencia, es una buena práctica limpiar sus archivos de entrada. Puede encontrar y eliminar líneas de gran tamaño utilizando herramientas como awk. El siguiente comando imprimirá cualquier línea en el archivo que sea más larga que 256 caracteres:

awk 'length > 256' wordlist_long_line.txt

Esto mostrará la línea larga que causa el problema. Para solucionar el problema, puede crear una lista de palabras nueva y limpia que excluya cualquier línea de más de 256 caracteres.

awk 'length <= 256' wordlist_long_line.txt > wordlist_corrected.txt

Ahora, puede usar su archivo wordlist_corrected.txt sin encontrar el error.

hashcat -m 0 -a 0 valid_hash.txt wordlist_corrected.txt

La sesión ahora comenzará limpiamente sin ninguna advertencia sobre la longitud de la línea.

Comprender y Resolver Errores de 'Separator not found'

En este último paso, abordaremos el error Separator not found. Este error ocurre cuando utiliza un modo de hash que espera un formato específico con un carácter separador (generalmente dos puntos :) pero las líneas de su archivo de hashes no lo contienen. Muchos formatos de hash, como user:password o hash:salt, dependen de esta estructura.

Para este ejemplo, utilizaremos el modo de hash 5500, que es para NetNTLMv1. Este formato típicamente se ve como USER::DOMAIN:LM_HASH:NT_HASH:CHALLENGE. Los dos puntos son separadores esenciales. Tenemos un archivo llamado hashes_no_separator.txt que contiene una cadena de hash pero le faltan los separadores requeridos.

Intentemos ejecutar Hashcat con este archivo:

hashcat -m 5500 -a 0 hashes_no_separator.txt wordlist.txt

Hashcat fallará y mostrará el error Separator not found. También le mostrará un ejemplo del formato correcto.

...
* Separator unmatched: 1/1 hashes
  This error happens if the hashes you are trying to crack are not in the correct format.
  Please read https://hashcat.net/wiki/doku.php?id=example_hashes to learn more about the correct format.
  ...
* Startup failed: Invalid hash-format

El mensaje de error indica que al hash le falta el separador requerido. Para solucionarlo, debe editar el archivo de hashes para que coincida con el formato esperado. Supongamos que el nombre de usuario es labex, el dominio es corp y el desafío es 1122334455667788. El formato correcto sería labex::corp:<the_hash>:1122334455667788.

Abramos el archivo con el editor nano y corrijámoslo.

nano hashes_no_separator.txt

Cambie el contenido del archivo de:
U4BE_AC149FD0318023832132BFB833521AAF8A631114317A4935

A lo siguiente, asegurándose de reemplazar <the_hash> con la cadena de hash original:
labex::corp:U4BE_AC149FD0318023832132BFB833521AAF8A631114317A4935:1122334455667788

Presione Ctrl+X, luego Y, y Enter para guardar el archivo y salir de nano.

Ahora, ejecute el comando Hashcat nuevamente:

hashcat -m 5500 -a 0 hashes_no_separator.txt wordlist.txt

Con el formato corregido, Hashcat ahora aceptará el hash e iniciará la sesión de descifrado correctamente. Esto demuestra la importancia de asegurarse de que sus archivos de hashes tengan el formato correcto para el modo de hash específico que está utilizando.

Resumen

En este laboratorio, ha aprendido a diagnosticar y resolver cinco de los errores más comunes que se encuentran al usar Hashcat.

Cubrimos:

  • Token length exception: Causada por hashes de longitud incorrecta para el modo especificado.
  • No hashes loaded: Resultado de una discrepancia entre el formato del archivo de hashes y el modo de hash seleccionado.
  • Device temperature abort: Una característica de seguridad de hardware que se puede gestionar con indicadores de control de temperatura.
  • Line-length exception: Activada por líneas excesivamente largas en listas de palabras o archivos de reglas.
  • Separator not found: Ocurre cuando un formato de hash requiere un separador que falta en el archivo de hashes.

Al comprender las causas de estos errores y saber cómo solucionarlos, puede usar Hashcat de manera más eficiente y evitar errores comunes. La conclusión clave es validar siempre sus archivos de entrada y asegurarse de que está utilizando las opciones correctas para su tarea específica.