Shikata Ga Nai

Private? There is no such things.

WebSocket接続の操作による診断技法

Hello there, ('ω')ノ

🔄 WebSocketハンドシェイクとは?

WebSocket通信は、HTTPリクエストを使ったハンドシェイク(接続確立)から始まります。このハンドシェイクには、認証トークンやセッション情報など、WebSocket通信に必要な重要データが含まれます。


🛠️ Burpでハンドシェイクを操作する手順

  1. WebSocket通信をReapeaterに送信

    • ProxyタブやWebSocketタブから対象メッセージを右クリック →「Send to Repeater」
  2. RepeaterでURL横の鉛筆アイコン(編集)をクリック

    • 接続済みWebSocketへのアタッチ
    • クローン作成(新たに同じ設定で接続)
    • 接続が切れたWebSocketの再接続 のいずれかを選択。
  3. ハンドシェイクリクエストを編集

    • Sec-WebSocket-KeyCookieAuthorization ヘッダーなどが含まれます。
    • トークン更新や不正なユーザIDを仕込むことで脆弱性を探すことが可能。
  4. Connectをクリックして再接続

    • 成功すれば、Burp Repeater上で新しいWebSocketセッションが開始され、メッセージ送信が可能。

🧠 活用ポイントと診断のコツ

  • 期限切れトークンの更新: 例えばJWTやセッショントークンがハンドシェイクで使用されている場合、手動で更新して再接続可能。

  • 接続条件の変更テスト: Origin ヘッダーを改変して、クロスオリジン制限の回避を試す。

  • 偽装ユーザテスト: Cookieやカスタムヘッダーに他のユーザーのIDを含めて、不正アクセスが可能か確認。

  • 攻撃後の再接続: 特定の攻撃でWebSocket接続が切断される場合、ハンドシェイクを再送して診断を続行。


✅ まとめ

WebSocket通信では、単なるメッセージの操作だけでなく、接続確立フェーズそのものを制御できるかどうかが鍵になります。Burp Suiteを活用することで、ハンドシェイクの細部まで把握し、意図的に再接続を行ってより高度な診断が可能になります。

Best regards, (^^ゞ