Shikata Ga Nai

Private? There is no such things.

WebSocket接続そのものを操作する理由と方法:ハンドシェイク改変の重要性

Hello there, ('ω')ノ

✅ WebSocket「接続」の操作とは?

通常のセキュリティ診断では、WebSocketのメッセージ(データ)を中心に改変しますが、

そもそも接続時のリクエスト(ハンドシェイク)を操作することで、より深い攻撃や調査が可能になるケースもあります。


🧠 なぜWebSocket接続(ハンドシェイク)を操作するのか?

シナリオ 説明
攻撃範囲の拡大 通常では接続できないWebSocketエンドポイントにアクセスできるようになる
接続再構築 一部の攻撃では接続が切れるため、再接続が必要
トークンの更新 認証用トークン(JWTなど)が期限切れになると再接続が必要

🌐 WebSocketの接続の仕組み(ハンドシェイク)

WebSocket接続は、次のようなHTTPリクエストから始まります:

GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Version: 13
Cookie: session=abc123; token=xyz456

この「ハンドシェイクリクエスト」を改変することで、以下が可能になります:

  • Cookieの差し替え
  • トークンの偽装
  • ヘッダーの追加・削除
  • パスやクエリの改変

🛠 Burpでの操作方法(ハンドシェイクの改変)

  1. WebSocket接続が始まるタイミングを確認

    • Burpの「Proxy」 > 「HTTP history」から、Upgrade: websocket を含むリクエストを探す
  2. このリクエストを「Repeater」へ送信

    • 右クリック > Send to Repeater
  3. ヘッダーやクエリパラメータを自由に編集

    • 例:token= を別の値に変更
  4. 新たな接続を作成するために「Send」

    • その後、該当するWebSocketメッセージを送る

🔍 応用テクニック

技術 説明
クライアント切替 トークンを変更して別ユーザーとして再接続
機能偽装 通常は非表示の機能にアクセスできるURLで接続を試す
中間者攻撃の再現 不正なヘッダーで接続を再構築し、別のサーバーを経由させるテストなど

✅ まとめ

WebSocketの「接続」部分を操作できると、より高度な診断や特殊な脆弱性検証が可能になります。

改変対象 影響
Cookie / トークン ユーザーの切り替え・期限切れ対策
URL / クエリ 攻撃対象エンドポイントの変更
カスタムヘッダー バックエンド動作の偽装やバイパス

Best regards, (^^ゞ