Generar contraseñas con fuerza bruta de Hydra

HydraHydraBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, exploraremos la generación de contraseñas y las técnicas de fuerza bruta utilizando Hydra. El enfoque se centra en aprovechar la opción -x de Hydra para crear contraseñas basadas en criterios definidos, como la longitud y los conjuntos de caracteres.

El laboratorio te guía a través de la generación de contraseñas con la opción -x, apuntando a un servidor FTP ficticio en el localhost. Aprenderás cómo especificar la longitud mínima y máxima de las contraseñas y cómo utilizar conjuntos de caracteres como las letras minúsculas. El laboratorio también cubre cómo deshabilitar los símbolos con la opción -y y analizar la salida de un ataque de fuerza bruta.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hydra(("Hydra")) -.-> hydra/HydraGroup(["Hydra"]) hydra/HydraGroup -.-> hydra/password_creation("Password List Creation") hydra/HydraGroup -.-> hydra/single_username("Single Username Attack") hydra/HydraGroup -.-> hydra/ftp_attack("FTP Brute Force") hydra/HydraGroup -.-> hydra/output_saving("Output File Saving") hydra/HydraGroup -.-> hydra/verbose_mode("Verbose Mode Usage") hydra/HydraGroup -.-> hydra/service_options("Service-Specific Options") hydra/HydraGroup -.-> hydra/troubleshooting("Basic Troubleshooting") subgraph Lab Skills hydra/password_creation -.-> lab-550769{{"Generar contraseñas con fuerza bruta de Hydra"}} hydra/single_username -.-> lab-550769{{"Generar contraseñas con fuerza bruta de Hydra"}} hydra/ftp_attack -.-> lab-550769{{"Generar contraseñas con fuerza bruta de Hydra"}} hydra/output_saving -.-> lab-550769{{"Generar contraseñas con fuerza bruta de Hydra"}} hydra/verbose_mode -.-> lab-550769{{"Generar contraseñas con fuerza bruta de Hydra"}} hydra/service_options -.-> lab-550769{{"Generar contraseñas con fuerza bruta de Hydra"}} hydra/troubleshooting -.-> lab-550769{{"Generar contraseñas con fuerza bruta de Hydra"}} end

Generar contraseñas con la opción -x

En este paso, exploraremos cómo utilizar la opción -x en Hydra para generar contraseñas basadas en un formato especificado. Esto es especialmente útil cuando tienes algún conocimiento sobre la estructura potencial de la contraseña, como un prefijo o sufijo común.

La opción -x de Hydra te permite definir una longitud mínima y máxima para las contraseñas generadas, junto con un conjunto de caracteres a utilizar. La sintaxis es -x min:max:charset.

Comencemos con un ejemplo sencillo. Supongamos que queremos generar contraseñas que tengan entre 6 y 8 caracteres de longitud, utilizando solo letras minúsculas.

Primero, navega al directorio ~/project:

cd ~/project

Ahora, usemos Hydra para generar contraseñas e intentar descifrar un servidor FTP. Con fines de demostración, usaremos un servidor FTP ficticio que siempre acepta cualquier nombre de usuario y contraseña. Usaremos localhost como objetivo, suponiendo que un servidor FTP está funcionando localmente (aunque no es necesario para este paso de generación de contraseñas).

Ejecuta el siguiente comando:

hydra -l user -P /dev/null -vV -x 6:8:lc localhost ftp

Desglosemos este comando:

  • hydra: La herramienta de línea de comandos de Hydra.
  • -l user: Especifica el nombre de usuario a utilizar. Aquí estamos usando "user", pero podría ser cualquier nombre de usuario.
  • -P /dev/null: Le dice a Hydra que no utilice un archivo de lista de contraseñas. En su lugar, estamos usando -x para generar contraseñas. /dev/null es un archivo especial que descarta cualquier dato escrito en él.
  • -vV: Habilita la salida detallada, mostrando cada intento de inicio de sesión.
  • -x 6:8:lc: Esta es la parte clave. Le dice a Hydra que genere contraseñas con:
    • 6: Longitud mínima de 6 caracteres.
    • 8: Longitud máxima de 8 caracteres.
    • lc: Utilizar solo letras minúsculas (a - z). Otras opciones incluyen uc (mayúsculas), 12 (dígitos), sc (símbolos). Puedes combinarlas, por ejemplo, lcuc12 para minúsculas, mayúsculas y dígitos.
  • localhost: El host objetivo (en este caso, nuestro servidor FTP ficticio).
  • ftp: El servicio a atacar (FTP).

