Translated ['src/pentesting-web/xss-cross-site-scripting/dom-invader.md'

This commit is contained in:
Translator 2025-08-05 00:33:49 +00:00
parent 033f062df4
commit 8af2d3688d

View File

@ -4,80 +4,127 @@
## DOM Invader
DOM Invaderは、Burpの内蔵ブラウザにインストールされたブラウザツールです。これは、ウェブメッセージやプロトタイプ汚染を含むさまざまなソースとシンクを使用して、**DOM XSS脆弱性を検出する**のを支援します。このツールは拡張機能として事前にインストールされています。
DOM Invaderは、**Burp Suiteの組み込みChromiumブラウザ**にインストールされたブラウザツールです。これは、**DOM XSSやその他のクライアントサイドの脆弱性**プロトタイプ汚染、DOMクラッブリングなどを自動的に**JavaScriptソースとシンクを計測**することで検出するのを助けます。この拡張機能はBurpに同梱されており、有効にするだけで使用できます。
DOM Invaderは、ブラウザのDevToolsパネル内にタブを統合し、以下を可能にします:
DOM Invaderは、ブラウザのDevToolsパネルにタブを追加し、次のことができます:
1. **DOM XSSテストのためのウェブページ上の制御可能なシンクの特定**、コンテキストとサニタイズの詳細を提供します。
2. **`postMessage()`メソッドを介して送信されたウェブメッセージのログ記録、編集、および再送信**。DOM Invaderは、特別に作成されたウェブメッセージを使用して脆弱性を自動検出することもできます。
3. **クライアントサイドのプロトタイプ汚染**ソースの検出と、リスクのあるシンクに送信される制御可能なガジェットのスキャン。
4. **DOMクラッバーリング脆弱性の特定**
1. **制御可能なシンク**をリアルタイムで特定し、コンテキスト属性、HTML、URL、JSや適用されたサニタイズを含めます。
2. **`postMessage()`ウェブメッセージをログ、編集、再送信**するか、拡張機能に自動的に変異させることを許可します。
3. **クライアントサイドのプロトタイプ汚染ソースを検出し、ガジェット→シンクチェーンをスキャン**し、即座にPoCを生成します。
4. **DOMクラッブリングベクトルを見つける**(例:グローバル変数を上書きする`id` / `name`の衝突)。
5. **豊富な設定UIを介して動作を微調整**します(カスタムカナリア、自動注入、リダイレクトブロック、ソース/シンクリストなど)。
### 有効にする
---
Burpの内蔵ブラウザで**Burp拡張機能**に移動し、有効にします:
### 1. 有効にする
<figure><img src="../../images/image (1129).png" alt=""><figcaption></figcaption></figure>
ページを更新し、**Dev Tools**で**DOM Invaderタブ**を見つけます:
1. **Proxy ➜ Intercept ➜ Open Browser**Burpの埋め込みブラウザを開きます。
2. **Burp Suite**のロゴをクリックします(右上)。隠れている場合は、最初にジグソーピースをクリックします。
3. **DOM Invader**タブで、**Enable DOM Invader**をONに切り替え、**Reload**を押します。
4. DevToolsを開き`F12` / 右クリック ➜ 検査)、ドックします。新しい**DOM Invader**パネルが表示されます。
<figure><img src="../../images/image (695).png" alt=""><figcaption></figcaption></figure>
> Burpはプロファイルごとに状態を記憶します。必要に応じて、*Settings ➜ Tools ➜ Burps browser ➜ Store settings...*で無効にします。
### カナリアを注入する
### 2. カナリアを注入する
前の画像には**ランダムな文字のグループ、つまりカナリア**が表示されています。これをウェブのさまざまな部分パラメータ、フォーム、URLなどに**注入**し、毎回検索をクリックする必要があります。DOM Invaderは、**カナリアが興味深いシンクに到達したかどうか**を確認します。
**カナリア**は、DOM Invaderが追跡するランダムなマーカー文字列`xh9XKYlV`)です。次のことができます:
さらに、**Inject URL params**および**Inject forms**オプションは、自動的に**新しいタブ**を開き、見つけたすべての**URL**パラメータと**フォーム**に**カナリアを注入**します。
* **コピー**して、パラメータ、フォーム、Web-Socketフレーム、ウェブメッセージなどに手動で注入します。
* **Inject URL params / Inject forms**ボタンを使用して、新しいタブを開き、カナリアがすべてのクエリキー/値またはフォームフィールドに自動的に追加されます。
* **空のカナリア**を検索して、悪用可能性に関係なくすべてのシンクを表示します(偵察に最適)。
### 空のカナリアを注入する
#### カスタムカナリア2025+
ページに潜在的なシンクがあるかどうかを見つけたいだけの場合、たとえそれが悪用できなくても、**空のカナリアを検索**できます。
Burp 2024.12では、**カナリア設定**Burpロゴ ➜ DOM Invader ➜ Canaryが導入されました。次のことができます
### メッセージを投稿する
* **ランダム化**または**カスタム文字列**を設定します(マルチタブテストやデフォルト値がページ上に自然に表示される場合に便利)。
* 値をクリップボードに**コピー**します。
* 変更には**Reload**が必要です。
DOM Invaderは、ウェブメッセージを使用してDOM XSSをテストすることを可能にし、以下の機能を提供します
---
1. **`postMessage()`を介して送信されたウェブメッセージのログ記録**、Burp ProxyのHTTPリクエスト/レスポンス履歴ログに似ています。
2. **ウェブメッセージの**修正**と**再発行**、手動でDOM XSSをテストするため、Burp Repeaterの機能に似ています。
3. **ウェブメッセージの自動変更**と送信によるDOM XSSの調査。
### 3. ウェブメッセージ(`postMessage`
#### メッセージの詳細
**Messages**サブタブは、すべての`window.postMessage()`呼び出しを記録し、`origin``source`、および`data`の使用を表示します。
各メッセージをクリックすることで、メッセージの詳細情報を表示できます。これには、クライアントサイドのJavaScriptがメッセージの`origin``data`、または`source`プロパティにアクセスするかどうかが含まれます
**修正して再送信**:メッセージをダブルクリックし、`data`を編集して**Send**を押しますBurp Repeaterのように
- **`origin`** : メッセージの**オリジン情報がチェックされていない場合**、任意の外部ドメインからイベントハンドラーにクロスオリジンメッセージを送信できる可能性があります。しかし、チェックされている場合でも、依然として安全でない可能性があります。
- **`data`**: ここにペイロードが送信されます。このデータが使用されない場合、シンクは無意味です。
- **`source`**: 通常はiframeを参照するソースプロパティがオリジンの代わりに検証されているかどうかを評価します。これがチェックされていても、検証がバイパスされないことは保証されません。
**自動ファズ**:設定で**Postmessage interception ➜ Auto-mutate**を有効にして、DOM Invaderがカナリアベースのペイロードを生成し、ハンドラーに再生できるようにします。
#### メッセージに返信する
フィールドの意味の要約:
1. **Messages**ビューから、任意のメッセージをクリックしてメッセージ詳細ダイアログを開きます
2. 必要に応じて**Data**フィールドを編集します。
3. **Send**をクリックします。
* **origin** ハンドラーが`event.origin`を検証するかどうか
* **data** ペイロードの場所。使用されていない場合、シンクは無関係です。
* **source** iframe / ウィンドウ参照の検証;厳密なオリジンチェックよりも弱いことが多いです。
### プロトタイプ汚染
---
DOM Invaderは、**プロトタイプ汚染脆弱性**を検索することもできます。まず、有効にする必要があります:
### 4. プロトタイプ汚染
<figure><img src="../../images/image (1026).png" alt=""><figcaption></figcaption></figure>
**Settings ➜ Attack types ➜ Prototype pollution**で有効にします。
次に、**`Object.prototype`**に任意のプロパティを追加できる**ソースを検索**します。
ワークフロー:
1. **Browse** DOM Invaderは、URL/クエリ/ハッシュまたはJSONウェブメッセージで見つかった汚染**ソース**`__proto__``constructor``prototype`)をフラグします。
2. **Test** *Test*をクリックして、`Object.prototype.testproperty`が存在するはずのPoCタブを開きます
何かが見つかると、**Test**ボタンが表示され、**見つかったソースをテスト**できます。それをクリックすると、新しいタブが表示され、コンソールでオブジェクトを作成し、`testproperty`が存在するかどうかを確認します:
```javascript
let b = {}
b.testproperty
let obj = {};
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
```
ソースを見つけたら、**ガジェットをスキャン**できます:
3. **ガジェットをスキャン** DOM Invaderはプロパティ名をブルートフォースし、危険なシンク`innerHTML`)に到達するかどうかを追跡します。
4. **Exploit** ガジェット-シンクチェーンが見つかると、*Exploit*ボタンが表示され、ソース + ガジェット + シンクを連鎖させてアラートをトリガーします。
1. **DOM**ビューで特定されたプロトタイプ汚染ソースの隣にある**ガジェットをスキャン**ボタンをクリックすると、DOM Invaderによって新しいタブが開かれます。適切なガジェットのスキャンが始まります。
2. 同じタブで、DevToolsパネルに**DOM Invader**タブが開かれている必要があります。スキャンが完了すると、特定されたガジェットを介してアクセス可能なシンクが**DOM**ビューに表示されます。例えば、`innerHTML`シンクに渡される`html`という名前のガジェットプロパティが以下の例に示されています。
高度な設定(歯車アイコン):
## DOMクラッキング
* **CSP / X-Frame-Optionsを削除**して、ガジェットスキャン中にiframeが機能するようにします。
* **別のフレームで技術をスキャン**して、`__proto__``constructor`の干渉を避けます。
* **技術を個別に無効に**して、脆弱なアプリに対応します。
前の画像では、DOMクラッキングスキャンをオンにできることがわかります。完了すると、**DOM InvaderはDOMクラッキングの脆弱性を探し始めます**。
---
## 参考文献
### 5. DOMクラッブリング
**Attack types ➜ DOM clobbering**を切り替えます。DOM Invaderは、`id`/`name`属性がグローバル変数やフォームオブジェクトと衝突する動的に作成された要素を監視します(`<input name="location">``window.location`をクラッブします)。ユーザー制御のマークアップが変数の置き換えにつながるたびにエントリが生成されます。
---
## 6. 設定の概要2025
DOM Invaderは、**Main / Attack Types / Misc / Canary**のカテゴリに分かれました。
1. **Main**
* **Enable DOM Invader** グローバルスイッチ。
* **Postmessage interception** メッセージログのオン/オフ;自動変異のためのサブトグル。
* **Custom Sources/Sinks** *歯車アイコン* ➜ 特定のシンク(例:`eval``setAttribute`)を有効/無効にして、アプリが壊れる可能性があります。
2. **Attack Types**
* **Prototype pollution**(技術ごとの設定あり)。
* **DOM clobbering**
3. **Misc**
* **Redirect prevention** クライアントサイドのリダイレクトをブロックして、シンクリストが失われないようにします。
* **Redirect前のブレークポイント** リダイレクトの直前にJSを一時停止して、コールスタックを検査します。
* **すべてのソースにカナリアを注入** どこにでもカナリアを自動注入;構成可能なソース/パラメータの許可リスト。
4. **Canary**
* カナリアを表示/ランダム化/カスタムカナリアを設定;クリップボードにコピー。変更にはブラウザのリロードが必要です。
---
### 7. ヒントと良い実践
* **異なるカナリアを使用** `test`のような一般的な文字列を避け、そうでないと偽陽性が発生します。
* **重いシンク**`eval``innerHTML`)を一時的に無効にして、ナビゲーション中にページ機能が壊れないようにします。
* **Burp Repeater & Proxyと組み合わせる** 脆弱な状態を生成したブラウザリクエスト/レスポンスを複製し、最終的なエクスプロイトURLを作成します。
* **フレームスコープを忘れない** ソース/シンクはブラウジングコンテキストごとに表示されますiframe内の脆弱性は手動でフォーカスする必要があるかもしれません。
* **証拠をエクスポート** DOM Invaderパネルを右クリック ➜ *Save screenshot*を選択して、レポートに含めます。
---
## References
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader](https://portswigger.net/burp/documentation/desktop/tools/dom-invader)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/enabling](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/enabling)
@ -85,5 +132,7 @@ b.testproperty
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc)
{{#include ../../banners/hacktricks-training.md}}