Explorar opciones específicas del módulo 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 las opciones de HTTP POST disponibles en Hydra, centrándonos en cómo apuntar de manera efectiva a servicios que utilizan HTTP POST para la autenticación. Aprenderemos cómo especificar nombres de usuario y contraseñas, así como la URL a la que se debe enviar la solicitud POST.

Este laboratorio lo guiará a través de la revisión de las opciones de HTTP POST con la bandera -U, la configuración de un formulario HTTP POST, la ejecución de Hydra con opciones -m específicas y la validación del ataque POST. Aprenderá cómo usar Hydra para forzar la entrada de credenciales de inicio de sesión cuando apunte a servicios que utilizan HTTP POST para la autenticación.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hydra(("Hydra")) -.-> hydra/HydraGroup(["Hydra"]) hydra/HydraGroup -.-> hydra/single_username("Single Username Attack") hydra/HydraGroup -.-> hydra/target_ip("Target IP Specification") hydra/HydraGroup -.-> hydra/http_form("HTTP Form Attack") hydra/HydraGroup -.-> hydra/success_detection("Login Success Detection") subgraph Lab Skills hydra/single_username -.-> lab-550767{{"Explorar opciones específicas del módulo de Hydra"}} hydra/target_ip -.-> lab-550767{{"Explorar opciones específicas del módulo de Hydra"}} hydra/http_form -.-> lab-550767{{"Explorar opciones específicas del módulo de Hydra"}} hydra/success_detection -.-> lab-550767{{"Explorar opciones específicas del módulo de Hydra"}} end

Revisar opciones de HTTP POST con -U

En este paso, exploraremos las opciones de HTTP POST disponibles en Hydra utilizando la bandera -U. La bandera -U se utiliza para especificar un nombre de usuario al realizar una solicitud POST. Esto es especialmente útil cuando el servicio objetivo requiere que se envíe un nombre de usuario como parte de los datos POST.

Antes de sumergirnos en el ejemplo práctico, entendamos el concepto básico de las solicitudes HTTP POST. HTTP POST es un método utilizado para enviar datos a un servidor para crear o actualizar un recurso. A diferencia de las solicitudes GET, las solicitudes POST llevan los datos en el cuerpo de la solicitud, lo que las hace adecuadas para enviar cantidades mayores de datos, como envíos de formularios.

Hydra es una herramienta poderosa para forzar la entrada de credenciales de inicio de sesión. Cuando se apunta a servicios que utilizan HTTP POST para la autenticación, necesitamos proporcionar a Hydra la información necesaria, incluyendo los campos de nombre de usuario y contraseña, así como la URL a la que se debe enviar la solicitud POST.

La opción -U en Hydra te permite especificar un solo nombre de usuario para utilizar en todos los intentos de inicio de sesión. Esto es útil cuando ya conoces el nombre de usuario y solo necesitas forzar la entrada de la contraseña.

Veamos cómo usar la opción -U con un ejemplo sencillo. Supongamos que queremos atacar una aplicación web que utiliza HTTP POST para el inicio de sesión, y sabemos que el nombre de usuario es testuser. Podemos usar el siguiente comando de Hydra:

hydra -l testuser -P ~/project/password.txt "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password" < target_ip > http-post-form

En este comando:

  • hydra: El comando para invocar Hydra.
  • -l testuser: Especifica el nombre de usuario como testuser. Ten en cuenta que aquí estamos usando -l en lugar de -U. -l especifica un solo nombre de usuario, mientras que -U especifica un archivo que contiene una lista de nombres de usuario.
  • -P ~/project/password.txt: Especifica la ruta al archivo de lista de contraseñas. Asegúrate de tener un archivo password.txt en tu directorio ~/project. Puedes crear uno usando nano:
nano ~/project/password.txt

Agrega algunas contraseñas comunes al archivo, una contraseña por línea, por ejemplo:

password
123456
qwerty

Guarda el archivo y sal de nano.

  • <target_ip>: Reemplaza esto con la dirección IP del servidor objetivo. Para este laboratorio, necesitarás reemplazar esto con la dirección IP real del servidor que estás atacando. Asumiremos que la dirección IP objetivo es 127.0.0.1 con fines de demostración.
  • http-post-form: Especifica que estamos utilizando el módulo de formulario HTTP POST.
  • "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password": Esta es la parte más importante. Le dice a Hydra cómo construir la solicitud POST.
    • /login.php: La URL a la que se debe enviar la solicitud POST.
    • username=^USER^&password=^PASS^: Los datos POST. ^USER^ y ^PASS^ son marcadores de posición que Hydra reemplazará con el nombre de usuario y la contraseña, respectivamente.
    • F=Invalid username or password: Esto le dice a Hydra qué cadena buscar en la respuesta para determinar si el intento de inicio de sesión falló. Si Hydra encuentra esta cadena, sabe que el intento de inicio de sesión no fue exitoso.

