Ataque de fuerza bruta a la autenticación web

HydraBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás cómo los atacantes comprometen sistemas de autenticación web débiles. Analizarás solicitudes de inicio de sesión HTTP POST estándar y configurarás la herramienta de fuerza bruta Hydra para realizar ataques de diccionario automatizados contra el formulario de inicio de sesión de un portal web y recuperar credenciales válidas.

Los ataques de fuerza bruta consisten en enviar sistemáticamente muchas contraseñas o frases de contraseña con la esperanza de adivinar la correcta eventualmente. Al atacar aplicaciones web, los atacantes suelen centrarse en formularios de inicio de sesión que utilizan el método HTTP POST para transmitir las credenciales del usuario. Comprender cómo funcionan estos ataques es crucial para asegurar las aplicaciones web e implementar mecanismos adecuados de limitación de tasa (rate limiting) y bloqueo de cuentas.

Fundamentalmente, este es un problema de economía de la autenticación. Si la aplicación permite a los atacantes realizar muchas suposiciones a bajo costo, las credenciales débiles o reutilizadas se vuelven objetivos fáciles de recuperar.

Analizar los parámetros de la solicitud de inicio de sesión

En este paso, analizarás la aplicación web objetivo para comprender cómo procesa las solicitudes de inicio de sesión. Antes de lanzar un ataque de fuerza bruta, debes identificar la URL de destino, el método HTTP utilizado, los nombres de los campos de entrada y el mensaje que se devuelve tras un intento fallido de inicio de sesión.

Este paso de reconocimiento es fundamental porque herramientas como Hydra son tan eficaces como la plantilla de solicitud que les proporciones. Si malinterpretas el formulario, la lógica del ataque será errónea desde el principio.

Se ha iniciado un servidor web local para ti en el puerto 8080. Primero, veamos el código fuente HTML de la página de inicio de sesión para identificar los parámetros del formulario. Puedes usar el comando curl para obtener el contenido de la página web.

curl -s http://127.0.0.1:8080/

La salida mostrará un formulario HTML simple. Observa el atributo action="/login", que nos indica dónde se envían los datos del formulario. El atributo method="POST" indica que los datos se envían mediante una solicitud HTTP POST. Finalmente, observa los atributos name de los campos de entrada: username y password.

A continuación, debes simular un intento fallido de inicio de sesión para ver cómo responde el servidor. Este es un paso crítico porque las herramientas de fuerza bruta necesitan saber cómo se ve un "fallo" para poder identificar un "éxito" cuando el mensaje de error no aparece.

Usa curl para enviar una solicitud POST con credenciales ficticias. El flag -X POST especifica el método HTTP, y el flag -d te permite enviar los datos del formulario.

curl -X POST -d "username=testuser&password=wrongpass" http://127.0.0.1:8080/login

Deberías ver la siguiente salida:

Invalid credentials. Please try again.

Esta cadena específica, Invalid credentials, es el mensaje de error. Utilizarás esta frase exacta más adelante para configurar la herramienta de fuerza bruta.

Seleccionar listas de palabras (wordlists)

En este paso, prepararás los diccionarios (listas de palabras) que se utilizarán para el ataque de fuerza bruta. Un ataque de diccionario se basa en una lista predefinida de posibles nombres de usuario y contraseñas.

Los ataques de diccionario son más rápidos que una búsqueda exhaustiva a ciegas porque explotan la previsibilidad humana. Las personas no eligen contraseñas de forma uniforme y aleatoria.

En lugar de probar cada combinación posible de caracteres, los atacantes utilizan listas de palabras que contienen nombres de usuario comunes (como admin, root, user) y contraseñas utilizadas frecuentemente (como 123456, password, qwerty).

Crearás dos archivos de texto simples en tu directorio de trabajo actual (~/project). El primer archivo contendrá una lista de posibles nombres de usuario. Usa el comando echo para escribir los nombres en un archivo llamado users.txt.

echo "root" > users.txt
echo "admin" >> users.txt
echo "test" >> users.txt

El operador > crea el archivo y escribe la primera línea, mientras que el operador >> añade las líneas subsiguientes al archivo existente.

A continuación, crea un archivo llamado passwords.txt que contenga una lista de posibles contraseñas.

echo "password123" > passwords.txt
echo "admin123" >> passwords.txt
echo "secret123" >> passwords.txt
echo "123456" >> passwords.txt

Puedes verificar el contenido de tus listas de palabras recién creadas usando el comando cat.

cat users.txt
cat passwords.txt

En un escenario real, los profesionales de pruebas de penetración utilizan listas de palabras masivas y disponibles públicamente como rockyou.txt, que contiene millones de contraseñas comprometidas. Para este laboratorio educativo, estas pequeñas listas personalizadas serán suficientes.

