Skip to content

1. Manipulating Websockets

🔧 Manipulation von WebSocket Traffic (mit Burp Suite)

Ziel: Schwachstellen finden, indem man WebSocket-Verkehr so verändert, wie es die Anwendung nicht erwartet.

1. Abfangen & Modifizieren von Nachrichten

  • In Burp Proxy aktivieren.
  • Anwendung im Burp-Browser öffnen → im Tab WebSockets history sieht man die Nachrichten.
  • Nachrichten können im Intercept-Tab abgefangen, verändert und dann mit Forward weitergeleitet werden.
  • Man kann einstellen, ob Client → Server oder Server → Client Nachrichten abgefangen werden.

2. Nachrichten wiederholen & neu erzeugen

  • Mit Send to Repeater einzelne Nachrichten in den Repeater schicken.
  • Dort kann man:
    • Nachrichten beliebig ändern und erneut senden.
    • Neue Nachrichten erstellen (in beide Richtungen).
    • Den Verlauf aller Nachrichten einsehen und beliebige erneut bearbeiten und senden.

3. Manipulation der WebSocket-Verbindung (Handshake)

  • Manchmal muss der Handshake selbst manipuliert werden (z. B. um mehr Angriffsfläche zu erreichen, neue Tokens zu verwenden oder eine getrennte Verbindung neu aufzubauen).
  • Im Burp Repeater:
    • Auf das Stift-Symbol neben der WebSocket-URL klicken → Wizard öffnet sich.
    • Möglichkeiten: bestehende Verbindung anhängen, klonen oder eine getrennte neu aufbauen.
    • Handshake-Details können bearbeitet werden, bevor die Verbindung ausgeführt wird.
    • Bei Erfolg kann man über die neue Verbindung weitere Nachrichten senden.

🖥️🧪Lab: Manipulating WebSocket messages to exploit vulnerabilities

To solve the lab, use a WebSocket message to trigger an alert() popup in the support agent's browser.

  1. Live-Chat starten
  2. Nachricht schicken und im intercept schauen wie die verarbeitet werden
    • Client schickt: <img src=1 onerror='alert(1)'>
    • Client to Server:
      {"message":"&lt;img src=1 onerror=&#39;alert(1)&#39;&gt;&#x0a;"}
      
    • Server to Client
      {"user":"You",
      "content":"<img src=1 onerror='alert(1)'>"}
      

Daran sehen wir der Client wandelt das Image in einen String um. Daher intercepten wir die Anfrage Client To Server und ändern den Inhalt. Nachdem die Anfrage intercepted und geändert wurde lädt das Image