Verás que Hydra intenta iniciar sesión con contraseñas generadas como "aaaaaa", "aaaaaaa", "aaaaaaaa", "aaaaab", etc. Dado que estamos usando /dev/null como archivo de contraseñas, Hydra solo utilizará las contraseñas generadas por la opción -x.

Nota importante: Este ejemplo utiliza un servidor FTP ficticio con fines de demostración. No intentes descifrar servidores FTP sin permiso explícito.

Ahora, probemos un ejemplo más complejo. Supongamos que sabemos que las contraseñas pueden comenzar con "prefix" y terminar con un dígito, con 4 - 6 caracteres alfanuméricos en el medio.

No podemos especificar directamente un prefijo y un sufijo con -x. Sin embargo, podemos generar la parte del medio y luego agregar los prefijos y sufijos conocidos utilizando otras herramientas (como sed o awk) para crear un archivo de lista de contraseñas, que luego usaríamos con Hydra. Por simplicidad, nos limitaremos al uso básico de -x en este paso. Exploraremos manipulaciones más avanzadas de listas de contraseñas en pasos posteriores.

Por ahora, generemos contraseñas que tengan entre 8 y 10 caracteres de longitud, utilizando letras minúsculas y dígitos:

hydra -l user -P /dev/null -vV -x 8:10:lc12 localhost ftp

Esto generará contraseñas como "aaaaaaaa", "aaaaaaa1", "aaaaaa11", etc.

Este paso demostró cómo utilizar la opción -x para generar contraseñas con restricciones específicas de longitud y conjunto de caracteres. Esta es una técnica poderosa cuando tienes algún conocimiento previo sobre la estructura potencial de la contraseña.

Atacar un servidor FTP con contraseñas generadas

En este paso, basaremos en el paso anterior y utilizaremos las capacidades de generación de contraseñas de Hydra para atacar un servidor FTP (ficticio). Nos centraremos en utilizar una lista de contraseñas generada "al vuelo" con la opción -x.

Como recordatorio, es crucial enfatizar que atacar sistemas sin permiso explícito es ilegal y poco ético. Este laboratorio es solo con fines educativos, y debes utilizar estas técnicas solo en sistemas que pertenezcan a ti o para los que tengas permiso para probar.

Para este paso, asumiremos que tienes un servidor FTP básico en funcionamiento (incluso si es un servidor ficticio que acepta cualquier credencial). Si no tienes uno, puedes configurar rápidamente uno sencillo utilizando Python:

sudo apt update
sudo apt install python3-pyftpdlib

Luego, crea un directorio para que el servidor FTP sirva archivos:

mkdir ~/project/ftp_root

Y inicia el servidor FTP:

python3 -m pyftpdlib -p 2121 -w ~/project/ftp_root

Esto inicia un servidor FTP en el puerto 2121, sirviendo archivos desde el directorio ~/project/ftp_root. La opción -w permite acceso de escritura. Puedes detener el servidor con Ctrl+C. Ten en cuenta que este es un servidor muy básico con fines de prueba y no es adecuado para uso en producción.

Ahora, usemos Hydra para atacar este servidor FTP. Utilizaremos la opción -x para generar contraseñas e intentar iniciar sesión como el usuario "testuser".

hydra -l testuser -P /dev/null -vV -x 4:6:lc 127.0.0.1 ftp

Desglosemos nuevamente este comando:

  • hydra: La herramienta de línea de comandos de Hydra.
  • -l testuser: Especifica el nombre de usuario a utilizar: "testuser".
  • -P /dev/null: Le dice a Hydra que no utilice un archivo de lista de contraseñas. En su lugar, estamos usando -x para generar contraseñas.
  • -vV: Habilita la salida detallada, mostrando cada intento de inicio de sesión.
  • -x 4:6:lc: Esto le dice a Hydra que genere contraseñas con:
    • 4: Longitud mínima de 4 caracteres.
    • 6: Longitud máxima de 6 caracteres.
    • lc: Utilizar solo letras minúsculas (a - z).
  • 127.0.0.1: El host objetivo (localhost). Usamos 127.0.0.1 en lugar de localhost para evitar posibles problemas de resolución DNS dentro del contenedor Docker.
  • ftp: El servicio a atacar (FTP).

Deberías ver a Hydra intentando iniciar sesión con las contraseñas generadas. Dado que nuestro servidor FTP ficticio acepta cualquier credencial, es probable que Hydra encuentre una contraseña válida rápidamente.

Ahora, probemos un ejemplo un poco más complejo, combinando letras minúsculas y dígitos:

hydra -l testuser -P /dev/null -vV -x 5:7:lc12 127.0.0.1 ftp

Esto generará contraseñas como "aaaaa", "aaaaa1", "aaaa11", etc.

Consideraciones importantes:

  • Limitación de velocidad (Rate Limiting): Los servidores FTP del mundo real a menudo tienen limitación de velocidad para prevenir ataques de fuerza bruta. Hydra tiene opciones para controlar el número de conexiones concurrentes y el retraso entre intentos.
  • Complejidad de la contraseña: La efectividad de un ataque de fuerza bruta depende en gran medida de la complejidad de las contraseñas. Contraseñas más largas y complejas (que usen una combinación de mayúsculas, minúsculas, dígitos y símbolos) son mucho más difíciles de descifrar.
  • Implicaciones legales y éticas: Siempre obtén permiso explícito antes de intentar probar la seguridad de cualquier sistema.

Este paso demostró cómo usar Hydra con la opción -x para generar contraseñas y atacar un servidor FTP. Recuerda utilizar estas técnicas de manera responsable y ética.

Deshabilitar símbolos con la opción -y

En este paso, aprenderemos cómo utilizar la opción -y en Hydra para deshabilitar el uso de símbolos al leer contraseñas de un archivo. Esto es útil cuando sospechas que el sistema objetivo podría tener problemas para manejar caracteres especiales en las contraseñas, o cuando quieres excluir específicamente los símbolos de tus intentos de fuerza bruta.

La opción -y le dice a Hydra que ignore cualquier símbolo presente en el archivo de lista de contraseñas. No afecta la generación de contraseñas con la opción -x; solo se aplica cuando se leen contraseñas de un archivo.

Primero, creemos un archivo de lista de contraseñas que contenga algunas contraseñas con símbolos. Navega al directorio ~/project:

cd ~/project

Ahora, crea un archivo llamado passwords.txt utilizando nano:

nano passwords.txt

Agrega las siguientes contraseñas al archivo:

password123
P@sswOrd
secret!
12345
qwerty

Guarda el archivo y sal de nano (Ctrl+X, luego Y, luego Enter).

Ahora, usemos Hydra para atacar nuestro servidor FTP ficticio (suponiendo que todavía lo tienes en funcionamiento desde el paso anterior) utilizando esta lista de contraseñas, sin la opción -y:

hydra -l testuser -P passwords.txt -vV 127.0.0.1 ftp

Hydra intentará iniciar sesión utilizando cada contraseña en el archivo passwords.txt, incluyendo aquellas con símbolos.

Ahora, usemos la opción -y para deshabilitar los símbolos:

hydra -l testuser -P passwords.txt -y -vV 127.0.0.1 ftp

Con la opción -y, Hydra tratará efectivamente contraseñas como "P@sswOrd" como "PsswOrd" y "secret!" como "secret". Elimina los símbolos antes de intentar el inicio de sesión.

Nota importante: La opción -y modifica las contraseñas antes de enviarlas al servicio objetivo. Esto significa que si la contraseña real requiere un símbolo, el uso de -y evitará que la encuentres.

Para ilustrar esto mejor, creemos un escenario en el que la contraseña correcta es "secret!". Si usamos -y, Hydra intentará "secret" y fallará.

Cuándo usar -y:

  • Cuando sospechas que el sistema objetivo tiene problemas con los símbolos en las contraseñas.
  • Cuando quieres excluir específicamente los símbolos de tus intentos de fuerza bruta (por ejemplo, si sabes que la política de contraseñas no los permite).
  • Cuando estás solucionando problemas de conexión y sospechas que los símbolos podrían ser la causa.

Este paso demostró cómo utilizar la opción -y en Hydra para deshabilitar los símbolos al leer contraseñas de un archivo. Recuerda considerar el impacto potencial en tus intentos de fuerza bruta, ya que puede evitar que encuentres contraseñas que contengan símbolos.

Analizar la salida de un ataque de fuerza bruta

En este paso, nos centraremos en analizar la salida generada por Hydra durante un ataque de fuerza bruta. Comprender la salida es crucial para identificar inicios de sesión exitosos, solucionar problemas y optimizar tu estrategia de ataque.

Hydra ofrece diferentes niveles de detalle, controlados por la opción -v. Hemos estado usando -vV en los pasos anteriores, lo cual proporciona un buen equilibrio de información. Examinemos los diferentes mensajes de salida y lo que significan.

Primero, ejecutemos un simple comando de Hydra contra nuestro servidor FTP ficticio (asegúrate de que todavía esté en funcionamiento):

