Introdução
Neste laboratório, você aprenderá a salvar os resultados de ataques Hydra. Hydra, uma poderosa ferramenta de quebra de senha, será usada para testar a segurança de um formulário de login HTTP simulado. Você começará executando um ataque HTTP básico contra um servidor web de destino, utilizando listas de nomes de usuário e senhas.
Este laboratório o guiará na etapa de salvar os resultados do ataque usando a opção -o e exportá-los em formato JSON com a opção -b. Finalmente, você comparará as saídas de texto e JSON para entender as diferentes maneiras como Hydra pode apresentar suas descobertas.
Configurar o Serviço de Alvo e Listas de Usuário/Senha
Nesta etapa, você configurará um serviço de login HTTP simulado e criará as listas necessárias de nomes de usuário e senhas para o Hydra utilizar. Isso fornecerá um ambiente controlado para praticar a captura da saída do Hydra.
Primeiro, navegue até o diretório do seu projeto:
cd ~/project
Em seguida, você criará um script Python simples que simula um serviço de login HTTP. Este script escutará na porta 80 e responderá a solicitações POST para /login.php. Ele considerará admin como o nome de usuário correto e password como a senha correta.
Crie o arquivo login.py usando nano:
nano login.py
Cole o seguinte código Python no editor nano:
from http.server import BaseHTTPRequestHandler, HTTPServer
import urllib.parse
import os
class LoginHandler(BaseHTTPRequestHandler):
def do_POST(self):
if self.path == '/login.php':
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length).decode('utf-8')
parsed_data = urllib.parse.parse_qs(post_data)
username = parsed_data.get('username', [''])[0]
password = parsed_data.get('password', [''])[0]
if username == 'admin' and password == 'password':
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b"Login bem-sucedido!")
else:
self.send_response(401)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b"Nome de usuário ou senha inválidos")
else:
self.send_response(404)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b"Não encontrado")
def run(server_class=HTTPServer, handler_class=LoginHandler, port=80):
server_address = ('', port)
httpd = server_class(server_address, handler_class)
print(f"Iniciando servidor httpd na porta {port}")
httpd.serve_forever()
if __name__ == "__main__":
run()
Salve o arquivo pressionando Ctrl+X, depois Y e, em seguida, Enter.
Agora, execute o servidor HTTP Python em segundo plano. Isso simulará o serviço de destino para o Hydra.
nohup python3 login.py > /dev/null 2>&1 &
O comando nohup permite que o processo continue rodando mesmo após você fechar o terminal, e > /dev/null 2>&1 & redireciona toda a saída para /dev/null e executa o processo em segundo plano.
Em seguida, você criará as listas de nomes de usuário e senhas que o Hydra usará em seu ataque.
Crie um arquivo chamado users.txt no diretório ~/project:
nano users.txt
Adicione os seguintes nomes de usuário ao arquivo:
admin
user
test
Salve o arquivo pressionando Ctrl+X, depois Y e, em seguida, Enter.
Finalmente, crie um arquivo chamado passwords.txt no diretório ~/project:
nano passwords.txt
Adicione as seguintes senhas ao arquivo:
password
123456
test
Salve o arquivo pressionando Ctrl+X, depois Y e, em seguida, Enter.
Você agora configurou com sucesso o serviço HTTP de destino e preparou as listas de nomes de usuário e senhas.
Executar Ataque HTTP Básico
Nesta etapa, você executará um ataque HTTP básico usando o Hydra contra o serviço de login simulado que configurou. Isso demonstrará como o Hydra tenta quebrar credenciais sem salvar a saída em um arquivo.
O Hydra é uma ferramenta poderosa para quebrar senhas e pode ser usada para testar a segurança de vários serviços, incluindo HTTP. Neste cenário, você atacará um formulário de login HTTP simples.
Você utilizará o módulo http-post-form do Hydra, projetado para atacar formulários web que usam o método HTTP POST para envio. O serviço de destino está rodando em 127.0.0.1 na porta 80, e o formulário de login está localizado em /login.php.
Execute o seguinte comando Hydra no seu terminal:
hydra -L ~/project/users.txt -P ~/project/passwords.txt 127.0.0.1 http-post-form "/login.php:username=^USER^&password=^PASS^:Invalid username or password"
Vamos analisar este comando:
hydra: O comando para invocar a ferramenta Hydra.-L ~/project/users.txt: Especifica o caminho para o arquivo de lista de nomes de usuário. O Hydra iterará por cada nome de usuário neste arquivo.-P ~/project/passwords.txt: Especifica o caminho para o arquivo de lista de senhas. O Hydra tentará cada senha deste arquivo para cada nome de usuário.127.0.0.1: O endereço IP de destino do servidor HTTP simulado.http-post-form: Este é o módulo do Hydra usado para atacar formulários HTTP POST."/login.php:username=^USER^&password=^PASS^:Invalid username or password": Esta é a parte crucial que define como o Hydra interage com o formulário:/login.php: O caminho para a página de login no servidor de destino.username=^USER^&password=^PASS^: Define os parâmetros enviados na solicitação POST.^USER^e^PASS^são marcadores que o Hydra substitui pelos valores das suas listas de nomes de usuário e senhas.Invalid username or password: Esta é a mensagem de erro que o Hydra procura na resposta do servidor para determinar se uma tentativa de login foi malsucedida. Se esta string não for encontrada, o Hydra considera a tentativa de login bem-sucedida.
Após executar o comando, o Hydra exibirá seu progresso e quaisquer tentativas de login bem-sucedidas diretamente no seu terminal.
Exemplo de Saída (se bem-sucedido):
Hydra vX.X (c) XXXX by van Hauser/THC - Use freely but only for legal purposes.
Hydra is starting...
[DATA] X task, X servers, X login tries (l:X/p:X), ~X try per server
[DATA] attacking service http-post-form on port 80
[ATTACK] attacking 127.0.0.1:80/login.php
[80][http-post-form] host: 127.0.0.1 login: admin password: password
Esta saída indica que o Hydra encontrou com sucesso a combinação de nome de usuário admin e senha password. Se nenhum login bem-sucedido for encontrado, o Hydra será concluído sem exibir nenhuma credencial de login bem-sucedida.
Salvar Resultados com a Opção -o
Nesta etapa, você aprenderá como salvar os resultados de um ataque Hydra em um arquivo usando a opção -o. Isso é útil para analisar os resultados posteriormente ou para fins de relatório, pois armazena quaisquer credenciais quebradas em um arquivo persistente.
A opção -o permite especificar um arquivo de saída onde o Hydra armazenará as credenciais quebradas. Se o Hydra encontrar uma combinação válida de nome de usuário e senha, ela será gravada no arquivo especificado em um formato simples e legível por humanos.
Você continuará com o mesmo cenário: o servidor web simulado rodando em 127.0.0.1 na porta 80 com um formulário de login em /login.php, e os arquivos users.txt e passwords.txt criados anteriormente.
Para salvar os resultados em um arquivo chamado hydra.log no diretório ~/project, execute o seguinte comando:
hydra -L ~/project/users.txt -P ~/project/passwords.txt -o ~/project/hydra.log 127.0.0.1 http-post-form "/login.php:username=^USER^&password=^PASS^:Invalid username or password"
A única diferença em relação ao comando anterior é a adição da opção -o ~/project/hydra.log. Isso instrui o Hydra a salvar os resultados no arquivo hydra.log em vez de apenas exibi-los no terminal.
Após executar o comando, o Hydra tentará fazer login usando cada combinação de nome de usuário e senha. Se um login bem-sucedido for encontrado, o nome de usuário e a senha serão gravados no arquivo hydra.log.
Para visualizar o conteúdo do arquivo hydra.log, use o comando cat:
cat ~/project/hydra.log
Exemplo de Saída (se bem-sucedido):
Se o Hydra encontrar a combinação admin:password, o arquivo hydra.log conterá uma linha semelhante a esta:
127.0.0.1 http-post-form: admin:password
Se nenhum login bem-sucedido for encontrado, o arquivo hydra.log estará vazio.
É importante notar que a opção -o sobrescreverá o arquivo de saída se ele já existir. Se você desejar adicionar os resultados a um arquivo existente, use a opção -O (O maiúsculo) em vez disso. No entanto, para este laboratório, a opção -o é suficiente.
Saída em JSON com a Opção -b
Nesta etapa, você explorará como gerar a saída de um ataque Hydra em formato JSON usando a opção -b. JSON (JavaScript Object Notation) é um formato leve de troca de dados, fácil de ser lido e escrito por humanos, e fácil de ser analisado e gerado por máquinas. Este formato é particularmente útil quando você precisa processar os resultados de forma programática, por exemplo, ao integrar a saída do Hydra em outras ferramentas ou scripts.
A opção -b, quando combinada com a opção -o, instrui o Hydra a salvar a saída no formato especificado no arquivo. A opção -b requer um parâmetro de formato: text (padrão), json ou jsonv1.
Você continuará com o mesmo cenário: o servidor web simulado rodando em 127.0.0.1 na porta 80 com um formulário de login em /login.php, e os arquivos users.txt e passwords.txt.
Para salvar os resultados em formato JSON em um arquivo chamado hydra.json no diretório ~/project, execute o seguinte comando:
hydra -L ~/project/users.txt -P ~/project/passwords.txt -o ~/project/hydra.json -b json 127.0.0.1 http-post-form "/login.php:username=^USER^&password=^PASS^:Invalid username or password"
Neste comando, você adicionou a opção -b json juntamente com a opção -o ~/project/hydra.json. Isso instrui o Hydra a salvar a saída em formato JSON no arquivo hydra.json.
Após executar o comando, o Hydra tentará fazer login usando cada combinação de nome de usuário e senha. Se um login bem-sucedido for encontrado, o nome de usuário e a senha serão gravados no arquivo hydra.json em formato JSON.
Para visualizar o conteúdo do arquivo hydra.json, use o comando cat:
cat ~/project/hydra.json
Exemplo de Saída (se bem-sucedido):
Se o Hydra encontrar a combinação admin:password, o arquivo hydra.json conterá um objeto JSON semelhante a este:
{
"generator": {
"software": "Hydra",
"version": "v9.2",
"built": "2025-05-30 08:10:07",
"server": "127.0.0.1",
"service": "http-post-form",
"jsonoutputversion": "1.00",
"commandline": "hydra -L users.txt -P passwords.txt -o hydra.json -b json 127.0.0.1 http-post-form /login.php:username=^USER^&password=^PASS^:Invalid username or password"
},
"results": [
{
"port": 80,
"service": "http-post-form",
"host": "127.0.0.1",
"login": "admin",
"password": "password"
}
],
"success": true,
"errormessages": [],
"quantityfound": 1
}
Se nenhum login bem-sucedido for encontrado, o arquivo hydra.json conterá um array JSON vazio:
[]
Este formato JSON permite que você analise facilmente os resultados usando linguagens de script como Python ou JavaScript para análises ou automação adicionais.
Resumo
Neste laboratório, você aprendeu a realizar um ataque HTTP básico usando o Hydra, uma poderosa ferramenta de quebra de senha. Configurou um serviço de login HTTP simulado e criou listas de nomes de usuário e senhas. Em seguida, utilizou o Hydra para tentar quebrar o formulário de login HTTP simulado em 127.0.0.1.
Você explorou como salvar a saída do Hydra em um arquivo usando a opção -o, criando um arquivo hydra.log legível por humanos. Além disso, aprendeu a gerar resultados em formato JSON usando a opção -b, gerando um arquivo hydra.json legível por máquina. Este laboratório demonstrou a flexibilidade do Hydra em apresentar suas descobertas, permitindo tanto uma revisão rápida quanto o processamento programático dos resultados do ataque.


