Salvar Resultados de Ataques Hydra

HydraBeginner
Pratique Agora

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.