Introdução
O Hashcat é uma ferramenta poderosa e versátil para recuperação de senhas, mas como qualquer software complexo, os usuários podem encontrar erros que podem ser confusos inicialmente. Compreender esses problemas comuns é fundamental para usar o Hashcat de forma eficaz.
Neste laboratório, você aprenderá a diagnosticar e corrigir alguns dos erros mais frequentes que ocorrem durante as operações do Hashcat. Abordaremos problemas relacionados ao formato do hash, análise de arquivos e gerenciamento de hardware. Ao final deste laboratório, você estará mais preparado para solucionar problemas em suas próprias sessões do Hashcat.
Investigar o Erro 'Token length exception'
Nesta etapa, exploraremos o erro Token length exception. Este erro ocorre quando um hash no seu arquivo de entrada não possui o comprimento correto para o modo de hash especificado (-m). Por exemplo, um hash MD5 padrão deve ter exatamente 32 caracteres hexadecimais. Se o Hashcat encontrar uma linha mais curta ou mais longa, ele relatará este erro e parará.
Primeiro, vamos tentar executar o Hashcat em um arquivo que contém um hash malformado. Preparamos um arquivo chamado hashes_token_length.txt para este propósito. Usaremos o modo de hash 0, que corresponde ao MD5.
Execute o seguinte comando no seu terminal:
hashcat -m 0 -a 0 hashes_token_length.txt wordlist.txt
Você verá uma mensagem de erro semelhante a esta:
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
A mensagem indica claramente uma "Token length exception". Para corrigir isso, você precisa identificar e corrigir ou remover o hash inválido do seu arquivo. Uma maneira simples de encontrar linhas com comprimentos incorretos é usando ferramentas como awk. Para um hash MD5 (32 caracteres), podemos verificar qualquer linha que não tenha um comprimento de 32.
Execute este comando para inspecionar o arquivo:
awk 'length != 32' hashes_token_length.txt
A saída mostrará a linha problemática:
5d41402abc4b2a76b9719d911017c59
Agora que você encontrou o hash inválido, pode criar um arquivo corrigido. Vamos criar um novo arquivo chamado hashes_corrected.txt contendo apenas os hashes válidos.
awk 'length == 32' hashes_token_length.txt > hashes_corrected.txt
Você agora pode executar o Hashcat com sucesso com o arquivo corrigido:
hashcat -m 0 -a 0 hashes_corrected.txt wordlist.txt
Desta vez, o Hashcat iniciará sem o erro.
Resolver o Erro 'No hashes loaded'
Nesta etapa, abordaremos o erro No hashes loaded. Este é um dos problemas mais comuns e geralmente significa que o Hashcat não conseguiu analisar nenhuma das linhas do seu arquivo de hashes como hashes válidos para o modo de hash selecionado. Isso pode ser devido a um modo de hash incorreto, um arquivo corrompido ou um formato de arquivo incorreto.
Temos um arquivo chamado hashes_no_load.txt. Vamos tentar quebrá-lo usando o modo de hash 10 (md5($pass.$salt)). Este modo espera que o hash e o salt sejam separados por dois pontos (:), mas nosso arquivo contém apenas hashes MD5 brutos.
Execute o seguinte comando:
hashcat -m 10 -a 0 hashes_no_load.txt wordlist.txt
O Hashcat iniciará, mas sairá imediatamente com uma mensagem de status indicando que nenhum hash foi carregado:
...
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: ...
A linha chave é No hashes loaded. Isso informa que há uma incompatibilidade entre o conteúdo do seu arquivo de hashes e o modo de hash que você especificou. O arquivo hashes_no_load.txt contém um hash MD5 bruto, que corresponde ao modo 0.
Para corrigir isso, você deve fornecer o modo de hash correto. Vamos executar o comando novamente com -m 0.
hashcat -m 0 -a 0 hashes_no_load.txt wordlist.txt
Desta vez, o Hashcat carregará corretamente o hash válido do arquivo e iniciará a sessão de quebra. Ele ignorará a linha "not_a_hash" porque ela não se parece com um hash válido para o modo 0.
...
Hashes: 1 digests; 1 unique digests, 1 unique salts
...
Session..........: hashcat
Status...........: Running
...
Lidar com Avisos de 'Device temperature abort'
Nesta etapa, discutiremos como lidar com problemas relacionados à temperatura. Ao executar em hardware poderoso como GPUs, o Hashcat pode gerar muito calor. Para proteger seu hardware contra danos, o Hashcat monitora as temperaturas dos dispositivos e pausará ou abortará automaticamente uma sessão se elas ficarem muito altas.
No ambiente virtual LabEx, não temos acesso a uma GPU física, portanto, não podemos acionar este erro diretamente. No entanto, é um recurso crítico para entender para uso no mundo real. A mensagem de erro seria algo como Device #1 temperature abort trigger reached.
O Hashcat fornece opções de linha de comando para gerenciar esse comportamento:
--gpu-temp-abort=X: Aborta a sessão quando qualquer GPU atinge a temperatura X em Celsius.--gpu-temp-retain=Y: Pausa a sessão quando qualquer GPU atinge a temperatura Y em Celsius e retoma quando ela esfria.
Você pode usar essas flags para definir limites de temperatura personalizados que se adequem ao seu hardware e configuração de resfriamento. Por exemplo, para dizer ao Hashcat para parar se a temperatura exceder 90°C, você adicionaria --gpu-temp-abort=90 ao seu comando.
Vamos executar um comando com esta flag para ver como ela é usada. Usaremos o arquivo valid_hash.txt criado durante a configuração.
hashcat -m 0 -a 0 valid_hash.txt wordlist.txt --gpu-temp-abort=90
O comando será executado como de costume, mas o Hashcat agora está configurado com seu limite de temperatura personalizado.
Em alguns casos, o monitoramento de hardware pode estar com defeito ou não suportado, levando a leituras de temperatura incorretas e desligamentos desnecessários. Se você tem certeza de que seu resfriamento é adequado e as leituras de temperatura estão erradas, você pode desabilitar completamente o recurso de monitoramento de hardware com a flag --hwmon-disable.
hashcat -m 0 -a 0 valid_hash.txt wordlist.txt --hwmon-disable
Use esta opção com cautela, pois ela desabilita um recurso de segurança importante.
Corrigir 'Line-length exception' em Wordlists ou Regras
Nesta etapa, abordaremos o erro Line-length exception. Este erro é semelhante à exceção de comprimento de token da Etapa 1, mas se aplica aos seus arquivos de entrada, como wordlists ou arquivos de regras, em vez do arquivo de hash. O Hashcat possui um buffer interno para linhas que ele lê desses arquivos, e se uma linha exceder esse limite (tipicamente 256 bytes), este erro é acionado.
Isso pode acontecer com wordlists corrompidas ou arquivos de regras mal gerados. Temos um arquivo chamado wordlist_long_line.txt que contém uma linha extremamente longa.
Vamos tentar usá-lo em uma sessão de quebra contra nosso valid_hash.txt:
hashcat -m 0 -a 0 valid_hash.txt wordlist_long_line.txt
Você receberá uma mensagem de erro apontando para o arquivo wordlist:
...
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.
...
Embora o Hashcat possa prosseguir após este aviso, é uma boa prática limpar seus arquivos de entrada. Você pode encontrar e remover linhas de tamanho excessivo usando ferramentas como awk. O seguinte comando imprimirá quaisquer linhas no arquivo que sejam maiores que 256 caracteres:
awk 'length > 256' wordlist_long_line.txt
Isso exibirá a linha longa ofensiva. Para corrigir o problema, você pode criar uma nova wordlist limpa que exclua quaisquer linhas maiores que 256 caracteres.
awk 'length <= 256' wordlist_long_line.txt > wordlist_corrected.txt
Agora, você pode usar seu arquivo wordlist_corrected.txt sem encontrar o erro.
hashcat -m 0 -a 0 valid_hash.txt wordlist_corrected.txt
A sessão agora começará de forma limpa, sem avisos sobre o comprimento da linha.
Compreender e Resolver Erros de 'Separator not found'
Nesta etapa final, abordaremos o erro Separator not found. Este erro ocorre quando você usa um modo de hash que espera um formato específico com um caractere separador (geralmente dois pontos :) mas as linhas em seu arquivo de hash não o contêm. Muitos formatos de hash, como user:password ou hash:salt, dependem dessa estrutura.
Para este exemplo, usaremos o modo de hash 5500, que é para NetNTLMv1. Este formato geralmente se parece com USER::DOMAIN:LM_HASH:NT_HASH:CHALLENGE. Os dois pontos são separadores essenciais. Temos um arquivo chamado hashes_no_separator.txt que contém uma string de hash, mas está faltando os separadores necessários.
Vamos tentar executar o Hashcat com este arquivo:
hashcat -m 5500 -a 0 hashes_no_separator.txt wordlist.txt
O Hashcat falhará e exibirá o erro Separator not found. Ele também mostrará um exemplo do formato correto.
...
* 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
A mensagem de erro indica que o hash está faltando o separador necessário. Para corrigir isso, você deve editar o arquivo de hash para corresponder ao formato esperado. Vamos supor que o nome de usuário seja labex, o domínio seja corp e o desafio seja 1122334455667788. O formato correto seria labex::corp:<the_hash>:1122334455667788.
Vamos abrir o arquivo com o editor nano e corrigi-lo.
nano hashes_no_separator.txt
Altere o conteúdo do arquivo de:
U4BE_AC149FD0318023832132BFB833521AAF8A631114317A4935
Para o seguinte, certificando-se de substituir <the_hash> pela string de hash original:
labex::corp:U4BE_AC149FD0318023832132BFB833521AAF8A631114317A4935:1122334455667788
Pressione Ctrl+X, depois Y e Enter para salvar o arquivo e sair do nano.
Agora, execute o comando Hashcat novamente:
hashcat -m 5500 -a 0 hashes_no_separator.txt wordlist.txt
Com o formato corrigido, o Hashcat agora aceitará o hash e iniciará a sessão de quebra corretamente. Isso demonstra a importância de garantir que seus arquivos de hash estejam formatados corretamente para o modo de hash específico que você está usando.
Resumo
Neste laboratório, você aprendeu a diagnosticar e resolver cinco dos erros mais comuns encontrados ao usar o Hashcat.
Cobrimos:
- Token length exception: Causada por hashes de comprimento incorreto para o modo especificado.
- No hashes loaded: Resultado de uma incompatibilidade entre o formato do arquivo de hash e o modo de hash selecionado.
- Device temperature abort: Um recurso de segurança de hardware que pode ser gerenciado com flags de controle de temperatura.
- Line-length exception: Acionada por linhas de tamanho excessivo em wordlists ou arquivos de regras.
- Separator not found: Ocorre quando um formato de hash requer um separador que está faltando no arquivo de hash.
Ao entender as causas desses erros e saber como corrigi-los, você pode usar o Hashcat de forma mais eficiente e evitar armadilhas comuns. A principal conclusão é sempre validar seus arquivos de entrada e garantir que você esteja usando as opções corretas para sua tarefa específica.


