Ajuste de Tempos de Espera de Resposta do Hydra

HydraBeginner
Pratique Agora

Introdução

Neste laboratório, aprenderá a ajustar os tempos de espera de resposta do Hydra ao atacar serviços com respostas potencialmente lentas ou não confiáveis. Usaremos SMTP como exemplo para demonstrar estes conceitos.

Começará por configurar um servidor SMTP simples com uma resposta atrasada simulada usando Python. Isto permitirá simular um ambiente de rede lento ou não confiável. Em seguida, executará o Hydra contra este servidor, primeiro com as suas definições de tempo de espera padrão, e posteriormente ajustará o tempo de espera usando a opção -w para observar o seu impacto. Finalmente, explorará as opções -l e -p para especificar credenciais únicas diretamente e testá-las com um único thread.

Configurar SMTP com Resposta Atrasada

Neste passo, irá configurar um servidor SMTP simples usando Python. Este servidor introduzirá um atraso nas suas respostas, simulando um serviço lento ou não confiável. Esta configuração é crucial para compreender como as definições de tempo de espera do Hydra afetam o seu desempenho.

Primeiro, precisa de criar um script Python chamado delayed_smtp.py no seu diretório ~/project. Este script funcionará como o seu servidor SMTP.

Abra o editor de texto nano para criar este ficheiro:

nano ~/project/delayed_smtp.py

Agora, copie e cole o seguinte código Python no ficheiro delayed_smtp.py:

import socket
import time
import threading

def handle_client(client_socket):
    try:
        ## Enviar saudação
        client_socket.send(b"220 localhost ESMTP\r\n")

        while True:
            data = client_socket.recv(1024).decode('utf-8').strip()
            if not data:
                break

            if data.upper().startswith('EHLO') or data.upper().startswith('HELO'):
                client_socket.send(b"250-localhost\r\n250-AUTH LOGIN\r\n250 OK\r\n")

            elif data.upper().startswith('AUTH LOGIN'):
                client_socket.send(b"334 VXNlcm5hbWU6\r\n")  ## Username:
                client_socket.recv(1024)  ## Receber nome de utilizador

                ## Adicionar atraso de 5 segundos
                time.sleep(5)

                client_socket.send(b"334 UGFzc3dvcmQ6\r\n")  ## Password:
                client_socket.recv(1024)  ## Receber palavra-passe
                client_socket.send(b"235 Authentication successful\r\n")

            elif data.upper().startswith('QUIT'):
                client_socket.send(b"221 Bye\r\n")
                break
            else:
                client_socket.send(b"250 OK\r\n")

    except:
        pass
    finally:
        client_socket.close()

def run_server():
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server.bind(('127.0.0.1', 1025))
    server.listen(5)
    print("Servidor SMTP iniciado na porta 1025")

    while True:
        try:
            client, addr = server.accept()
            thread = threading.Thread(target=handle_client, args=(client,))
            thread.daemon = True
            thread.start()
        except:
            break

if __name__ == '__main__':
    run_server()

Este script Python simplificado cria um servidor SMTP básico que ouve na porta 1025. O servidor suporta autenticação SMTP usando o método LOGIN, que é o esperado pelo Hydra. A característica chave é a linha time.sleep(5) no manipulador de autenticação, que introduz um atraso de 5 segundos durante o processo de autenticação para simular uma resposta de rede lenta.

Após colar o código, guarde o ficheiro e saia do nano pressionando Ctrl + X, depois Y e, em seguida, Enter.

Em seguida, precisa de executar este script Python em segundo plano. O uso de nohup garante que o script continue a executar mesmo que feche a sessão do terminal. Também irá redirecionar a sua saída para um ficheiro de registo chamado delayed_smtp.log para fins de monitorização.

Execute o seguinte comando no seu terminal:

nohup python3 ~/project/delayed_smtp.py > ~/project/delayed_smtp.log 2>&1 &

