Introdução
Hashcat é uma ferramenta poderosa e versátil de recuperação de senhas, amplamente utilizada em cibersegurança para testar a força de senhas e recuperar senhas perdidas. Ele suporta inúmeros algoritmos de hash e vários modos de ataque.
Neste laboratório, você se concentrará em uma das técnicas mais fundamentais de quebra de senhas: o ataque de dicionário (dictionary attack). Você aprenderá a usar o modo de ataque "Direto" (-a 0) do Hashcat para quebrar um hash MD5 simples usando uma lista de palavras (wordlist) personalizada. Esta experiência prática fornecerá uma base sólida para entender como funciona a quebra de senhas.
Compreender o conceito de ataque de dicionário (-a 0)
Nesta etapa, você aprenderá sobre o ataque de dicionário e como ele é implementado no Hashcat.
Um ataque de dicionário é um método de invasão em um sistema protegido por senha, inserindo sistematicamente cada palavra de uma lista, chamada dicionário ou wordlist, como senha. É uma técnica simples, mas eficaz, especialmente contra senhas fracas ou comuns.
O Hashcat se refere a este método como um ataque "Direto" (Straight), ao qual é atribuído o número de modo de ataque 0. Você especifica o modo de ataque usando a opção -a.
Vamos usar o comando hashcat --help para ver exemplos do modo de ataque 0. Podemos canalizar a saída (pipe) para o grep para encontrar as linhas específicas.
hashcat --help | grep -- "-a 0"
Você verá a seguinte saída, mostrando exemplos de ataques de dicionário usando -a 0:
Wordlist | $P$ | hashcat -a 0 -m 400 example400.hash example.dict
Wordlist + Rules | MD5 | hashcat -a 0 -m 0 example0.hash example.dict -r rules/best64.rule
Isso confirma que, para realizar um ataque de dicionário, você usará a opção -a 0 no seu comando Hashcat, onde -a 0 representa o modo de ataque Direto (dicionário).
Preparar um arquivo de hash alvo e uma wordlist simples
Nesta etapa, você preparará os dois arquivos essenciais necessários para um ataque de dicionário: um arquivo contendo o hash alvo e um arquivo de lista de palavras (wordlist). Todas as operações serão realizadas no diretório ~/project.
Primeiro, vamos criar um arquivo para armazenar nosso hash alvo. Usaremos o hash MD5 da string "password123", que é 482c811da5d5b4bc6d497ffa98491e38.
Use o comando echo para criar um arquivo chamado my_hash.txt contendo este hash.
echo "482c811da5d5b4bc6d497ffa98491e38" > my_hash.txt
Em seguida, crie um arquivo de lista de palavras simples chamado my_wordlist.txt. Uma wordlist do mundo real pode conter milhões de palavras, mas para este laboratório, criaremos uma pequena que inclua a senha correta.
echo "password" > my_wordlist.txt
echo "123456" >> my_wordlist.txt
echo "password123" >> my_wordlist.txt
echo "qwerty" >> my_wordlist.txt
Agora, verifique o conteúdo de ambos os arquivos usando o comando cat.
Primeiro, verifique o arquivo de hash:
cat my_hash.txt
Saída esperada:
482c811da5d5b4bc6d497ffa98491e38
Em seguida, verifique o arquivo de wordlist:
cat my_wordlist.txt
Saída esperada:
password
123456
password123
qwerty
Agora você tem um hash alvo e uma wordlist, prontos para o ataque.
Lançar um ataque de dicionário em um hash MD5
Nesta etapa, você iniciará o ataque de dicionário contra o hash MD5 que você preparou.
Para fazer isso, você precisa construir um comando Hashcat que especifique o modo de ataque, o tipo de hash, o arquivo de hash e o arquivo de wordlist.
A estrutura do comando é a seguinte:
hashcat [opções] [arquivo_hash] [arquivo_wordlist]
Aqui estão as opções que usaremos:
-a 0: Especifica o modo de ataque Direto (Straight, dicionário).-m 0: Especifica o tipo de hash.0corresponde a MD5. É crucial que o tipo de hash esteja correto.--force: Esta opção é frequentemente necessária em ambientes virtualizados ou ao rodar na CPU para ignorar certos avisos e forçar a execução do Hashcat.
Agora, execute o comando para iniciar o ataque:
hashcat -a 0 -m 0 my_hash.txt my_wordlist.txt --force
O Hashcat iniciará e exibirá uma tela de status. Como nossa wordlist é muito pequena, o processo terminará quase instantaneamente. A saída será semelhante a esta (alguns detalhes como o tempo de início variarão):
hashcat (v6.2.6) starting
... (some initial warnings and info) ...
Session..........: hashcat
Status...........: Cracked
Hash.Type........: MD5
Hash.Target......: 482c811da5d5b4bc6d497ffa98491e38
Time.Started.....: Sun Nov 19 10:30:00 2023 (0 secs)
Time.Estimated...: Sun Nov 19 10:30:00 2023 (0 secs)
Guess.Base.......: File (my_wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#*.........: 133.7 kH/s (0.02ms) @ Accel:128 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 4/4 (100.00%)
Rejected.........: 0/4 (0.00%)
Restore.Point....: 3/4 (75.00%)
Restore.Sub.#*...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#*....: password123 -> qwerty
Hardware.Mon.#*..: Temp: 45c
Started: ...
Stopped: ...
A linha Status...........: Cracked indica que a senha foi encontrada com sucesso em sua wordlist.
Analisar o status de saída e as palavras-chave
Nesta etapa, você analisará mais detalhadamente a saída da etapa anterior para entender o que ela significa. Quando o Hashcat quebra um hash com sucesso, ele salva o resultado em um arquivo chamado "potfile" e relata o sucesso na tela.
Vamos analisar as linhas chave da saída de status:
Status...........: Cracked: Este é o indicador mais importante. Confirma que pelo menos um hash foi quebrado com sucesso. Se estivesse escritoExhausted(Esgotado), significaria que o Hashcat tentou todas as palavras na wordlist sem sucesso.Hash.Type........: MD5: Confirma o algoritmo de hash que está sendo visado.Hash.Target......: 482c811da5d5b4bc6d497ffa98491e38: Mostra o hash que está sendo atacado.Guess.Base.......: File (my_wordlist.txt): Indica que a fonte dos candidatos a senha é nosso arquivo de wordlist.Recovered........: 1/1 (100.00%) Digests: Mostra que, de 1 hash total fornecido, 1 foi recuperado.Progress.........: 4/4 (100.00%): Indica que todas as 4 palavras da nossa wordlist foram testadas.
Após uma quebra bem-sucedida, o Hashcat armazena automaticamente o hash quebrado e sua senha em texto simples correspondente em seu potfile. O local padrão para este arquivo é ~/.local/share/hashcat/hashcat.potfile. Isso evita que você perca tempo quebrando o mesmo hash novamente no futuro.
Você pode verificar se o potfile foi criado listando seu conteúdo, mas usaremos um recurso mais direto do Hashcat na próxima etapa.
Visualizar a senha decifrada usando a opção '--show'
Nesta etapa, você aprenderá como visualizar a senha quebrada usando uma opção conveniente do Hashcat.
Embora você pudesse inspecionar o potfile diretamente, o Hashcat fornece a opção --show para exibir as senhas quebradas dos hashes em um determinado arquivo. Ele cruza seu arquivo de hash com seu potfile e imprime quaisquer correspondências que encontrar.
Para usar esta opção, você precisa fornecer o arquivo de hash original e especificar o tipo de hash, assim como fez para o ataque.
Execute o seguinte comando:
hashcat -m 0 my_hash.txt --show
O Hashcat imprimirá imediatamente o resultado no formato hash:senha.
482c811da5d5b4bc6d497ffa98491e38:password123
Esta saída mostra claramente o hash MD5 original e sua senha em texto simples correspondente, "password123".
Para comparação, você também pode visualizar o conteúdo bruto do potfile. Isso mostrará a mesma informação, mas --show é frequentemente mais limpo quando você deseja verificar hashes específicos.
cat ~/.local/share/hashcat/hashcat.potfile
Saída esperada:
482c811da5d5b4bc6d497ffa98491e38:password123
Usar --show é a maneira padrão de verificar senhas já quebradas no banco de dados do Hashcat.
Resumo
Neste laboratório, você aprendeu os fundamentos da execução de um ataque de dicionário com o Hashcat. Você quebrou com sucesso um hash MD5 testando candidatos de uma wordlist pequena e personalizada.
Você adquiriu experiência prática com as seguintes habilidades principais:
- Compreender o conceito de ataque de dicionário e o modo de ataque Direto (Straight attack) do Hashcat (
-a 0). - Preparar um arquivo de hash alvo e um arquivo de wordlist.
- Iniciar um ataque a um hash MD5 especificando o modo de ataque correto (
-a 0) e o tipo de hash (-m 0). - Analisar a tela de status para confirmar uma quebra bem-sucedida.
- Visualizar a senha quebrada usando a opção
--show.
Este conhecimento forma uma base crítica para explorar técnicas mais avançadas de quebra de senhas e entender a importância de usar senhas fortes e exclusivas.



