DOM Invader
Reading time: 10 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
DOM Invader
DOM Invaderは、Burp Suiteの組み込みChromiumブラウザにインストールされたブラウザツールです。これは、DOM XSSやその他のクライアントサイドの脆弱性(プロトタイプ汚染、DOMクラッブリングなど)を自動的にJavaScriptソースとシンクを計測することで検出するのを助けます。この拡張機能はBurpに同梱されており、有効にするだけで使用できます。
DOM Invaderは、ブラウザのDevToolsパネルにタブを追加し、次のことができます:
- 制御可能なシンクをリアルタイムで特定し、コンテキスト(属性、HTML、URL、JS)や適用されたサニタイズを含めます。
postMessage()
ウェブメッセージをログ、編集、再送信するか、拡張機能に自動的に変異させることを許可します。- クライアントサイドのプロトタイプ汚染ソースを検出し、ガジェット→シンクチェーンをスキャンし、即座にPoCを生成します。
- DOMクラッブリングベクトルを見つける(例:グローバル変数を上書きする
id
/name
の衝突)。 - 豊富な設定UIを介して動作を微調整します(カスタムカナリア、自動注入、リダイレクトブロック、ソース/シンクリストなど)。
1. 有効にする
.png)
- Proxy ➜ Intercept ➜ Open Browser(Burpの埋め込みブラウザ)を開きます。
- Burp Suiteのロゴをクリックします(右上)。隠れている場合は、最初にジグソーピースをクリックします。
- DOM Invaderタブで、Enable DOM InvaderをONに切り替え、Reloadを押します。
- DevToolsを開き(
F12
/ 右クリック ➜ 検査)、ドックします。新しいDOM Invaderパネルが表示されます。
Burpはプロファイルごとに状態を記憶します。必要に応じて、*Settings ➜ Tools ➜ Burp’s browser ➜ Store settings...*で無効にします。
2. カナリアを注入する
カナリアは、DOM Invaderが追跡するランダムなマーカー文字列(例:xh9XKYlV
)です。次のことができます:
- コピーして、パラメータ、フォーム、Web-Socketフレーム、ウェブメッセージなどに手動で注入します。
- Inject URL params / Inject formsボタンを使用して、新しいタブを開き、カナリアがすべてのクエリキー/値またはフォームフィールドに自動的に追加されます。
- 空のカナリアを検索して、悪用可能性に関係なくすべてのシンクを表示します(偵察に最適)。
カスタムカナリア(2025+)
Burp 2024.12では、カナリア設定(Burpロゴ ➜ DOM Invader ➜ Canary)が導入されました。次のことができます:
- ランダム化またはカスタム文字列を設定します(マルチタブテストやデフォルト値がページ上に自然に表示される場合に便利)。
- 値をクリップボードにコピーします。
- 変更にはReloadが必要です。
3. ウェブメッセージ(postMessage
)
Messagesサブタブは、すべてのwindow.postMessage()
呼び出しを記録し、origin
、source
、およびdata
の使用を表示します。
• 修正して再送信:メッセージをダブルクリックし、data
を編集してSendを押します(Burp Repeaterのように)。
• 自動ファズ:設定でPostmessage interception ➜ Auto-mutateを有効にして、DOM Invaderがカナリアベースのペイロードを生成し、ハンドラーに再生できるようにします。
フィールドの意味の要約:
- origin – ハンドラーが
event.origin
を検証するかどうか。 - data – ペイロードの場所。使用されていない場合、シンクは無関係です。
- source – iframe / ウィンドウ参照の検証;厳密なオリジンチェックよりも弱いことが多いです。
4. プロトタイプ汚染
Settings ➜ Attack types ➜ Prototype pollutionで有効にします。
ワークフロー:
- Browse – DOM Invaderは、URL/クエリ/ハッシュまたはJSONウェブメッセージで見つかった汚染ソース(
__proto__
、constructor
、prototype
)をフラグします。 - Test – Testをクリックして、
Object.prototype.testproperty
が存在するはずのPoCタブを開きます:
let obj = {};
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
- ガジェットをスキャン – DOM Invaderはプロパティ名をブルートフォースし、危険なシンク(例:
innerHTML
)に到達するかどうかを追跡します。 - Exploit – ガジェット-シンクチェーンが見つかると、Exploitボタンが表示され、ソース + ガジェット + シンクを連鎖させてアラートをトリガーします。
高度な設定(歯車アイコン):
- CSP / X-Frame-Optionsを削除して、ガジェットスキャン中にiframeが機能するようにします。
- 別のフレームで技術をスキャンして、
__proto__
とconstructor
の干渉を避けます。 - 技術を個別に無効にして、脆弱なアプリに対応します。
5. DOMクラッブリング
Attack types ➜ DOM clobberingを切り替えます。DOM Invaderは、id
/name
属性がグローバル変数やフォームオブジェクトと衝突する動的に作成された要素を監視します(<input name="location">
→ window.location
をクラッブします)。ユーザー制御のマークアップが変数の置き換えにつながるたびにエントリが生成されます。
6. 設定の概要(2025)
DOM Invaderは、Main / Attack Types / Misc / Canaryのカテゴリに分かれました。
- Main
- Enable DOM Invader – グローバルスイッチ。
- Postmessage interception – メッセージログのオン/オフ;自動変異のためのサブトグル。
- Custom Sources/Sinks – 歯車アイコン ➜ 特定のシンク(例:
eval
、setAttribute
)を有効/無効にして、アプリが壊れる可能性があります。
- Attack Types
- Prototype pollution(技術ごとの設定あり)。
- DOM clobbering。
- Misc
- Redirect prevention – クライアントサイドのリダイレクトをブロックして、シンクリストが失われないようにします。
- Redirect前のブレークポイント – リダイレクトの直前にJSを一時停止して、コールスタックを検査します。
- すべてのソースにカナリアを注入 – どこにでもカナリアを自動注入;構成可能なソース/パラメータの許可リスト。
- 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/enabling
- https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-xss
- 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/dom-clobbering
- https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary
- https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。