Shikata Ga Nai

Private? There is no such things.

LAB: WebSocketメッセージを操作してXSS脆弱性を突く

Hello there, ('ω')ノ

🔍 脆弱性の概要

このラボでは、チャット機能に使用されているWebSocket通信が適切にサニタイズされていないため、クライアント側でHTMLタグがそのままサーバに送信できてしまい、XSS攻撃が可能になります。

攻撃者が悪意のあるJavaScriptを含むメッセージをWebSocket経由で送信すると、その内容が他のユーザー(ここではサポートエージェント)のブラウザにそのまま表示され、JavaScriptが実行されます。


✅ 攻略手順

  1. 「Live chat」をクリックして適当なメッセージを送信

    • Burpの「WebSockets」タブで通信を確認。
    • <などの特殊文字がHTMLエンコードされていないか確認。
  2. Burp ProxyでWebSocket通信のインターセプトを有効にする

    • 「Proxy」>「Options」>「Intercept WebSockets messages」にチェック。
  3. もう一度チャットメッセージを送信

    • インターセプトされたメッセージをBurpで次のように書き換える:
   {"message":"<img src=1 onerror='alert(1)'>"}
  1. メッセージを転送(Forward)してサーバに送信

    • 自分のブラウザに alert(1) が表示されれば成功。
    • サポートエージェントのブラウザでも同様にアラートが表示され、ラボクリアとなる。

💡 攻略のポイント

  • WebSocket通信は通常のHTTPと違い、リアルタイム双方向である点に注意。
  • クライアントでHTMLエンコードされていても、Burpで直接生データを編集すれば回避可能。
  • 「message」などのJSONキーはそのままに、値の部分を悪意あるHTMLに変更する。

🧠 応用のヒント

  • 他の要素(<svg>, <iframe>)やイベント(onload, onclick)を使えば、ユーザー操作不要のXSSも可能。
  • チャット機能のようなユーザー間共有の機能では、常にXSSのリスクを考慮する必要があります。

Best regards, (^^ゞ