Shikata Ga Nai

Private? There is no such things.

LAB: WebSocketハンドシェイクの改ざんによる脆弱性の悪用

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, (^^ゞ