Este comando inicia o servidor SMTP. O & no final envia o processo para segundo plano, permitindo que continue a usar o seu terminal.

Para confirmar que o servidor SMTP está a funcionar e a ouvir na porta 1025, pode usar o comando ss. O comando ss é uma ferramenta para investigar sockets.

ss -tulnp | grep 1025

Deverá ver uma saída semelhante a esta, indicando que o servidor está a ouvir na porta 1025:

tcp   LISTEN 0      4096   0.0.0.0:1025      0.0.0.0:*    users:(("python3",pid=XXXX,fd=X))

O pid=XXXX mostrará o ID de processo real do seu script Python. Isto confirma que o seu servidor SMTP com atraso está agora ativo e pronto para testes.

Esta saída confirma que o servidor Python SMTP está a funcionar com sucesso e a ouvir na porta 1025. O estado LISTEN indica que o servidor está pronto a aceitar ligações, e o nome do processo python3 confirma que o nosso script está a funcionar. O atraso de 5 segundos incorporado neste servidor ajudará-nos a compreender como as definições de tempo de espera do Hydra afetam o desempenho do ataque.

Servidor SMTP com atraso a funcionar na porta 1025

Executar Hydra com Tempo de Espera Padrão

Neste passo, irá executar o Hydra contra o servidor SMTP com atraso que configurou. Utilizará a definição de tempo de espera padrão do Hydra, que é de 10 segundos. Isto demonstrará como o Hydra se comporta quando o serviço alvo tem um atraso de resposta que está dentro do tempo limite padrão do Hydra.

Primeiro, precisa de criar uma lista de utilizadores e uma lista de palavras-passe para o Hydra utilizar. Estes ficheiros estarão no seu diretório ~/project.

Crie o ficheiro users.txt:

nano ~/project/users.txt

Adicione os seguintes nomes de utilizador ao ficheiro users.txt:

testuser
admin
user

Grave o ficheiro e saia do nano (Ctrl + X, Y, Enter).

Em seguida, crie o ficheiro passwords.txt:

nano ~/project/passwords.txt

Adicione as seguintes palavras-passe ao ficheiro passwords.txt:

password
123456
test

Grave o ficheiro e saia do nano (Ctrl + X, Y, Enter).

Agora, irá executar o Hydra. Irá atacar o servidor SMTP a correr em localhost (127.0.0.1) na porta 1025. Utilizará o módulo smtp, a sua lista users.txt e a sua lista passwords.txt. A opção -t 1 garante que o Hydra utiliza apenas uma thread, tornando a saída mais fácil de seguir.

hydra -L ~/project/users.txt -P ~/project/passwords.txt -vV -t 1 127.0.0.1 smtp -s 1025

Vamos decompor o comando:

  • hydra: O comando para invocar a ferramenta Hydra.
  • -L ~/project/users.txt: Especifica o caminho para o ficheiro que contém a lista de nomes de utilizador.
  • -P ~/project/passwords.txt: Especifica o caminho para o ficheiro que contém a lista de palavras-passe.
  • -vV: Habilita o modo detalhado, que apresenta informações detalhadas sobre as tentativas de login, incluindo as bem-sucedidas e as falhadas.
  • -t 1: Define o número de tarefas paralelas (threads) para 1. Isto é útil para observar cada tentativa sequencialmente.
  • 127.0.0.1: O endereço IP alvo, que é a sua máquina local.
  • smtp: O módulo de serviço que o Hydra deve utilizar para o ataque, neste caso, SMTP.
  • -s 1025: Especifica o número da porta do serviço alvo, que é 1025 para o seu servidor SMTP com atraso.

Como o seu servidor SMTP tem um atraso de 5 segundos e o tempo de espera padrão do Hydra é de 10 segundos, o Hydra deverá completar cada tentativa com sucesso sem ultrapassar o tempo limite. Verá uma saída semelhante à seguinte, mostrando o Hydra a tentar cada combinação de nome de utilizador e palavra-passe:

labex:project/ $ hydra -L ~/project/users.txt -P ~/project/passwords.txt -vV -t 1 127.0.0.1 smtp -s 1025
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-29 13:47:03
[INFO] several providers have implemented cracking protection, check with a small wordlist first - and stay legal!
[DATA] max 1 task per 1 server, overall 1 task, 9 login tries (l:3/p:3), ~9 tries per task
[DATA] attacking smtp://127.0.0.1:1025/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "password" - 1 of 9 [child 0] (0/0)
[VERBOSE] using SMTP LOGIN AUTH mechanism
[1025][smtp] host: 127.0.0.1   login: testuser   password: password
... (rest of output)

Esta saída demonstra o Hydra a funcionar com o seu tempo de espera padrão de 10 segundos contra um servidor com atrasos de 5 segundos. Note que todas as tentativas são concluídas com sucesso sem ultrapassar o tempo limite, mostrando que o tempo de espera padrão é suficiente para este cenário. A linha [DATA] mostra 9 tentativas no total (3 utilizadores × 3 palavras-passe), e cada login bem-sucedido é marcado com [1025][smtp], indicando a porta e o tipo de serviço.

Ajustar o Tempo de Espera com -w

Neste passo, irá definir explicitamente o tempo de espera do Hydra usando a opção -w. Embora o tempo de espera padrão (10 segundos) tenha sido suficiente para o nosso atraso de 5 segundos, compreender e controlar este parâmetro é crucial para adaptar o Hydra a várias condições de rede e comportamentos de servidor.

Utilizará as mesmas listas de utilizadores e palavras-passe (users.txt e passwords.txt) criadas no passo anterior.

Agora, execute o Hydra novamente, desta vez adicionando explicitamente a opção -w. Este comando comportar-se-á de forma idêntica ao anterior, uma vez que 10 segundos é o tempo de espera padrão do Hydra, mas demonstra como usar a opção.

hydra -L ~/project/users.txt -P ~/project/passwords.txt -vV -t 1 -w 10 127.0.0.1 smtp -s 1025

Aqui está a decomposição do comando, com a diferença chave destacada:

  • hydra: O comando Hydra.
  • -L ~/project/users.txt: Especifica o ficheiro da lista de utilizadores.
  • -P ~/project/passwords.txt: Especifica o ficheiro da lista de palavras-passe.
  • -vV: Habilita o modo detalhado.
  • -t 1: Define o número de threads para 1.
  • -w 10: Define explicitamente o tempo de espera (timeout) para 10 segundos. Isto significa que o Hydra aguardará até 10 segundos por uma resposta do serviço alvo antes de considerar a tentativa como falhada.
  • 127.0.0.1: O endereço IP alvo.
  • smtp: O módulo de serviço.
  • -s 1025: Especifica o número da porta.

A saída será semelhante ao passo anterior, uma vez que o tempo de espera de 10 segundos é suficiente para o atraso de 5 segundos do seu servidor SMTP. Este passo serve principalmente para ilustrar a utilização da opção -w.

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-29 14:02:49
[INFO] several providers have implemented cracking protection, check with a small wordlist first - and stay legal!
[DATA] max 1 task per 1 server, overall 1 task, 9 login tries (l:3/p:3), ~9 tries per task
[DATA] attacking smtp://127.0.0.1:1025/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "password" - 1 of 9 [child 0] (0/0)
[VERBOSE] using SMTP LOGIN AUTH mechanism
[1025][smtp] host: 127.0.0.1   login: testuser   password: password
... (rest of output)

Esta saída demonstra a utilização explícita de -w 10 para definir o tempo de espera para 10 segundos, produzindo resultados idênticos à configuração padrão. O ataque foi concluído com sucesso, encontrando as 3 palavras-passe válidas dentro do período de 16 segundos (14:02:49 a 14:03:05). Este passo mostra como pode controlar explicitamente as definições de tempo limite, o que se torna essencial quando se lida com servidores que têm tempos de resposta mais longos do que o limite padrão de 10 segundos.