Ahora, ejecutemos el comando con la dirección IP de ejemplo:

hydra -l testuser -P ~/project/password.txt 127.0.0.1 http-post-form "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password"

Este comando intentará forzar la entrada de la contraseña para la cuenta testuser utilizando las contraseñas en el archivo password.txt. Hydra enviará solicitudes HTTP POST a la URL /login.php con los campos de nombre de usuario y contraseña configurados en consecuencia. Si Hydra encuentra una contraseña válida, la mostrará en la pantalla.

Este ejemplo demuestra el uso básico de la opción -l con el módulo http-post-form. En los siguientes pasos, exploraremos opciones y técnicas más avanzadas para atacar formularios HTTP POST con Hydra.

Configurar un formulario HTTP POST

En este paso, configuraremos un formulario HTTP POST sencillo que podamos utilizar como objetivo para nuestros ataques con Hydra. Crearemos un formulario HTML básico y un script PHP para manejar el envío del formulario. Esto nos permitirá entender cómo Hydra interactúa con los formularios HTTP POST y cómo elaborar el comando correcto de Hydra.

Primero, creemos el formulario HTML. Crearemos un archivo llamado login.html en el directorio ~/project.

nano ~/project/login.html

Ahora, pega el siguiente código HTML en el archivo:

<!DOCTYPE html>
<html>
  <head>
    <title>Login Form</title>
  </head>
  <body>
    <h1>Login</h1>
    <form method="post" action="login.php">
      <label for="username">Username:</label><br />
      <input type="text" id="username" name="username" /><br /><br />
      <label for="password">Password:</label><br />
      <input type="password" id="password" name="password" /><br /><br />
      <input type="submit" value="Login" />
    </form>
  </body>
</html>

Este código HTML crea un formulario de inicio de sesión sencillo con dos campos de entrada: username y password. El formulario utiliza el método POST y envía los datos a login.php.

Guarda el archivo y sal de nano.

A continuación, necesitamos crear el script login.php para manejar el envío del formulario. Crea un archivo llamado login.php en el directorio ~/project:

nano ~/project/login.php

Ahora, pega el siguiente código PHP en el archivo:

<?php
$username = $_POST['username'];
$password = $_POST['password'];

if ($username == 'testuser' && $password == 'password') {
  echo "Login successful!";
} else {
  echo "Invalid username or password";
}
?>

Este script PHP recupera el nombre de usuario y la contraseña de los datos POST y verifica si coinciden con los valores codificados de forma rígida testuser y password. Si las credenciales son correctas, imprime "Login successful!"; de lo contrario, imprime "Invalid username or password".

Guarda el archivo y sal de nano.

Ahora, tienes un formulario HTTP POST básico configurado. Para probarlo, normalmente necesitarías un servidor web (como Apache o Nginx) en ejecución y sirviendo estos archivos. Dado que nos estamos enfocando en Hydra y el entorno LabEx no incluye un servidor web preconfigurado, procederemos asumiendo que tienes una forma de acceder a estos archivos a través de un servidor web. Por ejemplo, si estuvieras ejecutando un servidor web localmente y sirviendo el directorio ~/project, podrías acceder al formulario navegando a http://localhost/login.html en tu navegador web.

En el siguiente paso, usaremos Hydra para atacar este formulario. Usaremos la opción -m para especificar los datos POST y la opción -F para identificar el mensaje de error.

Ejecutar con la opción -m

En este paso, utilizaremos la opción -m en Hydra para especificar directamente los datos de la solicitud HTTP POST. Esta es una alternativa al uso del módulo http-post-form y nos da más control sobre la estructura de la solicitud POST.

La opción -m te permite definir todo el cuerpo de la solicitud POST. Debes especificar los marcadores de posición para el nombre de usuario y la contraseña (^USER^ y ^PASS^) dentro de los datos POST.

Utilicemos el formulario login.php que creamos en el paso anterior como nuestro objetivo. Usaremos la opción -m para especificar los datos POST como username=^USER^&password=^PASS^. También usaremos la opción -l para especificar un solo nombre de usuario (testuser) y la opción -P para especificar el archivo de lista de contraseñas (~/project/password.txt).

Este es el comando de Hydra que usaremos:

hydra -l testuser -P ~/project/password.txt "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password" < target_ip > http-post

En este comando:

  • hydra: El comando para invocar Hydra.
  • -l testuser: Especifica el nombre de usuario como testuser.
  • -P ~/project/password.txt: Especifica la ruta al archivo de lista de contraseñas.
  • <target_ip>: Reemplaza esto con la dirección IP del servidor objetivo. Como antes, asumiremos que la dirección IP objetivo es 127.0.0.1 con fines de demostración.
  • http-post: Especifica que estamos utilizando el módulo HTTP POST.
  • "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password": Esto especifica la URL, los datos POST y la cadena de error.
    • /login.php: La URL a la que se debe enviar la solicitud POST.
    • username=^USER^&password=^PASS^: Los datos POST. ^USER^ y ^PASS^ son marcadores de posición que Hydra reemplazará con el nombre de usuario y la contraseña, respectivamente.
    • F=Invalid username or password: Esto le dice a Hydra qué cadena buscar en la respuesta para determinar si el intento de inicio de sesión falló.

