En este laboratorio, aprenderá cómo realizar ataques de fuerza bruta en servicios HTTP utilizando Hydra, una herramienta versátil para descifrar contraseñas. Explorará la configuración de un servidor HTTP de Python con autenticación básica y probará su seguridad mediante ataques sistemáticos de credenciales.
El ejercicio abarca la creación de listas de palabras (wordlists), la configuración de los parámetros de Hydra y el análisis de los resultados del ataque para identificar las debilidades de autenticación. Esta sesión práctica demuestra técnicas esenciales para evaluar la seguridad de los servicios web contra intentos de fuerza bruta (brute-force attempts).
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 77%. Ha recibido una tasa de reseñas positivas del 97% por parte de los estudiantes.
Instalar un Servidor HTTP Local
En este paso, instalará un servidor HTTP local utilizando el módulo incorporado de Python. Este servidor simulará un servidor web real con autenticación básica, que utilizaremos como objetivo para nuestro ataque de fuerza bruta (brute-force attack) con Hydra más adelante. Comprender cómo funcionan los servidores web es fundamental antes de intentar probar su seguridad.
El módulo http.server de Python proporciona una forma rápida de crear un servidor web básico para fines de prueba. Si bien no es adecuado para producción, es perfecto para nuestro laboratorio, ya que demuestra los conceptos básicos del protocolo HTTP sin una configuración compleja. El servidor se ejecutará en el puerto 8000 de forma predeterminada.
Primero, navegue a su directorio de proyecto. Esto asegura que todos los archivos estén organizados en un solo lugar:
cd ~/project
Cree un directorio dedicado para sus archivos del servidor web. Mantener el contenido web separado ayuda a mantener la organización:
mkdir http_server
cd http_server
Cree una página de inicio simple. Este archivo HTML se servirá cuando alguien acceda a su servidor web:
echo "<h1>Welcome to LabEx HTTP Server</h1>" > index.html
Inicie el servidor HTTP de Python. El símbolo & lo ejecuta en segundo plano para que pueda seguir utilizando la terminal:
python3 -m http.server 8000 &
Presione Enter, si desea continuar usando la terminal.
Verifique que el servidor se esté ejecutando. El comando netstat muestra las conexiones de red activas y los puertos de escucha:
netstat -tulnp | grep 8000
Debería ver una salida que confirme que Python está escuchando en el puerto 8000:
Pruebe la funcionalidad del servidor. El comando curl recupera la página web para confirmar que todo funciona:
curl http://localhost:8000
Debería recibir el contenido HTML que creó, lo que demuestra que el servidor está operativo:
<h1>Welcome to LabEx HTTP Server</h1>
Con el servidor web básico en funcionamiento, estamos listos para implementar la autenticación en el siguiente paso. Esta base es crucial porque Hydra interactuará con este servidor exactamente como lo haría con cualquier servidor web real que utilice autenticación básica (basic authentication).
Configurar el Servidor HTTP con Autenticación Básica (Basic Auth)
En este paso, configurará la autenticación básica (basic authentication) para el servidor HTTP que instaló anteriormente. La autenticación básica es un método simple en el que el cliente envía un nombre de usuario y una contraseña con cada solicitud. Esto crea una capa de seguridad que luego probaremos intentando forzarla mediante fuerza bruta (brute-force) utilizando Hydra, lo que demuestra por qué las contraseñas débiles son peligrosas.
Primero, asegúrese de estar en el directorio correcto donde configuraremos nuestro servidor web protegido:
cd ~/project/http_server
Cree un archivo de contraseñas utilizando la utilidad htpasswd. Esta herramienta viene con el paquete apache2-utils (ya instalado en la VM de LabEx) y ayuda a administrar los archivos de contraseñas para la autenticación básica:
htpasswd -c .htpasswd admin
Cuando se le solicite, ingrese password123 como contraseña. Estamos utilizando intencionalmente una contraseña débil aquí para demostrar lo fácil que es descifrar contraseñas simples.
Ahora crearemos un script de Python para servir contenido HTTP con autenticación básica. Este script verificará las credenciales antes de permitir el acceso:
nano auth_server.py
Pegue el siguiente código de Python. Esto crea un servidor HTTP personalizado que:
Ahora debería ver el contenido HTML de su archivo index.html, lo que demuestra que la autenticación funciona correctamente.
El servidor ahora está debidamente protegido con autenticación básica y listo para nuestra demostración de ataque de fuerza bruta (brute-force attack) en los próximos pasos. Esta configuración imita escenarios del mundo real donde los servidores web utilizan autenticación básica, mostrando tanto cómo funciona como sus posibles vulnerabilidades.
Preparar Listas de Nombres de Usuario y Contraseñas
En este paso, creará listas de palabras (wordlists) que Hydra utilizará para probar posibles combinaciones de nombres de usuario y contraseñas contra la autenticación básica (basic authentication) HTTP. Estas listas forman la base de un ataque de diccionario (dictionary attack), donde sistemáticamente probamos credenciales comunes en lugar de adivinar al azar.
Primero, navegue a su directorio de proyecto. Esto asegura que todos sus archivos permanezcan organizados en un solo lugar:
cd ~/project
Cree un directorio dedicado para sus listas de palabras. Mantenerlas separadas facilita su administración:
mkdir wordlists
cd wordlists
Cree un archivo de lista de nombres de usuario utilizando nano, un editor de texto simple. Lo llenaremos con nombres de usuario administrativos comunes que se utilizan con frecuencia como valores predeterminados:
nano usernames.txt
Agregue estos nombres de usuario comunes (uno por línea):
admin
root
user
test
guest
administrator
Del mismo modo, cree un archivo de lista de contraseñas. Estas son contraseñas que se utilizan comúnmente o son fáciles de adivinar:
nano passwords.txt
Agregue estas contraseñas comunes (una por línea):
password123
password
123456
admin
letmein
qwerty
Verifique el contenido de sus archivos para asegurarse de que se crearon correctamente. El comando cat muestra el contenido del archivo en la terminal:
cat usernames.txt
cat passwords.txt
(Opcional) Genere contraseñas adicionales utilizando crunch, un generador de listas de palabras. Este comando crea hasta 100 combinaciones de números de 4 dígitos, lo cual es útil para probar contraseñas numéricas simples:
crunch 4 4 0123456789 | head -n 100 > numbers.txt
Combine sus listas de contraseñas en un solo archivo. Esto le da a Hydra más variaciones para probar durante el ataque:
Verifique la lista de contraseñas combinada. El comando head muestra solo las primeras 10 líneas, lo que le brinda una verificación rápida de que la combinación funcionó:
Estas listas de palabras contienen tanto las credenciales correctas (admin/password123) que configuramos anteriormente como muchas combinaciones incorrectas. Esta configuración simula de manera realista cómo un atacante intentaría forzar un inicio de sesión (brute-force a login) probando numerosas credenciales posibles. En el siguiente paso, utilizaremos Hydra para automatizar la prueba de estas combinaciones contra nuestro servidor HTTP.
Ejecutar Ataque Hydra en el Servicio HTTP
En este paso, utilizará Hydra para realizar un ataque de fuerza bruta (brute-force attack) contra el servicio de autenticación básica (basic authentication) HTTP que configuró anteriormente. Hydra es una poderosa herramienta para descifrar contraseñas que sistemáticamente prueba todas las combinaciones de nombre de usuario/contraseña de las listas de palabras (wordlists) para encontrar credenciales válidas. Esto demuestra por qué las contraseñas débiles son vulnerables a los ataques automatizados.
Primero, asegúrese de que su servidor HTTP todavía esté en funcionamiento. Este comando verifica si el proceso del servidor existe y lo reinicia si es necesario:
Navegue a su directorio de listas de palabras (wordlists) donde almacenó los archivos de nombre de usuario y contraseña. Estos archivos contienen las combinaciones que Hydra probará:
cd ~/project/wordlists
Ejecute Hydra con este comando para atacar el servicio HTTP. El indicador -L especifica la lista de nombres de usuario, -P la lista de contraseñas y http-get / indica que estamos atacando una solicitud HTTP GET básica:
Verifique el archivo de resultados guardado para ver las credenciales exitosas:
cat hydra_results.txt
El ataque debería encontrar con éxito las credenciales (admin/password123) que configuramos anteriormente. Esto muestra cuán rápido se pueden descubrir las credenciales débiles a través de ataques automatizados de fuerza bruta (automated brute-force attacks), lo que enfatiza la importancia de las contraseñas seguras.
Resumen
En este laboratorio, ha aprendido cómo configurar un servidor HTTP local con Python e implementar la autenticación básica (basic authentication) con fines de pruebas de seguridad. El proceso incluyó la creación de directorios web, la configuración de la autenticación con htpasswd y la verificación de la funcionalidad del servidor utilizando herramientas comunes como curl.
Además, obtuvo experiencia práctica en la preparación de listas de credenciales (credential lists) y la ejecución de ataques de fuerza bruta (brute-force attacks) contra servicios HTTP utilizando Hydra. Este ejercicio demostró la importancia de las contraseñas seguras y las vulnerabilidades de los mecanismos de autenticación básica (basic authentication) cuando se utilizan credenciales débiles.