Ajustar los Tiempos de Espera de Respuestas de Hydra

HydraBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás a ajustar los tiempos de espera de respuesta de Hydra al atacar servicios con respuestas potencialmente lentas o poco fiables. Utilizaremos SMTP como ejemplo para demostrar estos conceptos.

Comenzarás configurando un servidor SMTP simple con una respuesta retrasada simulada usando Python. Esto te permitirá simular un entorno de red lento o poco fiable. A continuación, ejecutarás Hydra contra este servidor, primero con sus valores predeterminados de tiempo de espera, y posteriormente ajustarás el tiempo de espera utilizando la opción -w para observar su impacto. Finalmente, explorarás las opciones -l y -p para especificar credenciales individuales directamente y las probarás con un solo hilo.

Configurar SMTP con Respuesta Retrasada

En este paso, configurarás un servidor SMTP simple utilizando Python. Este servidor introducirá un retraso en sus respuestas, simulando un servicio lento o poco fiable. Esta configuración es crucial para comprender cómo los ajustes de tiempo de espera de Hydra afectan a su rendimiento.

Primero, debes crear un script de Python llamado delayed_smtp.py en tu directorio ~/project. Este script actuará como tu servidor SMTP.

Abre el editor de texto nano para crear este archivo:

nano ~/project/delayed_smtp.py

Ahora, copia y pega el siguiente código Python en el archivo delayed_smtp.py:

import socket
import time
import threading

def handle_client(client_socket):
    try:
        ## Enviar saludo
        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")  ## Nombre de usuario:
                client_socket.recv(1024)  ## Recibir nombre de usuario

                ## Añadir retraso de 5 segundos
                time.sleep(5)

                client_socket.send(b"334 UGFzc3dvcmQ6\r\n")  ## Contraseña:
                client_socket.recv(1024)  ## Recibir contraseña
                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 en el puerto 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 de Python crea un servidor SMTP básico que escucha en el puerto 1025. El servidor admite la autenticación SMTP usando el método LOGIN, que es lo que espera Hydra. La característica clave es la línea time.sleep(5) en el manejador de autenticación, que introduce un retraso de 5 segundos durante el proceso de autenticación para simular una respuesta de red lenta.

Después de pegar el código, guarda el archivo y cierra nano presionando Ctrl + X, luego Y y luego Enter.

A continuación, necesitas ejecutar este script de Python en segundo plano. Usar nohup asegura que el script continúe ejecutándose incluso si cierras la sesión de terminal. También redirigirás su salida a un archivo de registro llamado delayed_smtp.log para fines de monitorización.

Ejecuta el siguiente comando en tu terminal:

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

Este comando inicia el servidor SMTP. El & al final envía el proceso a segundo plano, permitiéndote continuar usando tu terminal.

Para confirmar que el servidor SMTP está ejecutándose y escuchando en el puerto 1025, puedes usar el comando ss. El comando ss es una utilidad para investigar sockets.

ss -tulnp | grep 1025

Debes ver una salida similar a esta, indicando que el servidor está escuchando en el puerto 1025:

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

El pid=XXXX mostrará el ID de proceso real de tu script de Python. Esto confirma que tu servidor SMTP con retraso está activo y listo para las pruebas.

Esta salida confirma que el servidor SMTP de Python se está ejecutando correctamente y escuchando en el puerto 1025. El estado LISTEN indica que el servidor está listo para aceptar conexiones, y el nombre del proceso python3 confirma que nuestro script se está ejecutando. El retraso de 5 segundos incorporado en este servidor nos ayudará a comprender cómo los ajustes de tiempo de espera de Hydra afectan al rendimiento del ataque.

Servidor SMTP con retraso ejecutándose en el puerto 1025

Ejecutar Hydra con Tiempo de Espera Predeterminado