Configurar Hydra para formularios HTTP POST

En este paso, aprenderás a estructurar el comando para Hydra, un potente cracker de inicios de sesión de red. Hydra admite numerosos protocolos, incluidos HTTP, FTP, SSH y más.

Para atacar un formulario de inicio de sesión web, Hydra utiliza un módulo específico llamado http-post-form. Este módulo requiere una cadena con un formato preciso para entender cómo interactuar con la aplicación web objetivo.

La sintaxis para el módulo http-post-form es la siguiente: "<ruta>:<parámetros del formulario>:<cadena de error>"

Desglosemos cómo se aplica esto a la información que recopilaste en el Paso 1. Primero está la ruta, que es la URL donde se envía el formulario; en nuestro caso, es /login. Luego están los parámetros del formulario, que representan los datos enviados en la solicitud POST. Descubriste que los campos eran username y password. Hydra utiliza marcadores de posición especiales ^USER^ y ^PASS^ para inyectar las palabras de tus listas, por lo que la cadena de parámetros se convierte en username=^USER^&password=^PASS^. Finalmente, la cadena de error es el texto que aparece en la página cuando falla un inicio de sesión, que identificaste como Invalid credentials.

Combinando estas tres partes con dos puntos, la cadena de configuración del módulo queda así: "/login:username=^USER^&password=^PASS^:Invalid credentials"

Antes de ejecutar el ataque real, puedes explorar la documentación de ayuda integrada de Hydra para el módulo http-post-form y comprender mejor sus capacidades. Ejecuta el siguiente comando para ver la ayuda específica del módulo:

hydra -U http-post-form

Este comando muestra instrucciones detalladas y ejemplos sobre cómo formatear la cadena del módulo, lo cual es una excelente referencia cuando te encuentres con formularios de inicio de sesión más complejos en el futuro.

Ejecutar el ataque de fuerza bruta

En este paso, combinarás todo lo que has aprendido para ejecutar el ataque de diccionario automatizado contra el servidor web local.

Utilizarás el comando hydra con varios flags:

  • -L users.txt: Especifica el archivo que contiene la lista de nombres de usuario.
  • -P passwords.txt: Especifica el archivo que contiene la lista de contraseñas.
  • -s 8080: Especifica el puerto de destino.
  • 127.0.0.1: La dirección IP del servidor objetivo.
  • http-post-form: El módulo de protocolo a utilizar.
  • "/login:username=^USER^&password=^PASS^:Invalid credentials": La cadena de configuración del módulo que construiste en el paso anterior.

Ejecuta el siguiente comando en tu terminal para iniciar el ataque de fuerza bruta:

hydra -L users.txt -P passwords.txt -s 8080 127.0.0.1 http-post-form "/login:username=^USER^&password=^PASS^:Invalid credentials"

Hydra comenzará a probar cada combinación de nombres de usuario y contraseñas de tus listas. Debido a que las listas son pequeñas y el servidor es local, el ataque finalizará muy rápidamente.

Deberías ver una salida similar a la siguiente:

Hydra v9.2 (c) 2021 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2026-10-25 10:00:00
[DATA] max 12 tasks per 1 server, overall 12 tasks, 12 login tries (l:3/p:4), ~1 tries per task
[DATA] attacking http-post-form://127.0.0.1:8080/login:username=^USER^&password=^PASS^:Invalid credentials
[8080][http-post-form] host: 127.0.0.1   login: admin   password: secret123
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2026-10-25 10:00:01

Observa la línea resaltada (o que indica explícitamente el éxito): [8080][http-post-form] host: 127.0.0.1 login: admin password: secret123. Hydra identificó con éxito que la combinación del nombre de usuario admin y la contraseña secret123 no devolvió la cadena "Invalid credentials", lo que significa que el inicio de sesión fue exitoso.

Resumen

En este laboratorio, aprendiste con éxito cómo analizar y atacar un sistema de autenticación web débil. Comenzaste inspeccionando un formulario de inicio de sesión HTTP POST para identificar la ruta de destino, los parámetros de entrada y los mensajes de error. Luego, creaste listas de palabras personalizadas para un ataque de diccionario. Finalmente, configuraste y ejecutaste la herramienta de fuerza bruta Hydra para automatizar los intentos de inicio de sesión y recuperar con éxito las credenciales válidas.

Comprender estas técnicas resalta la importancia de implementar medidas de seguridad sólidas, como bloqueos de cuenta, CAPTCHAs y autenticación multifactor (MFA), para proteger las aplicaciones web contra ataques automatizados de fuerza bruta.