From cd3ae71a7c8ded8640ef2c28b607967716188226 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 5 Aug 2025 00:34:49 +0000 Subject: [PATCH] Translated ['src/pentesting-web/xss-cross-site-scripting/dom-invader.md' --- .../xss-cross-site-scripting/dom-invader.md | 133 ++++++++++++------ 1 file changed, 91 insertions(+), 42 deletions(-) diff --git a/src/pentesting-web/xss-cross-site-scripting/dom-invader.md b/src/pentesting-web/xss-cross-site-scripting/dom-invader.md index d4d0a101e..7f50a1a50 100644 --- a/src/pentesting-web/xss-cross-site-scripting/dom-invader.md +++ b/src/pentesting-web/xss-cross-site-scripting/dom-invader.md @@ -4,80 +4,127 @@ ## DOM Invader -DOM Invader - це інструмент браузера, встановлений у вбудованому браузері Burp. Він допомагає у **виявленні вразливостей DOM XSS** за допомогою різних джерел і стоків, включаючи веб-повідомлення та забруднення прототипу. Інструмент попередньо встановлений як розширення. +DOM Invader - це інструмент браузера, встановлений у **вбудованому браузері Chromium Burp Suite**. Він допомагає у **виявленні DOM XSS та інших вразливостей на стороні клієнта** (забруднення прототипу, DOM clobbering тощо) шляхом автоматичного **інструментування JavaScript джерел і приймачів**. Розширення постачається з Burp і потребує лише активації. -DOM Invader інтегрує вкладку у панелі DevTools браузера, що дозволяє наступне: +DOM Invader додає вкладку до панелі DevTools браузера, яка дозволяє вам: -1. **Ідентифікація контрольованих стоків** на веб-сторінці для тестування DOM XSS, надаючи контекст та деталі санітизації. -2. **Логування, редагування та повторна відправка веб-повідомлень**, надісланих за допомогою методу `postMessage()` для тестування DOM XSS. DOM Invader також може автоматично виявляти вразливості, використовуючи спеціально підготовлені веб-повідомлення. -3. Виявлення **джерел забруднення прототипу на стороні клієнта** та сканування контрольованих гаджетів, надісланих до ризикованих стоків. -4. Ідентифікація **вразливостей DOM clobbering**. +1. **Визначати контрольовані приймачі** в реальному часі, включаючи контекст (атрибут, HTML, URL, JS) та застосовану санітизацію. +2. **Логувати, редагувати та повторно надсилати `postMessage()` веб-повідомлення**, або дозволити розширенню автоматично їх змінювати. +3. **Виявляти джерела забруднення прототипу на стороні клієнта та сканувати ланцюги gadget→sink**, генеруючи PoC на льоту. +4. **Знаходити вектори DOM clobbering** (наприклад, колізії `id` / `name`, які перезаписують глобальні змінні). +5. **Тонко налаштовувати поведінку** через багатий інтерфейс налаштувань (кастомний canary, автоматичне впровадження, блокування перенаправлень, списки джерел/приймачів тощо). -### Enable It +--- -У вбудованому браузері Burp перейдіть до **Burp extension** та увімкніть його: +### 1. Увімкніть його
-Тепер оновіть сторінку, і у **Dev Tools** ви знайдете **вкладку DOM Invader:** +1. Відкрийте **Proxy ➜ Intercept ➜ Open Browser** (вбудований браузер Burp). +2. Натисніть на логотип **Burp Suite** (угорі праворуч). Якщо він прихований, спочатку натисніть на деталь. +3. У вкладці **DOM Invader** увімкніть **Enable DOM Invader** та натисніть **Reload**. +4. Відкрийте DevTools ( `F12` / Клацніть правою кнопкою ➜ Перевірити ) і закріпіть його. З'являється нова панель **DOM Invader**. -
+> Burp запам'ятовує стан для кожного профілю. Вимкніть його в *Settings ➜ Tools ➜ Burp’s browser ➜ Store settings...*, якщо потрібно. -### Inject a Canary +### 2. Впровадьте Canary -На попередньому зображенні ви можете побачити **випадкову групу символів, це Канар**. Тепер ви повинні почати **впроваджувати** його в різні частини вебу (параметри, форми, url...) і кожного разу натискати пошук. DOM Invader перевірить, чи **канар закінчився в будь-якому цікавому стоку**, який може бути використаний. +**Canary** - це випадковий маркерний рядок (наприклад, `xh9XKYlV`), який відстежує DOM Invader. Ви можете: -Більше того, опції **Inject URL params** та Inject forms автоматично відкриють **нову вкладку**, **впроваджуючи** **канар** в кожен **URL** параметр та **форму**, яку вони знайдуть. +* **Скопіювати** його та вручну впровадити в параметри, форми, Web-Socket фрейми, веб-повідомлення тощо. +* Використовувати кнопки **Inject URL params / Inject forms**, щоб відкрити нову вкладку, де canary автоматично додається до кожного ключа/значення запиту або поля форми. +* Шукати **порожній canary**, щоб виявити всі приймачі незалежно від можливості експлуатації (чудово для розвідки). -### Inject an empty Canary +#### Кастомний canary (2025+) -Якщо ви просто хочете знайти потенційні стоки, які може мати сторінка, навіть якщо вони не підлягають експлуатації, ви можете **шукати порожній канар**. +Burp 2024.12 представив **Canary settings** (логотип Burp ➜ DOM Invader ➜ Canary). Ви можете: -### Post Messages +* **Випадковувати** або встановити **кастомний рядок** (корисно для тестування з кількома вкладками або коли значення за замовчуванням з'являється природно на сторінці). +* **Скопіювати** значення в буфер обміну. +* Зміни вимагають **Reload**. -DOM Invader дозволяє тестувати DOM XSS за допомогою веб-повідомлень з такими функціями, як: +--- -1. **Логування веб-повідомлень**, надісланих через `postMessage()`, подібно до логування історії запитів/відповідей HTTP Burp Proxy. -2. **Модифікація** та **повторна відправка** веб-повідомлень для ручного тестування DOM XSS, подібно до функції Burp Repeater. -3. **Автоматичне зміна** та відправка веб-повідомлень для перевірки DOM XSS. +### 3. Веб-повідомлення (`postMessage`) -#### Message details +Підвкладка **Messages** записує кожен виклик `window.postMessage()`, показуючи використання `origin`, `source` та `data`. -Детальну інформацію про кожне повідомлення можна переглянути, натиснувши на нього, що включає, чи доступ JavaScript на стороні клієнта до властивостей `origin`, `data` або `source` повідомлення. +• **Змінити та повторно надіслати**: двічі клацніть на повідомлення, відредагуйте `data` і натисніть **Send** (схоже на Burp Repeater). -- **`origin`** : Якщо **інформація про походження повідомлення не перевіряється**, ви можете надіслати крос-доменні повідомлення до обробника подій **з довільного зовнішнього домену**. Але якщо це перевіряється, це все ще може бути небезпечно. -- **`data`**: Тут надсилається корисне навантаження. Якщо ці дані не використовуються, стік марний. -- **`source`**: Оцінює, чи перевіряється властивість source, зазвичай посилаючись на iframe, замість походження. Навіть якщо це перевіряється, це не гарантує, що перевірка не може бути обійдена. +• **Авто-фуззинг**: увімкніть **Postmessage interception ➜ Auto-mutate** в налаштуваннях, щоб дозволити DOM Invader генерувати навантаження на основі canary та повторно надсилати їх обробнику. -#### Reply a message +Підсумок значення полів: -1. У перегляді **Messages** натисніть на будь-яке повідомлення, щоб відкрити діалогове вікно деталей повідомлення. -2. Відредагуйте поле **Data** за потреби. -3. Натисніть **Send**. +* **origin** – чи перевіряє обробник `event.origin`. +* **data** – місце розташування навантаження. Якщо не використовується, приймач не має значення. +* **source** – перевірка посилання на iframe / вікно; часто слабша, ніж перевірка строгого походження. -### Prototype Pollution +--- -DOM Invader також може шукати **вразливості забруднення прототипу**. Спочатку вам потрібно увімкнути це: +### 4. Забруднення прототипу -
+Увімкніть у **Settings ➜ Attack types ➜ Prototype pollution**. -Потім він **шукатиме джерела**, які дозволяють вам додавати довільні властивості до **`Object.prototype`**. +Робочий процес: + +1. **Перегляд** – DOM Invader позначає джерела забруднення (`__proto__`, `constructor`, `prototype`), знайдені в URL/запиті/хеші або JSON веб-повідомленнях. +2. **Тест** – натискає *Test*, щоб відкрити вкладку PoC, де має існувати `Object.prototype.testproperty`: -Якщо щось буде знайдено, з'явиться кнопка **Test**, щоб **перевірити знайдене джерело**. Натисніть на неї, з'явиться нова вкладка, створіть об'єкт у консолі та перевірте, чи існує `testproperty`: ```javascript -let b = {} -b.testproperty +let obj = {}; +console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC' ``` -Якщо ви знайшли джерело, ви можете **сканувати на наявність гаджетів**: +3. **Сканувати на наявність гаджетів** – DOM Invader брутфорсить імена властивостей і відстежує, чи потрапляють вони в небезпечні приймачі (наприклад, `innerHTML`). +4. **Експлуатувати** – коли знайдено ланцюг gadget-sink, з'являється кнопка *Exploit*, яка з'єднує джерело + гаджет + приймач для виклику сповіщення. -1. Нову вкладку відкриває DOM Invader, коли натискається кнопка **Scan for gadgets**, яка знаходиться поруч з будь-яким виявленим джерелом забруднення прототипу у вигляді **DOM**. Потім починається сканування на наявність підходящих гаджетів. -2. Тим часом у тій же вкладці повинна бути відкрита вкладка **DOM Invader** в панелі DevTools. Після завершення сканування будь-які sink, доступні через виявлені гаджети, відображаються у вигляді **DOM**. Наприклад, властивість гаджета з назвою `html`, що передається в sink `innerHTML`, показана в наведеному нижче прикладі. +Розширені налаштування (іконка шестерні): -## DOM забруднення +* **Видалити CSP / X-Frame-Options**, щоб зберегти працездатність iframe під час сканування гаджетів. +* **Сканувати техніки в окремих фреймах**, щоб уникнути перешкод `__proto__` та `constructor`. +* **Вимкнути техніки** окремо для крихких додатків. -На попередньому зображенні видно, що сканування на наявність DOM забруднення можна увімкнути. Після цього **DOM Invader почне шукати вразливості DOM забруднення**. +--- -## Посилання +### 5. DOM Clobbering + +Увімкніть **Attack types ➜ DOM clobbering**. DOM Invader моніторить динамічно створені елементи, атрибути `id`/`name` яких колізують з глобальними змінними або об'єктами форм (`` → перезаписує `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** – блокувати перенаправлення на стороні клієнта, щоб список приймачів не загубився. +* **Breakpoint before redirect** – призупинити JS безпосередньо перед перенаправленням для перевірки стеку викликів. +* **Inject canary into all sources** – автоматично впроваджувати canary скрізь; налаштовуваний список дозволених джерел/параметрів. + +4. **Canary** +* Перегляд / випадковість / встановлення кастомного canary; копіювати в буфер обміну. Зміни вимагають перезавантаження браузера. + +--- + +### 7. Поради та хороші практики + +* **Використовуйте відмінний canary** – уникайте загальних рядків, таких як `test`, інакше виникають хибнопозитивні результати. +* **Тимчасово вимкніть важкі приймачі** (`eval`, `innerHTML`), якщо вони порушують функціональність сторінки під час навігації. +* **Поєднуйте з Burp Repeater & Proxy** – відтворюйте запит/відповідь браузера, які призвели до вразливого стану, і створюйте фінальні URL-адреси експлуатації. +* **Пам'ятайте про область фрейму** – джерела/приймачі відображаються в кожному контексті перегляду; вразливості всередині iframe можуть вимагати ручної уваги. +* **Експортуйте докази** – клацніть правою кнопкою на панелі DOM Invader ➜ *Зберегти скріншот* для включення в звіти. + +--- + +## 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}}