En este paso, ejecutarás Hydra contra el servidor SMTP con retraso que has configurado. Utilizarás la configuración predeterminada de tiempo de espera de Hydra, que es de 10 segundos. Esto demostrará cómo se comporta Hydra cuando el servicio de destino tiene un retraso en la respuesta que está dentro del tiempo de espera predeterminado de Hydra.

Primero, necesitas crear una lista de nombres de usuario y una lista de contraseñas para que Hydra las utilice. Estos archivos se ubicarán en tu directorio ~/project.

Crea el archivo users.txt:

nano ~/project/users.txt

Añade los siguientes nombres de usuario al archivo users.txt:

testuser
admin
user

Guarda el archivo y cierra nano (Ctrl + X, Y, Intro).

A continuación, crea el archivo passwords.txt:

nano ~/project/passwords.txt

Añade las siguientes contraseñas al archivo passwords.txt:

password
123456
test

Guarda el archivo y cierra nano (Ctrl + X, Y, Intro).

Ahora, ejecutarás Hydra. Atacarás el servidor SMTP que se ejecuta en localhost (127.0.0.1) en el puerto 1025. Utilizarás el módulo smtp, tu lista users.txt y tu lista passwords.txt. La opción -t 1 asegura que Hydra utilice un solo hilo, lo que facilita el seguimiento de la salida.

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

Analicemos el comando:

  • hydra: El comando para invocar la herramienta Hydra.
  • -L ~/project/users.txt: Especifica la ruta al archivo que contiene la lista de nombres de usuario.
  • -P ~/project/passwords.txt: Especifica la ruta al archivo que contiene la lista de contraseñas.
  • -vV: Habilita el modo detallado, que muestra información detallada sobre los intentos de inicio de sesión, incluyendo los exitosos y los fallidos.
  • -t 1: Establece el número de tareas paralelas (hilos) a 1. Esto es útil para observar cada intento secuencialmente.
  • 127.0.0.1: La dirección IP de destino, que es tu máquina local.
  • smtp: El módulo de servicio que Hydra debe utilizar para el ataque, en este caso, SMTP.
  • -s 1025: Especifica el número de puerto del servicio de destino, que es 1025 para tu servidor SMTP con retraso.

Dado que tu servidor SMTP tiene un retraso de 5 segundos y el tiempo de espera predeterminado de Hydra es de 10 segundos, Hydra debería completar cada intento correctamente sin tiempo de espera. Verás una salida similar a la siguiente, mostrando a Hydra intentando cada combinación de nombre de usuario y contraseña:

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 - Por favor, no lo uses en organizaciones militares o de servicios secretos, o para fines ilegales (esto no es vinculante, estas *** ignoran las leyes y la ética de todos modos).

