En este laboratorio, exploraremos las opciones HTTP POST disponibles en Hydra, centrándonos en cómo atacar eficazmente servicios que utilizan HTTP POST para la autenticación. Aprenderemos a especificar nombres de usuario y contraseñas, así como la URL a la que se debe enviar la solicitud POST.
Este laboratorio le guiará a través de la revisión de las opciones HTTP POST, la configuración de un formulario HTTP POST, la ejecución de Hydra con opciones específicas y la validación del ataque POST. Aprenderá a usar Hydra para realizar un ataque de fuerza bruta (brute-force) a las credenciales de inicio de sesión cuando se dirija a servicios que utilizan HTTP POST para la autenticación.
Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel intermedio con una tasa de finalización del 64%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.
Revisar las Opciones HTTP POST
En este paso, exploraremos las opciones HTTP POST disponibles en Hydra. Hydra es una herramienta poderosa para realizar ataques de fuerza bruta (brute-force) a las credenciales de inicio de sesión, y es compatible con varios protocolos, incluido HTTP POST. Al atacar aplicaciones web que utilizan HTTP POST para la autenticación, necesitamos proporcionar a Hydra información específica sobre el formulario de inicio de sesión.
La sintaxis básica para usar Hydra con HTTP POST es la siguiente:
-l <username>: Especifica un único nombre de usuario para usar en el ataque. Si tiene una lista de nombres de usuario, puede usar la opción -L <username_list> en su lugar.
-P <password_list>: Especifica la ruta a un archivo que contiene una lista de contraseñas para probar.
<target_ip>: La dirección IP del servidor objetivo.
http-post-form: Especifica que estamos utilizando el módulo de formulario HTTP POST. Este módulo está diseñado para atacar formularios web que utilizan el método POST.
"<url>:<post_data>:<failure_string>": Esta es una parte crucial que le dice a Hydra cómo interactuar con el formulario de inicio de sesión.
<url>: La ruta al script o página de inicio de sesión que maneja la solicitud POST (por ejemplo, /login.php).
<post_data>: Los datos que se enviarán en el cuerpo de la solicitud POST. Esto típicamente incluye los nombres de los campos de nombre de usuario y contraseña del formulario HTML, junto con marcadores de posición (placeholders) para el nombre de usuario y la contraseña que Hydra rellenará. Los marcadores de posición suelen ser ^USER^ para el nombre de usuario y ^PASS^ para la contraseña (por ejemplo, username=^USER^&password=^PASS^).
<failure_string>: Una cadena que aparece en la respuesta de un intento de inicio de sesión fallido. Hydra usa esta cadena para determinar si un intento de inicio de sesión no tuvo éxito. Necesita identificar esta cadena intentando manualmente un inicio de sesión con credenciales incorrectas y observando la respuesta.
En los siguientes pasos, configuraremos un formulario HTTP POST simple y luego usaremos Hydra para atacarlo, aplicando estas opciones.
Configurar el Formulario HTTP POST
En este paso, configuraremos un formulario HTTP POST simple que podemos usar como objetivo para nuestros ataques con Hydra. Ya hemos creado los archivos necesarios (login.html y login.php) en el directorio ~/project durante la fase de configuración.
Examinemos el contenido de estos archivos para comprender la estructura del formulario y cómo el script PHP maneja el intento de inicio de sesión.
Este código HTML define un formulario que utiliza el método POST y envía datos a login.php. Los campos de entrada se denominan username y password. Esto nos indica que los datos POST deben incluir username=<value> y password=<value>.
Este script PHP verifica si el username enviado es testuser y la password es password. Si coinciden, muestra "Login successful!". De lo contrario, muestra "Invalid username or password".
De este script, podemos identificar la cadena de fallo (failure string): "Invalid username or password". Esta es la cadena que Hydra buscará en la respuesta para determinar si un intento de inicio de sesión falló.
Ahora que entendemos la estructura del formulario y el mensaje de fallo, tenemos toda la información necesaria para crear el comando Hydra en el siguiente paso.
Verificar el Estado del Servicio Web
Antes de continuar con el siguiente paso, verifique que el servicio web PHP se esté ejecutando y sea accesible. Ejecute el siguiente comando en su terminal:
curl -s http://0.0.0.0:8080/login.php
Si ve el contenido de la página (como "Invalid username or password"), el servicio se está ejecutando correctamente.
Si no hay respuesta o obtiene un error de conexión, puede iniciar manualmente el servidor web integrado de PHP con:
Espere un momento y vuelva a intentar el comando curl.
Ejecutar Hydra con HTTP POST
Ahora que tenemos nuestro formulario HTTP POST objetivo configurado y entendemos su estructura, podemos usar Hydra para intentar realizar un ataque de fuerza bruta (brute-force) a las credenciales de inicio de sesión. Usaremos la información recopilada en el paso anterior para construir el comando Hydra.
Sabemos lo siguiente:
La URL objetivo es /login.php.
Los datos POST deben estar en el formato username=^USER^&password=^PASS^.
La cadena de fallo (failure string) es "Invalid username or password".
Usaremos el nombre de usuario testuser y la lista de contraseñas ~/project/password.txt.
La dirección IP objetivo es 0.0.0.0 (asumiendo que el servidor web se está ejecutando localmente).
Hydra ahora comenzará a intentar iniciar sesión en el formulario objetivo utilizando el nombre de usuario especificado y las contraseñas de la lista. Enviará solicitudes HTTP POST a http://0.0.0.0:8080/login.php con el nombre de usuario y cada contraseña en los datos POST. Si la respuesta no contiene la cadena de fallo "Invalid username or password", Hydra considerará que el intento de inicio de sesión fue exitoso e informará las credenciales.
La salida mostrará el progreso del ataque. Dado que la contraseña correcta (password) está incluida en nuestro archivo password.txt, Hydra debería encontrarla eventualmente.
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-22 09:55:07
[DATA] max 3 tasks per 1 server, overall 3 tasks, 3 login tries (l:1/p:3), ~1 try per task
[DATA] attacking http-post-form://0.0.0.0:8080/login.php:username=^USER^&password=^PASS^:F=Invalid username or password
[8080][http-post-form] host: 0.0.0.0 login: testuser password: password
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-22 09:55:08
La línea [http-post] host: 0.0.0.0 login: testuser password: password indica que Hydra encontró con éxito las credenciales correctas.
Validar el Ataque POST
En este paso, validaremos que Hydra identificó con éxito la contraseña correcta para la cuenta testuser de dos maneras:
Esta línea indica que Hydra encontró credenciales válidas: nombre de usuario testuser con contraseña password.
Segundo, verificando manualmente estas credenciales en la interfaz web:
Para acceder al formulario de inicio de sesión en el entorno de LabEx:
Haga clic en la pestaña "Web 8080" en la barra de menú superior.
En la barra de direcciones, agregue /login.html al final de la URL actual.
Ingrese las credenciales que Hydra descubrió:
Nombre de usuario: testuser
Contraseña: password
Haga clic en el botón "Login".
Si ve "Login successful!" después de enviar el formulario, esto confirma que las credenciales encontradas por Hydra son, de hecho, correctas.
Si no ve el mensaje de éxito, revise los pasos anteriores para asegurarse de que:
El archivo password.txt en ~/project contiene la contraseña password.
El archivo login.php en ~/project verifica correctamente el nombre de usuario testuser y la contraseña password y devuelve los mensajes apropiados.
El servidor web todavía se está ejecutando (puede reiniciarlo con php -S 0.0.0.0:8080 -t /home/labex/project si es necesario).
Al completar con éxito este paso y verificar las credenciales tanto a través de la salida de Hydra como mediante pruebas manuales, ha demostrado su capacidad para usar Hydra para descubrir credenciales de inicio de sesión válidas y confirmar su autenticidad.
Resumen
En este laboratorio, exploramos cómo usar Hydra para atacar aplicaciones web que utilizan HTTP POST para la autenticación. Aprendimos sobre las opciones clave requeridas para el módulo http-post-form, incluyendo la especificación de la URL objetivo, el formato de los datos POST con marcadores de posición (placeholders) de nombre de usuario y contraseña (^USER^ y ^PASS^), e identificar una cadena de fallo (failure string) en la respuesta para detectar intentos de inicio de sesión fallidos.
Configuramos un formulario HTML simple y un script PHP para simular una página de inicio de sesión, lo que nos permitió comprender la estructura de la solicitud POST y la respuesta esperada. Al crear y ejecutar el comando Hydra apropiado, logramos realizar un ataque de fuerza bruta (brute-force) a las credenciales de inicio de sesión, demostrando el poder de Hydra en el ataque a formularios HTTP POST.
Ha aprendido a:
Comprender la sintaxis básica para usar Hydra con HTTP POST.
Identificar la información necesaria de un formulario web (URL, nombres de campos, mensaje de fallo).
Construir un comando Hydra para atacar un formulario HTTP POST.
Interpretar la salida de Hydra para validar un ataque de inicio de sesión exitoso.
Este laboratorio proporciona una comprensión fundamental del uso de Hydra para ataques HTTP POST, que es un escenario común en las pruebas de seguridad de aplicaciones web.