hydra -l testuser -P passwords.txt -vV 127.0.0.1 ftp

Suponiendo que tienes el archivo passwords.txt del paso anterior, Hydra intentará iniciar sesión utilizando cada contraseña del archivo.

A continuación, se detallan los mensajes de salida comunes que podrías ver:

  • [DATA] 127.0.0.1:21 - banner: 220 pyftpdlib 1.5.6: Esto muestra el banner recibido del servidor FTP. El banner proporciona información sobre el software y la versión del servidor.
  • [STATUS] 127.0.0.1:21 - 1/5 [5/5 pp]: Esto indica el progreso del ataque.
    • 1/5: Significa que Hydra ha probado 1 contraseña de un total de 5.
    • [5/5 pp]: Muestra el número de contraseñas por proceso.
  • [DEBUG] ...: Los mensajes de depuración proporcionan información más detallada sobre la conexión y el proceso de autenticación. Son útiles para solucionar problemas.
  • [21][ftp] host: 127.0.0.1 login: testuser password: password123: Esto muestra las credenciales que se están probando.
  • [21][ftp] host: 127.0.0.1 login: testuser password: P@sswOrd: Esto muestra las siguientes credenciales que se están probando.
  • [ATTEMPT][ftp] 127.0.0.1:21 - login: 'testuser' password: 'password123': Esta línea indica que Hydra está intentando iniciar sesión con el nombre de usuario y la contraseña especificados.
  • [21][ftp] 127.0.0.1: Login incorrect: Esto indica un intento de inicio de sesión fallido. El mensaje exacto depende de la configuración del servidor FTP.
  • [21][ftp] 127.0.0.1: Invalid username or password: Esto también indica un intento de inicio de sesión fallido.
  • [21][ftp] 127.0.0.1: ftp:Login OK: ¡Este es el mensaje más importante! Indica un inicio de sesión exitoso. Hydra ha encontrado una combinación válida de nombre de usuario y contraseña.

Si Hydra encuentra un inicio de sesión válido, mostrará el mensaje "Login OK" y luego detendrá el ataque (por defecto).

Guardar la salida en un archivo:

Puedes guardar la salida de Hydra en un archivo para su posterior análisis utilizando la opción -o:

hydra -l testuser -P passwords.txt -vV -o output.txt 127.0.0.1 ftp

Esto guardará todos los mensajes de salida en un archivo llamado output.txt en el directorio ~/project. Luego puedes usar herramientas como grep para buscar mensajes específicos, como "Login OK".

Por ejemplo, para encontrar inicios de sesión exitosos en el archivo output.txt:

grep "Login OK" output.txt

Interpretar la salida:

  • No hay mensajes de "Login OK": Esto significa que Hydra no pudo encontrar una combinación válida de nombre de usuario y contraseña. Esto puede deberse a varios motivos:
    • La contraseña correcta no está en tu lista de contraseñas.
    • El nombre de usuario es incorrecto.
    • El servicio objetivo no es vulnerable a ataques de fuerza bruta (por ejemplo, debido a políticas de bloqueo de cuentas).
    • Hay problemas de conectividad de red.
  • Muchos mensajes de "Login Incorrect": Esto indica que Hydra está probando muchas combinaciones inválidas de nombre de usuario y contraseña. Esto es esperado durante un ataque de fuerza bruta.
  • Errores de "Connection refused" o "Timeout": Estos indican problemas de conectividad de red. Asegúrate de que el servicio objetivo esté en funcionamiento y sea accesible desde tu máquina.

Al analizar detenidamente la salida de Hydra, puedes obtener información valiosa sobre la seguridad del sistema objetivo y refinar tu estrategia de ataque.

Resumen

En este laboratorio, exploramos el uso de Hydra para generar contraseñas para ataques de fuerza bruta, centrándonos específicamente en la opción -x. Esta opción permite crear contraseñas basadas en parámetros definidos, como la longitud mínima y máxima, y conjuntos de caracteres (minúsculas, mayúsculas, dígitos, símbolos).

El laboratorio demostró cómo usar -x con restricciones de longitud específicas y el conjunto de caracteres lc (minúsculas) para generar contraseñas e intentar descifrar un servidor FTP ficticio que se ejecuta en el localhost. El comando hydra -l user -P /dev/null -vV -x 6:8:lc localhost ftp se utilizó para ilustrar este proceso, destacando la importancia de entender la sintaxis y las opciones de conjuntos de caracteres disponibles para una generación efectiva de contraseñas.