Hydra (https://github.com/vanhauser-thc/thc-hydra) comenzando a las 2025-05-29 13:47:03
[INFO] varios proveedores han implementado protección contra el crackeo, comprueba primero con una pequeña lista de palabras - ¡y mantente legal!
[DATOS] máximo 1 tarea por 1 servidor, en general 1 tarea, 9 intentos de inicio de sesión (l:3/p:3), ~9 intentos por tarea
[DATOS] atacando smtp://127.0.0.1:1025/
[VERBOSE] Resolviendo direcciones... [VERBOSE] resolución completada
[INTENTO] destino 127.0.0.1 - inicio de sesión "testuser" - contraseña "password" - 1 de 9 [hijo 0] (0/0)
[VERBOSE] usando el mecanismo de autenticación SMTP LOGIN
[1025][smtp] host: 127.0.0.1   login: testuser   password: password
... (rest of the output)

Esta salida demuestra a Hydra funcionando con su tiempo de espera predeterminado de 10 segundos contra un servidor con retrasos de 5 segundos. Observa que todos los intentos se completan correctamente sin tiempo de espera, lo que muestra que el tiempo de espera predeterminado es suficiente para este escenario. La línea [DATOS] muestra 9 intentos totales (3 usuarios × 3 contraseñas), y cada inicio de sesión exitoso se marca con [1025][smtp], indicando el puerto y el tipo de servicio.

Ajustar el Tiempo de Espera con -w

En este paso, establecerás explícitamente el tiempo de espera de Hydra utilizando la opción -w. Si bien el tiempo de espera predeterminado (10 segundos) fue suficiente para nuestro retraso de 5 segundos, comprender y controlar este parámetro es crucial para adaptar Hydra a diversas condiciones de red y comportamientos del servidor.

Utilizarás las mismas listas de nombres de usuario y contraseñas (users.txt y passwords.txt) que creaste en el paso anterior.

Ahora, ejecuta Hydra de nuevo, esta vez añadiendo explícitamente la opción -w. Este comando se comportará de forma idéntica al anterior, ya que 10 segundos es el tiempo de espera predeterminado de Hydra, pero demuestra cómo usar la opción.

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

Aquí está el desglose del comando, con la diferencia clave resaltada:

  • hydra: El comando Hydra.
  • -L ~/project/users.txt: Especifica el archivo de lista de nombres de usuario.
  • -P ~/project/passwords.txt: Especifica el archivo de lista de contraseñas.
  • -vV: Habilita el modo detallado.
  • -t 1: Establece el número de hilos a 1.
  • -w 10: Establece explícitamente el tiempo de espera (timeout) a 10 segundos. Esto significa que Hydra esperará hasta 10 segundos una respuesta del servicio de destino antes de considerar el intento como un fallo.
  • 127.0.0.1: La dirección IP de destino.
  • smtp: El módulo de servicio.
  • -s 1025: Especifica el número de puerto.

La salida será similar al paso anterior, ya que el tiempo de espera de 10 segundos es suficiente para el retraso de 5 segundos de tu servidor SMTP. Este paso sirve principalmente para ilustrar el uso de la opción -w.

Hydra v9.2 (c) 2021 by van Hauser/THC & David Maciejak - Por favor, no lo uses en organizaciones militares o de servicios secretos, o para fines ilegales (esto no es vinculante, estas *** ignoran las leyes y la ética de todos modos).

Hydra (https://github.com/vanhauser-thc/thc-hydra) comenzando a las 2025-05-29 14:02:49
[INFO] varios proveedores han implementado protección contra el crackeo, comprueba primero con una pequeña lista de palabras - ¡y mantente legal!
[DATOS] máximo 1 tarea por 1 servidor, en general 1 tarea, 9 intentos de inicio de sesión (l:3/p:3), ~9 intentos por tarea
[DATOS] atacando smtp://127.0.0.1:1025/
[VERBOSE] Resolviendo direcciones... [VERBOSE] resolución completada
[INTENTO] destino 127.0.0.1 - inicio de sesión "testuser" - contraseña "password" - 1 de 9 [hijo 0] (0/0)
[VERBOSE] usando el mecanismo de autenticación SMTP LOGIN
[1025][smtp] host: 127.0.0.1   login: testuser   password: password
... (resto de la salida)

Esta salida demuestra el uso explícito de -w 10 para establecer el tiempo de espera en 10 segundos, produciendo resultados idénticos a la configuración predeterminada. El ataque se completó correctamente, encontrando las 3 contraseñas válidas dentro del plazo de 16 segundos (14:02:49 a 14:03:05). Este paso muestra cómo puedes controlar explícitamente la configuración de tiempo de espera, lo cual se vuelve esencial cuando se trabaja con servidores que tienen tiempos de respuesta más largos que el límite predeterminado de 10 segundos.

Probar una Credencial Única con las Opciones -l y -p

En este paso, aprenderás a usar las opciones -l y -p de Hydra para probar una sola combinación de nombre de usuario y contraseña. Este enfoque te permite especificar un par de credenciales directamente en la línea de comandos, en lugar de usar archivos separados. Esto es especialmente útil para probar rápidamente un par de credenciales específico sin crear ni modificar archivos.

Continuarás utilizando el servidor SMTP con retraso que configuras en el primer paso.

Ejecuta el siguiente comando de Hydra, utilizando la opción -l para especificar el nombre de usuario y la opción -p para especificar la contraseña:

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

Analicemos este comando:

  • hydra: El comando Hydra.
  • -t 1: Establece el número de hilos a 1, asegurando un intento claro y secuencial.
  • -l testuser: Especifica el nombre de usuario a probar. La opción -l (L minúscula) se utiliza para un solo nombre de usuario.
  • -p password: Especifica la contraseña a probar. La opción -p se utiliza para una sola contraseña.
  • -vV: Habilita el modo detallado.
  • 127.0.0.1: La dirección IP de destino.
  • smtp: El módulo de servicio.
  • -s 1025: Especifica el número de puerto.

En este escenario, Hydra solo intentará iniciar sesión con el par de credenciales único testuser:password. Dado que nuestro servidor SMTP acepta cualquier credencial para fines de demostración, Hydra reportará un inicio de sesión exitoso.

Verás una salida similar 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 - Por favor, no lo uses en organizaciones militares o de servicios secretos, o para fines ilegales (esto no es vinculante, estas *** ignoran las leyes y la ética de todos modos).

Hydra (https://github.com/vanhauser-thc/thc-hydra) comenzando a las 2025-05-29 13:50:25
[INFO] varios proveedores han implementado protección contra el crackeo, comprueba primero con una pequeña lista de palabras - ¡y mantente legal!
[DATOS] máximo 1 tarea por 1 servidor, en general 1 tarea, 1 intento de inicio de sesión (l:1/p:1), ~1 intento por tarea
[DATOS] atacando smtp://127.0.0.1:1025/
[VERBOSE] Resolviendo direcciones... [VERBOSE] resolución completada
[INTENTO] destino 127.0.0.1 - inicio de sesión "testuser" - contraseña "password" - 1 de 1 [hijo 0] (0/0)
[VERBOSE] usando el mecanismo de autenticación SMTP LOGIN
[1025][smtp] host: 127.0.0.1   login: testuser   password: password
[ESTADO] ataque finalizado para 127.0.0.1 (esperando a que los hijos completen las pruebas)
1 de 1 objetivo completado con éxito, 1 contraseña válida encontrada
Hydra (https://github.com/vanhauser-thc/thc-hydra) finalizado a las 2025-05-29 13:50:30

Esta salida demuestra la prueba de un solo par de credenciales usando las opciones -l y -p en lugar de archivos de lista de palabras. Observa que la línea [DATOS] ahora muestra 1 intento de inicio de sesión (l:1/p:1), indicando que solo se están probando un nombre de usuario y una contraseña. Este enfoque es eficiente para pruebas dirigidas cuando tienes credenciales específicas para verificar, y se completa mucho más rápido ya que solo hay un intento en lugar de nueve.

Resumen

En este laboratorio, has aprendido a ajustar el comportamiento de Hydra cuando se trabaja con servicios que tienen respuestas lentas o poco fiables.

Empezaste configurando un servidor SMTP simulado lento utilizando un script de Python, que introducía un retraso de 5 segundos en sus respuestas. Esto te permitió crear un entorno controlado para probar la configuración de tiempo de espera de Hydra. Luego, ejecutaste Hydra contra este servidor, observando primero su comportamiento predeterminado y, a continuación, ajustando explícitamente el tiempo de espera utilizando la opción -w. Finalmente, exploraste las opciones -l y -p para especificar credenciales individuales directamente en la línea de comandos, lo cual es útil para realizar pruebas rápidas y específicas.

Este laboratorio te ha proporcionado experiencia práctica en la configuración de Hydra para diversas condiciones de red, mejorando tu capacidad para realizar ataques de fuerza bruta efectivos.