Introdução
Neste laboratório, você explorará uma técnica fundamental em cibersegurança: a quebra de senhas (password cracking). Você usará o John the Ripper (JtR), uma ferramenta popular e poderosa de auditoria de segurança de senhas de código aberto. Especificamente, você aprenderá a realizar um ataque de "lista de palavras" (wordlist attack), que envolve o uso de uma lista predefinida de senhas potenciais para adivinhar a correta contra um hash de senha armazenado.
Este exercício prático irá guiá-lo através da criação de um hash de senha de exemplo, obtenção de uma lista de palavras, execução do John the Ripper para quebrar a senha e, finalmente, visualização e salvamento dos resultados. Compreender este processo é crucial tanto para administradores de sistemas que desejam testar a força das senhas de seus usuários quanto para aspirantes a profissionais de segurança.
Ao final deste laboratório, você será capaz de:
- Criar um arquivo contendo hashes de senhas.
- Usar uma lista de palavras com o John the Ripper.
- Quebrar uma senha simples e visualizar o resultado.
Criar um Arquivo de Hash de Senha de Exemplo
Nesta etapa, você criará um usuário de exemplo e extrairá o hash de sua senha para um arquivo. Ferramentas de quebra de senha não funcionam em senhas de texto puro; elas funcionam em suas representações hasheadas, que são tipicamente armazenadas em arquivos do sistema como /etc/shadow no Linux.
Primeiro, vamos criar um novo usuário chamado testuser com uma senha simples, password123. Usaremos o openssl para gerar o hash da senha e o useradd para criar o usuário.
Execute o seguinte comando no seu terminal:
sudo useradd -m -p $(openssl passwd -1 password123) testuser
Em seguida, precisamos extrair a linha contendo o hash da senha para testuser do arquivo /etc/shadow. Usaremos o comando grep para encontrar a linha e redirecionaremos a saída para um novo arquivo chamado hashes.txt dentro do seu diretório atual (~/project).
sudo grep testuser /etc/shadow > ~/project/hashes.txt
Agora, vamos visualizar o conteúdo do arquivo hashes.txt para confirmar que ele contém o hash do usuário.
cat hashes.txt
Você deverá ver uma saída semelhante a esta. A longa string de caracteres entre os primeiros e segundos dois pontos é a senha hasheada.
testuser:$1$jE/Ipl8J$z4JgUjZfH.yN.CgCjWn.H.:19782:0:99999:7:::
Você agora criou com sucesso um arquivo alvo para o nosso exercício de quebra de senha.
Baixar uma Lista de Palavras Comum
Nesta etapa, você criará uma lista de palavras (wordlist). Uma lista de palavras é simplesmente um arquivo de texto onde cada linha contém uma senha potencial. O John the Ripper lerá este arquivo e tentará cada senha contra o hash alvo. Para este laboratório, em vez de baixar uma lista de palavras grande e pré-existente, criaremos a nossa própria lista pequena e personalizada. Isso nos permite controlar o conteúdo e garantir que a senha correta esteja incluída para uma quebra bem-sucedida.
Vamos criar um arquivo chamado wordlist.txt e adicionar algumas senhas comuns a ele, incluindo a que definimos para testuser.
Primeiro, crie o arquivo e adicione password123 a ele:
echo "password123" > ~/project/wordlist.txt
Agora, vamos anexar mais algumas senhas comuns ao mesmo arquivo. Usamos >> para anexar, que adiciona ao arquivo sem sobrescrevê-lo.
echo "123456" >> ~/project/wordlist.txt
echo "qwerty" >> ~/project/wordlist.txt
echo "admin" >> ~/project/wordlist.txt
Vamos verificar o conteúdo da nossa nova lista de palavras.
cat wordlist.txt
Seu terminal deverá exibir o seguinte conteúdo:
password123
123456
qwerty
admin
Agora você tem uma lista de palavras pronta para ser usada com o John the Ripper.
Executar o John the Ripper no Modo Wordlist
Nesta etapa, você usará o John the Ripper para quebrar o hash da senha usando a lista de palavras que você criou. A sintaxe para executar o JtR no modo wordlist é direta. Você precisa especificar o arquivo da lista de palavras e o arquivo que contém os hashes.
O formato do comando é john --wordlist=<caminho_para_wordlist> <caminho_para_arquivo_de_hash>.
Agora, execute o comando no seu terminal, apontando o JtR para seus arquivos wordlist.txt e hashes.txt.
john --wordlist=wordlist.txt hashes.txt
O John the Ripper começará o processamento. Ele carregará o hash e, em seguida, tentará cada senha da sua lista de palavras. Como nossa senha está na lista, o processo será muito rápido. Você verá uma saída semelhante à seguinte:
Using default input encoding: UTF-8
Loaded 1 password hash (MD5-based crypt [MD5_body])
Cost 1 (algorithm [1:MD5 2:SHA256 3:SHA512] of 3) is 1 (MD5)
Press 'q' or Ctrl-C to abort, almost any other key for status
password123 (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:30) 100.0g/s 100.0p/s 100.0c/s 100.0C/s admin..password123
Session completed
A linha password123 (testuser) indica que o JtR quebrou a senha com sucesso. Ele também armazena esse resultado em um arquivo chamado "pot file" (plain old text), tipicamente localizado em ~/.john/john.pot, para que não precise quebrar senhas conhecidas novamente.
Visualizar Senhas Quebradas
Nesta etapa, você aprenderá como visualizar as senhas que o John the Ripper já quebrou. Uma vez que uma senha foi quebrada, o JtR a salva em seu arquivo pot. Se você tentar executar o mesmo comando de quebra novamente, o JtR relatará "No password hashes left to crack" (Nenhum hash de senha restante para quebrar) porque ele já o resolveu.
Para exibir as senhas quebradas para um determinado arquivo de hashes, você usa a opção --show.
Execute o seguinte comando para ver a senha quebrada para hashes.txt:
john --show hashes.txt
O comando verificará o arquivo pot e exibirá quaisquer senhas quebradas associadas aos hashes em hashes.txt. A saída será semelhante a esta:
testuser:password123:19782:0:99999:7:::
1 password hash cracked, 0 left
O formato da saída é username:password:other_shadow_file_fields. Isso confirma que a senha para testuser é password123. Este comando é muito útil para recuperar rapidamente os resultados de uma sessão de quebra sem ter que analisar o arquivo pot manualmente.
Salvar Senhas Quebradas em um Arquivo
Nesta etapa, você salvará a senha quebrada em um arquivo separado. Esta é uma prática comum em testes de penetração e auditoria de segurança para fins de relatórios. Você pode conseguir isso facilmente redirecionando a saída do comando john --show para um arquivo.
Vamos salvar os resultados em um arquivo chamado cracked.txt.
john --show hashes.txt > cracked.txt
Este comando executa john --show hashes.txt como antes, mas em vez de imprimir o resultado no terminal, o operador > redireciona a saída e a salva no arquivo cracked.txt. Se o arquivo não existir, ele será criado. Se existir, ele será sobrescrito.
Para verificar se a saída foi salva corretamente, você pode exibir o conteúdo do novo arquivo usando o comando cat.
cat cracked.txt
O terminal exibirá o conteúdo do arquivo, que deve ser idêntico à saída que você viu na etapa anterior:
testuser:password123:19782:0:99999:7:::
1 password hash cracked, 0 left
Agora você quebrou com sucesso uma senha e salvou o resultado em um arquivo para documentação.
Resumo
Parabéns por completar este laboratório! Você realizou com sucesso um ataque básico de quebra de senha baseado em lista de palavras usando o John the Ripper.
Neste laboratório, você aprendeu a:
- Criar um arquivo de hash de senha de exemplo a partir do sistema.
- Criar uma lista de palavras personalizada contendo senhas potenciais.
- Executar o John the Ripper no modo de lista de palavras para quebrar um hash de senha.
- Usar a opção
--showpara visualizar senhas já quebradas. - Redirecionar a saída do comando para salvar suas descobertas em um arquivo.
Este exercício demonstra com que facilidade senhas simples e comuns podem ser comprometidas. Ele destaca a importância crítica de usar senhas fortes, complexas e exclusivas para proteger sistemas e dados. As habilidades que você aprendeu são uma parte fundamental da auditoria de segurança e testes de penetração.