Testar Credencial Única com as Opções -l e -p

Neste passo, aprenderá a utilizar as opções -l e -p do Hydra para testar uma única combinação de nome de utilizador e palavra-passe. Esta abordagem permite especificar um único par de credenciais diretamente na linha de comandos, em vez de utilizar ficheiros separados. Isto é particularmente útil para testar rapidamente um par de credenciais específico sem criar ou modificar ficheiros.

Continuará a utilizar o servidor SMTP com atraso configurado no primeiro passo.

Execute o seguinte comando Hydra, utilizando a opção -l para especificar o nome de utilizador e a opção -p para especificar a palavra-passe:

hydra -t 1 -l testuser -p password -vV 127.0.0.1 smtp -s 1025

Vamos decompor este comando:

  • hydra: O comando Hydra.
  • -t 1: Define o número de threads para 1, garantindo uma tentativa clara e sequencial.
  • -l testuser: Especifica o nome de utilizador a testar. A opção -l (L minúsculo) é usada para um único nome de utilizador.
  • -p password: Especifica a palavra-passe a testar. A opção -p é usada para uma única palavra-passe.
  • -vV: Habilita o modo detalhado.
  • 127.0.0.1: O endereço IP alvo.
  • smtp: O módulo de serviço.
  • -s 1025: Especifica o número da porta.

Neste cenário, o Hydra apenas tentará efetuar login com o único par de credenciais testuser:password. Como o nosso servidor SMTP aceita quaisquer credenciais para fins de demonstração, o Hydra reportará um login bem-sucedido.

Verá uma saída semelhante a esta:

labex:project/ $ hydra -t 1 -l testuser -p password -vV 127.0.0.1 smtp -s 1025
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-29 13:50:25
[INFO] several providers have implemented cracking protection, check with a small wordlist first - and stay legal!
[DATA] max 1 task per 1 server, overall 1 task, 1 login try (l:1/p:1), ~1 try per task
[DATA] attacking smtp://127.0.0.1:1025/
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 127.0.0.1 - login "testuser" - pass "password" - 1 of 1 [child 0] (0/0)
[VERBOSE] using SMTP LOGIN AUTH mechanism
[1025][smtp] host: 127.0.0.1   login: testuser   password: password
[STATUS] attack finished for 127.0.0.1 (waiting for children to complete tests)
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 13:50:30

Esta saída demonstra o teste de um único par de credenciais usando as opções -l e -p em vez de ficheiros de lista de palavras-passe. Note que a linha [DATA] agora mostra 1 login try (l:1/p:1), indicando que apenas um nome de utilizador e uma palavra-passe estão a ser testados. Esta abordagem é eficiente para testes direcionados quando se têm credenciais específicas a verificar, e completa muito mais rapidamente, uma vez que só há uma tentativa em vez de nove.

Resumo

Neste laboratório, aprendeu a ajustar o comportamento do Hydra quando lida com serviços que têm respostas lentas ou não fiáveis.

Começou por configurar um servidor SMTP simulado lento usando um script Python, que introduziu um atraso de 5 segundos nas suas respostas. Isto permitiu-lhe criar um ambiente controlado para testar as definições de tempo limite do Hydra. Em seguida, executou o Hydra contra este servidor, observando primeiro o seu comportamento padrão e, em seguida, ajustando explicitamente o tempo de espera usando a opção -w. Finalmente, explorou as opções -l e -p para especificar credenciais únicas diretamente na linha de comandos, o que é útil para testes rápidos e direcionados.

Este laboratório proporcionou-lhe experiência prática na configuração do Hydra para várias condições de rede, melhorando a sua capacidade de realizar ataques de força bruta eficazes.