Hello there, ('ω')ノ
🔄 WebSocketハンドシェイクとは?
WebSocket通信は、HTTPリクエストを使ったハンドシェイク(接続確立)から始まります。このハンドシェイクには、認証トークンやセッション情報など、WebSocket通信に必要な重要データが含まれます。
🛠️ Burpでハンドシェイクを操作する手順
WebSocket通信をReapeaterに送信
- ProxyタブやWebSocketタブから対象メッセージを右クリック →「Send to Repeater」
RepeaterでURL横の鉛筆アイコン(編集)をクリック
- 接続済みWebSocketへのアタッチ
- クローン作成(新たに同じ設定で接続)
- 接続が切れたWebSocketの再接続 のいずれかを選択。
ハンドシェイクリクエストを編集
Sec-WebSocket-Key
やCookie
、Authorization
ヘッダーなどが含まれます。- トークン更新や不正なユーザIDを仕込むことで脆弱性を探すことが可能。
Connectをクリックして再接続
- 成功すれば、Burp Repeater上で新しいWebSocketセッションが開始され、メッセージ送信が可能。
🧠 活用ポイントと診断のコツ
期限切れトークンの更新: 例えばJWTやセッショントークンがハンドシェイクで使用されている場合、手動で更新して再接続可能。
接続条件の変更テスト:
Origin
ヘッダーを改変して、クロスオリジン制限の回避を試す。偽装ユーザテスト:
Cookie
やカスタムヘッダーに他のユーザーのIDを含めて、不正アクセスが可能か確認。攻撃後の再接続: 特定の攻撃でWebSocket接続が切断される場合、ハンドシェイクを再送して診断を続行。
✅ まとめ
WebSocket通信では、単なるメッセージの操作だけでなく、接続確立フェーズそのものを制御できるかどうかが鍵になります。Burp Suiteを活用することで、ハンドシェイクの細部まで把握し、意図的に再接続を行ってより高度な診断が可能になります。
Best regards, (^^ゞ