Ahora, ejecutemos el comando con la dirección IP de ejemplo:

hydra -l testuser -P ~/project/password.txt 127.0.0.1 http-post "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password"

Este comando intentará forzar la entrada de la contraseña para la cuenta testuser utilizando las contraseñas en el archivo password.txt. Hydra enviará solicitudes HTTP POST a la URL /login.php con los datos POST especificados. Si Hydra encuentra una contraseña válida, la mostrará en la pantalla.

La principal diferencia entre este comando y el del Paso 1 es el uso de http-post en lugar de http-post-form. El módulo http-post requiere que especifiques toda la cadena de datos POST utilizando la opción -m (que está incrustada en la cadena de la URL aquí), mientras que http-post-form construye automáticamente los datos POST en función de los campos del formulario.

Este ejemplo demuestra cómo usar la opción -m para especificar directamente los datos POST. En el siguiente paso, validaremos el ataque POST y veremos cómo capturar el inicio de sesión exitoso.

Validar el ataque POST

En este paso, validaremos el ataque POST asegurándonos de que Hydra identifique correctamente la contraseña. Para hacer esto de manera efectiva, modificaremos nuestro archivo password.txt para incluir la contraseña correcta, lo que garantizará que Hydra la encuentre. También analizaremos la salida para confirmar el inicio de sesión exitoso.

Primero, modifiquemos el archivo ~/project/password.txt para incluir la contraseña correcta, que es password según nuestro script login.php.

nano ~/project/password.txt

Agregue la contraseña password al archivo. Es una buena práctica colocarla cerca del principio para obtener resultados más rápidos. El archivo ahora debería verse algo así:

password
123456
qwerty

Guarde el archivo y salga de nano.

Ahora, ejecute nuevamente el comando de Hydra, utilizando el mismo comando que en el paso anterior:

hydra -l testuser -P ~/project/password.txt 127.0.0.1 http-post "/login.php:username=^USER^&password=^PASS^:F=Invalid username or password"

Esta vez, Hydra debería encontrar rápidamente la contraseña correcta y mostrarla en la salida. La salida debería verse similar a esto:

Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!

Hydra starting at 2024-10-27 14:30:00
[DATA] 1 task, 1 server, 13 login tries (l:1/p:13), ~1 try per task
[DATA] attacking service http-post on 127.0.0.1
[2;32][http-post] host: 127.0.0.1   login: testuser   password: password
Hydra is finishing at 2024-10-27 14:30:05

La línea [http-post] host: 127.0.0.1 login: testuser password: password indica que Hydra encontró con éxito la contraseña password para el nombre de usuario testuser.

Si no ve esta salida, verifique lo siguiente:

  • Asegúrese de que el archivo password.txt contenga la contraseña correcta (password).
  • Asegúrese de que el script login.php esté configurado correctamente para verificar el nombre de usuario testuser y la contraseña password.
  • Asegúrese de que el comando de Hydra esté correctamente formateado, especialmente la URL, los datos POST y la cadena de error.

Al ejecutar con éxito el comando de Hydra y observar la salida, ha validado el ataque POST y confirmado que Hydra puede forzar con éxito las credenciales de inicio de sesión en un formulario HTTP POST.

Esto completa el laboratorio sobre el ataque a formularios HTTP POST con Hydra. Ha aprendido cómo configurar un formulario HTTP POST sencillo, cómo usar la opción -m para especificar los datos POST y cómo validar el ataque asegurándose de que Hydra encuentre la contraseña correcta.

Resumen

En este laboratorio, exploramos las opciones de HTTP POST en Hydra, centrándonos en cómo forzar las credenciales de inicio de sesión cuando una aplicación web utiliza HTTP POST para la autenticación. Aprendimos sobre la opción -l para especificar un solo nombre de usuario para todos los intentos de inicio de sesión, y cómo proporcionar a Hydra la información necesaria, incluyendo los campos de nombre de usuario y contraseña, así como la URL a la que se debe enviar la solicitud POST.

También revisamos el concepto básico de las solicitudes HTTP POST, entendiendo que las solicitudes POST transportan datos en el cuerpo de la solicitud, lo que las hace adecuadas para enviar cantidades mayores de datos, como envíos de formularios. El laboratorio enfatizó la importancia de proporcionar los parámetros correctos a Hydra para un forzado exitoso, incluyendo la URL objetivo, el campo de nombre de usuario, el campo de contraseña y un mensaje de error para identificar los intentos de inicio de sesión fallidos.