Hello there, ('ω')ノ
🔍 脆弱性の概要
このラボでは、チャット機能に使用されているWebSocket通信が適切にサニタイズされていないため、クライアント側でHTMLタグがそのままサーバに送信できてしまい、XSS攻撃が可能になります。
攻撃者が悪意のあるJavaScriptを含むメッセージをWebSocket経由で送信すると、その内容が他のユーザー(ここではサポートエージェント)のブラウザにそのまま表示され、JavaScriptが実行されます。
✅ 攻略手順
「Live chat」をクリックして適当なメッセージを送信
- Burpの「WebSockets」タブで通信を確認。
<
などの特殊文字がHTMLエンコードされていないか確認。
Burp ProxyでWebSocket通信のインターセプトを有効にする
- 「Proxy」>「Options」>「Intercept WebSockets messages」にチェック。
もう一度チャットメッセージを送信
- インターセプトされたメッセージをBurpで次のように書き換える:
{"message":"<img src=1 onerror='alert(1)'>"}
メッセージを転送(Forward)してサーバに送信
- 自分のブラウザに
alert(1)
が表示されれば成功。 - サポートエージェントのブラウザでも同様にアラートが表示され、ラボクリアとなる。
- 自分のブラウザに
💡 攻略のポイント
- WebSocket通信は通常のHTTPと違い、リアルタイム双方向である点に注意。
- クライアントでHTMLエンコードされていても、Burpで直接生データを編集すれば回避可能。
- 「message」などのJSONキーはそのままに、値の部分を悪意あるHTMLに変更する。
🧠 応用のヒント
- 他の要素(
<svg>
,<iframe>
)やイベント(onload
,onclick
)を使えば、ユーザー操作不要のXSSも可能。 - チャット機能のようなユーザー間共有の機能では、常にXSSのリスクを考慮する必要があります。
Best regards, (^^ゞ