Neste laboratório, exploraremos as opções HTTP POST disponíveis no Hydra, com foco em como direcionar efetivamente serviços que usam HTTP POST para autenticação. Aprenderemos como especificar nomes de usuário e senhas, bem como a URL para a qual a requisição POST deve ser enviada.
Este laboratório irá guiá-lo através da revisão das opções HTTP POST, da configuração de um formulário HTTP POST, da execução do Hydra com opções específicas e da validação do ataque POST. Você aprenderá como usar o Hydra para realizar brute-force em credenciais de login ao direcionar serviços que usam HTTP POST para autenticação.
Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível intermediário com uma taxa de conclusão de 64%. Recebeu uma taxa de avaliações positivas de 100% dos estudantes.
Revisar as Opções HTTP POST
Nesta etapa, exploraremos as opções HTTP POST disponíveis no Hydra. O Hydra é uma ferramenta poderosa para realizar brute-force em credenciais de login e suporta vários protocolos, incluindo HTTP POST. Ao direcionar aplicações web que usam HTTP POST para autenticação, precisamos fornecer ao Hydra informações específicas sobre o formulário de login.
A sintaxe básica para usar o Hydra com HTTP POST é a seguinte:
-l <username>: Especifica um único nome de usuário para usar no ataque. Se você tiver uma lista de nomes de usuário, pode usar a opção -L <username_list> em vez disso.
-P <password_list>: Especifica o caminho para um arquivo contendo uma lista de senhas para tentar.
<target_ip>: O endereço IP do servidor de destino.
http-post-form: Especifica que estamos usando o módulo HTTP POST form. Este módulo é projetado para atacar formulários web que usam o método POST.
"<url>:<post_data>:<failure_string>": Esta é uma parte crucial que informa ao Hydra como interagir com o formulário de login.
<url>: O caminho para o script ou página de login que lida com a requisição POST (por exemplo, /login.php).
<post_data>: Os dados que serão enviados no corpo da requisição POST. Isso normalmente inclui os nomes dos campos de nome de usuário e senha do formulário HTML, juntamente com espaços reservados para o nome de usuário e senha que o Hydra preencherá. Os espaços reservados geralmente são ^USER^ para o nome de usuário e ^PASS^ para a senha (por exemplo, username=^USER^&password=^PASS^).
<failure_string>: Uma string que aparece na resposta de uma tentativa de login falhada. O Hydra usa essa string para determinar se uma tentativa de login foi malsucedida. Você precisa identificar essa string tentando manualmente um login com credenciais incorretas e observando a resposta.
Nas etapas seguintes, configuraremos um formulário HTTP POST simples e, em seguida, usaremos o Hydra para atacá-lo, aplicando essas opções.
Configurar o Formulário HTTP POST
Nesta etapa, configuraremos um formulário HTTP POST simples que podemos usar como alvo para nossos ataques Hydra. Já criamos os arquivos necessários (login.html e login.php) no diretório ~/project durante a fase de configuração.
Vamos examinar o conteúdo desses arquivos para entender a estrutura do formulário e como o script PHP lida com a tentativa de login.
Este código HTML define um formulário que usa o método POST e envia dados para login.php. Os campos de entrada são nomeados username e password. Isso nos diz que os dados POST devem incluir username=<value> e password=<value>.
Este script PHP verifica se o username enviado é testuser e a password é password. Se corresponderem, ele exibe "Login successful!". Caso contrário, ele exibe "Invalid username or password".
A partir deste script, podemos identificar a string de falha: "Invalid username or password". Esta é a string que o Hydra procurará na resposta para determinar se uma tentativa de login falhou.
Agora que entendemos a estrutura do formulário e a mensagem de falha, temos todas as informações necessárias para criar o comando Hydra na próxima etapa.
Verificar o Status do Serviço Web
Antes de prosseguir para a próxima etapa, verifique se o serviço web PHP está em execução e acessível. Execute o seguinte comando em seu terminal:
curl -s http://0.0.0.0:8080/login.php
Se você vir o conteúdo da página (como "Invalid username or password"), o serviço está funcionando corretamente.
Se não houver resposta ou você receber um erro de conexão, você pode iniciar manualmente o servidor web embutido do PHP com:
Aguarde um momento e tente o comando curl novamente.
Executar Hydra com HTTP POST
Agora que temos nosso formulário HTTP POST de destino configurado e entendemos sua estrutura, podemos usar o Hydra para tentar realizar brute-force nas credenciais de login. Usaremos as informações coletadas na etapa anterior para construir o comando Hydra.
Sabemos o seguinte:
A URL de destino é /login.php.
Os dados POST devem estar no formato username=^USER^&password=^PASS^.
A string de falha é "Invalid username or password".
Usaremos o nome de usuário testuser e a lista de senhas ~/project/password.txt.
O endereço IP de destino é 0.0.0.0 (assumindo que o servidor web está sendo executado localmente).
O Hydra agora começará a tentar fazer login no formulário de destino usando o nome de usuário especificado e as senhas da lista. Ele enviará requisições HTTP POST para http://0.0.0.0:8080/login.php com o nome de usuário e cada senha nos dados POST. Se a resposta não contiver a string de falha "Invalid username or password", o Hydra considerará a tentativa de login bem-sucedida e relatará as credenciais.
A saída mostrará o progresso do ataque. Como a senha correta (password) está incluída em nosso arquivo password.txt, o Hydra deve eventualmente encontrá-la.
Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-22 09:55:07
[DATA] max 3 tasks per 1 server, overall 3 tasks, 3 login tries (l:1/p:3), ~1 try per task
[DATA] attacking http-post-form://0.0.0.0:8080/login.php:username=^USER^&password=^PASS^:F=Invalid username or password
[8080][http-post-form] host: 0.0.0.0 login: testuser password: password
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-22 09:55:08
A linha [http-post] host: 0.0.0.0 login: testuser password: password indica que o Hydra encontrou com sucesso as credenciais corretas.
Validar o Ataque POST
Nesta etapa, validaremos que o Hydra identificou com sucesso a senha correta para a conta testuser de duas maneiras:
Esta linha indica que o Hydra encontrou credenciais válidas: nome de usuário testuser com senha password.
Segundo, verificando manualmente essas credenciais na interface web:
Para acessar o formulário de login no ambiente LabEx:
Clique na aba "Web 8080" na barra de menu superior
Na barra de endereço, adicione /login.html ao final da URL atual
Insira as credenciais que o Hydra descobriu:
Nome de usuário: testuser
Senha: password
Clique no botão "Login"
Se você vir "Login successful!" após enviar o formulário, isso confirma que as credenciais encontradas pelo Hydra estão de fato corretas.
Se você não vir a mensagem de sucesso, revise as etapas anteriores para garantir:
O arquivo password.txt em ~/project contém a senha password
O arquivo login.php em ~/project verifica corretamente o nome de usuário testuser e a senha password e retorna as mensagens apropriadas
O servidor web ainda está em execução (você pode reiniciá-lo com php -S 0.0.0.0:8080 -t /home/labex/project se necessário)
Ao concluir com sucesso esta etapa e verificar as credenciais tanto pela saída do Hydra quanto por testes manuais, você demonstrou sua capacidade de usar o Hydra para descobrir credenciais de login válidas e confirmar sua autenticidade.
Resumo
Neste laboratório, exploramos como usar o Hydra para atacar aplicações web que utilizam HTTP POST para autenticação. Aprendemos sobre as principais opções necessárias para o módulo http-post-form, incluindo a especificação da URL de destino, o formato dos dados POST com os espaços reservados para nome de usuário e senha (^USER^ e ^PASS^) e a identificação de uma string de falha na resposta para detectar tentativas de login malsucedidas.
Configuramos um formulário HTML simples e um script PHP para simular uma página de login, o que nos permitiu entender a estrutura da requisição POST e a resposta esperada. Ao criar e executar o comando Hydra apropriado, realizamos com sucesso o brute-force nas credenciais de login, demonstrando o poder do Hydra em atacar formulários HTTP POST.
Você aprendeu como:
Entender a sintaxe básica para usar o Hydra com HTTP POST.
Identificar as informações necessárias de um formulário web (URL, nomes de campos, mensagem de falha).
Construir um comando Hydra para direcionar um formulário HTTP POST.
Interpretar a saída do Hydra para validar um ataque de login bem-sucedido.
Este laboratório fornece uma compreensão fundamental do uso do Hydra para ataques HTTP POST, que é um cenário comum em testes de segurança de aplicações web.