Introdução
Neste laboratório, exploraremos como atacar serviços habilitados para SSL usando Hydra. O laboratório se concentra em testar as capacidades do Hydra para quebrar senhas em serviços protegidos com SSL/TLS.
Primeiramente, configuraremos um servidor HTTPS local usando Python e openssl para gerar um certificado e chave autoassinados, simulando um ambiente seguro. Em seguida, executaremos o Hydra com a opção -S para habilitar o suporte a SSL e tentaremos quebrar a senha. Também testaremos protocolos SSL mais antigos usando a opção -O. Finalmente, confirmaremos o sucesso do ataque SSL.
Configurar um Servidor HTTPS Local
Nesta etapa, configuraremos um servidor HTTPS simples usando o módulo http.server embutido do Python com SSL/TLS habilitado. Isso nos permitirá simular um ambiente de servidor seguro para testar as capacidades SSL do Hydra.
Primeiro, precisamos gerar um certificado e chave autoassinados. Este certificado será usado para criptografar a comunicação entre o cliente (Hydra) e o servidor. Abra seu terminal e navegue até o diretório ~/project:
cd ~/project
Agora, use o comando openssl para gerar o certificado e a chave:
openssl req -new -x509 -keyout key.pem -out cert.pem -days 365 -nodes
Você será solicitado a inserir algumas informações sobre o certificado. Você pode deixar a maioria dos campos em branco pressionando Enter. Um nome comum é obrigatório, você pode inserir localhost.
Generating a RSA private key
+++++
writing new private key to 'key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:
Este comando cria dois arquivos: key.pem (a chave privada) e cert.pem (o certificado).
Agora, vamos criar um script Python para nosso servidor HTTPS. Usaremos o editor de texto nano para criar e editar o script:
nano https_server.py
Copie e cole o seguinte código no editor:
import http.server
import ssl
import os
## Create the HTTP server
httpd = http.server.HTTPServer(('127.0.0.1', 443), http.server.SimpleHTTPRequestHandler)
## Create SSL context
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain(certfile='cert.pem', keyfile='key.pem')
## Wrap the socket with SSL
httpd.socket = ssl_context.wrap_socket(httpd.socket, server_side=True)
print("Serving HTTPS on 127.0.0.1 port 443 (https://127.0.0.1:443/) ...")
httpd.serve_forever()
Para salvar o arquivo no nano:
- Pressione
Ctrl + Xpara sair - Pressione
Ypara confirmar a gravação - Pressione
Enterpara confirmar o nome do arquivo
Agora você pode executar o servidor HTTPS usando:
python3 https_server.py
Você deve ver uma saída semelhante a:
Serving HTTPS on 127.0.0.1 port 443 (https://127.0.0.1:443/) ...
Deixe esta janela do terminal em execução. Este é o seu servidor HTTPS. Nas próximas etapas, usaremos o Hydra para tentar quebrar a autenticação.
IMPORTANTE: Lembre-se de manter a janela do terminal original em execução com o servidor HTTPS. Não a feche, pois precisaremos dela para as próximas etapas.
Executar Hydra com -S para SSL
Nesta etapa, usaremos o Hydra para realizar um ataque de força bruta contra o servidor HTTPS que configuramos na etapa anterior. A opção -S informa ao Hydra para usar SSL/TLS ao se conectar ao servidor de destino.
Primeiro, vamos criar uma lista simples de nomes de usuário e senhas. Crie um arquivo chamado users.txt no diretório ~/project com o seguinte conteúdo:
test
Em seguida, crie um arquivo chamado passwords.txt no diretório ~/project com o seguinte conteúdo:
password
test
123456
Você pode usar echo para criar e editar esses arquivos:
echo "test" > ~/project/users.txt
echo "password" > ~/project/passwords.txt
echo "test" >> ~/project/users.txt
echo "123456" >> ~/project/passwords.txt
Agora, podemos executar o Hydra com a opção -S para atacar nosso servidor HTTPS. Abra uma nova janela do terminal (deixe o servidor HTTPS em execução na outra janela) e navegue até o diretório ~/project:
cd ~/project
Execute o seguinte comando Hydra:
hydra -l test -P passwords.txt 127.0.0.1 https-get / -S -vV
Vamos detalhar este comando:
hydra: A ferramenta de linha de comando Hydra.-l test: Especifica o nome de usuário a ser usado. Neste caso, estamos usando o nome de usuáriotest.-P passwords.txt: Especifica o arquivo de lista de senhas. Estamos usando o arquivopasswords.txtque criamos.127.0.0.1: O endereço IP de destino. Este é o endereço de loopback, que se refere à nossa máquina local.https-get /: Especifica o serviço a ser atacado (HTTPS) e o caminho a ser solicitado (/).https-geté um módulo que realiza solicitações HTTP GET via SSL/TLS.-S: Informa ao Hydra para usar SSL/TLS ao se conectar ao servidor de destino. Isso é crucial para atacar serviços HTTPS.-vV: Habilita o modo verbose, que exibe as tentativas de login e quaisquer credenciais encontradas.
Hydra agora tentará a força bruta no servidor HTTPS usando o nome de usuário e a lista de senhas fornecidos. Ele tentará cada senha no arquivo passwords.txt em relação ao nome de usuário test.
Você deve ver uma saída semelhante à seguinte (a saída exata pode variar):
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-04-02 14:10:55
[DATA] max 2 tasks per 1 server, overall 2 tasks, 2 login tries (l:1/p:2), ~1 try per task
[DATA] attacking http-gets://127.0.0.1:443/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "test" - pass "password" - 1 of 2 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "test" - pass "123456" - 2 of 2 [child 1] (0/0)
[443][http-get] host: 127.0.0.1 login: test password: password
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
[443][http-get] host: 127.0.0.1 login: test password: 123456
1 of 1 target successfully completed, 2 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-04-02 14:10:56

Se o ataque for bem-sucedido, o Hydra exibirá o nome de usuário e a senha corretos. Neste exemplo, o nome de usuário é test e a senha é password.
Testar SSL Antigo com -O
Nesta etapa, exploraremos como usar a opção -O do Hydra para testar protocolos SSL/TLS mais antigos, potencialmente vulneráveis. A opção -O força o Hydra a usar versões mais antigas de SSL, que podem ser suscetíveis a vários ataques como POODLE ou BEAST.
Antes de prosseguir, é importante entender que o uso de protocolos SSL/TLS mais antigos é geralmente desencorajado devido a vulnerabilidades de segurança. Esta etapa é para fins educacionais, para demonstrar como o Hydra pode ser usado para identificar sistemas que ainda suportam esses protocolos desatualizados.
Para usar a opção -O, simplesmente a adicionamos ao nosso comando Hydra anterior. Certifique-se de que o servidor HTTPS da Etapa 1 ainda esteja em execução. Abra uma nova janela do terminal (deixe o servidor HTTPS em execução na outra janela) e navegue até o diretório ~/project:
cd ~/project
Agora, execute o seguinte comando Hydra:
hydra -l test -P passwords.txt 127.0.0.1 https-get / -S -O -vV
A única diferença entre este comando e o da Etapa 2 é a adição da opção -O.
-O: Força o Hydra a usar versões mais antigas de SSL.
Hydra agora tentará a força bruta no servidor HTTPS usando protocolos SSL/TLS mais antigos. A saída será semelhante à etapa anterior, mas você pode ver avisos ou erros relacionados às versões mais antigas de SSL.
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-04-02 14:13:19
[DATA] max 2 tasks per 1 server, overall 2 tasks, 2 login tries (l:1/p:2), ~1 try per task
[DATA] attacking http-gets://127.0.0.1:443/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "test" - pass "password" - 1 of 2 [child 0] (0/0)
[ATTEMPT] target 127.0.0.1 - login "test" - pass "123456" - 2 of 2 [child 1] (0/0)
[443][http-get] host: 127.0.0.1 login: test password: password
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
[443][http-get] host: 127.0.0.1 login: test password: 123456
1 of 1 target successfully completed, 2 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-04-02 14:13:19
Se o ataque for bem-sucedido, o Hydra exibirá o nome de usuário e a senha corretos, assim como na etapa anterior. O ponto-chave aqui é que a opção -O nos permitiu testar a compatibilidade do servidor com protocolos SSL/TLS mais antigos.
É possível que o servidor recuse a conexão se não suportar os protocolos mais antigos. Nesse caso, o Hydra pode não encontrar a senha. No entanto, o objetivo desta etapa é demonstrar o uso da opção -O, não necessariamente garantir um login bem-sucedido.
Confirmar Sucesso do Ataque SSL
Nesta etapa, confirmaremos o sucesso do nosso ataque Hydra, tentando acessar o servidor HTTPS usando as credenciais que descobrimos. Isso demonstrará que o Hydra foi, de fato, capaz de realizar a força bruta no servidor com sucesso.
Primeiro, certifique-se de que o servidor HTTPS da Etapa 1 ainda esteja em execução.
Usaremos o comando curl para acessar o servidor e verificar se podemos autenticar com o nome de usuário e a senha corretos.
Abra uma nova janela do terminal (deixe o servidor HTTPS em execução na outra janela) e navegue até o diretório ~/project:
cd ~/project
Agora, execute o seguinte comando curl:
curl -k -u test:password https://127.0.0.1
Vamos detalhar este comando:
curl: A ferramenta de linha de comando para transferir dados com URLs.-k: Permite que ocurlprossiga e opere mesmo para conexões de servidor consideradas inseguras. Como estamos usando um certificado autoassinado, ocurlnormalmente se recusará a conectar.-u test:password: Especifica o nome de usuário e a senha a serem usados para autenticação. Estamos usando as credenciaistest:passwordque descobrimos nas etapas anteriores.https://127.0.0.1: A URL do servidor HTTPS.
Se a autenticação for bem-sucedida, o curl exibirá o conteúdo do diretório raiz do servidor. Como estamos usando o módulo http.server do Python, ele provavelmente exibirá uma listagem de diretórios do diretório ~/project.
Você deve ver uma saída semelhante à seguinte (a saída exata pode variar dependendo dos arquivos em seu diretório ~/project):
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Directory listing for /</title>
</head>
<body>
<h1>Directory listing for /</h1>
<hr />
<ul>
<li><a href="cert.pem">cert.pem</a></li>
<li><a href="https_server.py">https_server.py</a></li>
<li><a href="key.pem">key.pem</a></li>
<li><a href="passwords.txt">passwords.txt</a></li>
<li><a href="server.pem">server.pem</a></li>
<li><a href="users.txt">users.txt</a></li>
</ul>
<hr />
</body>
</html>
Isso confirma que fomos capazes de autenticar com sucesso no servidor HTTPS usando as credenciais descobertas pelo Hydra. Isso demonstra a eficácia do Hydra na força bruta de senhas fracas, mesmo em conexões SSL/TLS.
Se você vir uma mensagem de erro em vez da listagem do diretório, verifique novamente se o servidor HTTPS ainda está em execução e se você está usando o nome de usuário e a senha corretos.
Resumo
Neste laboratório, aprendemos como atacar serviços habilitados para SSL usando o Hydra. A etapa inicial envolveu a configuração de um servidor HTTPS local usando o módulo http.server do Python e a geração de um certificado e chave autoassinados com openssl para simular um ambiente seguro.
Em seguida, exploramos as capacidades do Hydra, executando-o com a opção -S para habilitar conexões SSL e a opção -O para testar protocolos SSL mais antigos. Finalmente, confirmamos o sucesso do ataque SSL, demonstrando a capacidade do Hydra de realizar força bruta em credenciais via SSL/TLS.


