Hello there, ('ω')ノ
🎯 目的
このラボでは、WebSocketのハンドシェイク時にIPアドレスを偽装し、XSSフィルターを回避して、サポートエージェントのブラウザでalert()
ポップアップを表示させることが目的です。
🧪 攻略手順
1. ライブチャット機能の確認
- ブラウザで「Live chat」ボタンをクリックし、任意のメッセージを送信します。
- Burp Suiteの「Proxy」タブ内の「WebSockets」履歴で、送信されたメッセージを確認します。
2. XSSフィルターの挙動を確認
- 新たに
<
文字を含むメッセージを送信します。 - Burpで該当のWebSocketメッセージを確認し、
<
がHTMLエンコードされていることを確認します。
3. XSSペイロードの送信とブロックの確認
Burpの「Proxy」タブでWebSocketメッセージのインターセプトを有効にします。
以下のXSSペイロードを含むメッセージを送信します:
<img src=1 onerror='alert(1)'>
- メッセージがブロックされ、WebSocket接続が終了することを確認します。
4. IPアドレスの偽装による再接続
Burpの「WebSockets」タブで、該当のWebSocketメッセージを右クリックし、「Send to Repeater」を選択します。
Repeaterで鉛筆アイコンをクリックし、WebSocketの再接続設定を開きます。
ハンドシェイクリクエストに以下のヘッダーを追加します:
X-Forwarded-For: 1.1.1.1
- 「Connect」ボタンをクリックし、WebSocket接続が再確立されることを確認します。
5. オブフスケートされたXSSペイロードの送信
- 以下のように、イベントハンドラー名の大文字小文字を変更し、バッククォートを使用したペイロードを送信します:
<img src=1 oNeRrOr=alert`1`>
- サポートエージェントのブラウザで
alert()
ポップアップが表示されることを確認します。
🧠 ポイントとコツ
- IPアドレスの偽装:
X-Forwarded-For
ヘッダーを使用して、サーバーが信頼するIPアドレスを偽装することで、アクセス制限を回避できます。 - XSSフィルターの回避:イベントハンドラー名の大文字小文字の変更や、バッククォートを使用することで、単純なパターンマッチングに基づくフィルターを回避できます。
- WebSocketの再接続:Burp SuiteのRepeater機能を使用して、カスタムヘッダーを含むWebSocketの再接続を行うことができます。
✅ まとめ
このラボを通じて、WebSocketのハンドシェイク時におけるIPアドレスの偽装と、XSSフィルターの回避技術を学びました。これらの手法は、実際のセキュリティ診断やペネトレーションテストにおいても有効です。
Best regards, (^^ゞ