# DOM Invader {{#include ../../banners/hacktricks-training.md}} ## DOM Invader DOM Invader - це інструмент браузера, встановлений у вбудованому браузері Burp. Він допомагає у **виявленні вразливостей DOM XSS** за допомогою різних джерел і стоків, включаючи веб-повідомлення та забруднення прототипу. Інструмент попередньо встановлений як розширення. DOM Invader інтегрує вкладку у панелі DevTools браузера, що дозволяє наступне: 1. **Ідентифікація контрольованих стоків** на веб-сторінці для тестування DOM XSS, надаючи контекст та деталі санітизації. 2. **Логування, редагування та повторна відправка веб-повідомлень**, надісланих за допомогою методу `postMessage()` для тестування DOM XSS. DOM Invader також може автоматично виявляти вразливості, використовуючи спеціально підготовлені веб-повідомлення. 3. Виявлення **джерел забруднення прототипу на стороні клієнта** та сканування контрольованих гаджетів, надісланих до ризикованих стоків. 4. Ідентифікація **вразливостей DOM clobbering**. ### Enable It У вбудованому браузері Burp перейдіть до **Burp extension** та увімкніть його:
Тепер оновіть сторінку, і у **Dev Tools** ви знайдете **вкладку DOM Invader:**
### Inject a Canary На попередньому зображенні ви можете побачити **випадкову групу символів, це Канар**. Тепер ви повинні почати **впроваджувати** його в різні частини вебу (параметри, форми, url...) і кожного разу натискати пошук. DOM Invader перевірить, чи **канар закінчився в будь-якому цікавому стоку**, який може бути використаний. Більше того, опції **Inject URL params** та Inject forms автоматично відкриють **нову вкладку**, **впроваджуючи** **канар** в кожен **URL** параметр та **форму**, яку вони знайдуть. ### Inject an empty Canary Якщо ви просто хочете знайти потенційні стоки, які може мати сторінка, навіть якщо вони не підлягають експлуатації, ви можете **шукати порожній канар**. ### Post Messages DOM Invader дозволяє тестувати DOM XSS за допомогою веб-повідомлень з такими функціями, як: 1. **Логування веб-повідомлень**, надісланих через `postMessage()`, подібно до логування історії запитів/відповідей HTTP Burp Proxy. 2. **Модифікація** та **повторна відправка** веб-повідомлень для ручного тестування DOM XSS, подібно до функції Burp Repeater. 3. **Автоматичне зміна** та відправка веб-повідомлень для перевірки DOM XSS. #### Message details Детальну інформацію про кожне повідомлення можна переглянути, натиснувши на нього, що включає, чи доступ JavaScript на стороні клієнта до властивостей `origin`, `data` або `source` повідомлення. - **`origin`** : Якщо **інформація про походження повідомлення не перевіряється**, ви можете надіслати крос-доменні повідомлення до обробника подій **з довільного зовнішнього домену**. Але якщо це перевіряється, це все ще може бути небезпечно. - **`data`**: Тут надсилається корисне навантаження. Якщо ці дані не використовуються, стік марний. - **`source`**: Оцінює, чи перевіряється властивість source, зазвичай посилаючись на iframe, замість походження. Навіть якщо це перевіряється, це не гарантує, що перевірка не може бути обійдена. #### Reply a message 1. У перегляді **Messages** натисніть на будь-яке повідомлення, щоб відкрити діалогове вікно деталей повідомлення. 2. Відредагуйте поле **Data** за потреби. 3. Натисніть **Send**. ### Prototype Pollution DOM Invader також може шукати **вразливості забруднення прототипу**. Спочатку вам потрібно увімкнути це:
Потім він **шукатиме джерела**, які дозволяють вам додавати довільні властивості до **`Object.prototype`**. Якщо щось буде знайдено, з'явиться кнопка **Test**, щоб **перевірити знайдене джерело**. Натисніть на неї, з'явиться нова вкладка, створіть об'єкт у консолі та перевірте, чи існує `testproperty`: ```javascript let b = {} b.testproperty ``` Якщо ви знайшли джерело, ви можете **сканувати на наявність гаджетів**: 1. Нову вкладку відкриває DOM Invader, коли натискається кнопка **Scan for gadgets**, яка знаходиться поруч з будь-яким виявленим джерелом забруднення прототипу у вигляді **DOM**. Потім починається сканування на наявність підходящих гаджетів. 2. Тим часом у тій же вкладці повинна бути відкрита вкладка **DOM Invader** в панелі DevTools. Після завершення сканування будь-які sink, доступні через виявлені гаджети, відображаються у вигляді **DOM**. Наприклад, властивість гаджета з назвою `html`, що передається в sink `innerHTML`, показана в наведеному нижче прикладі. ## DOM забруднення На попередньому зображенні видно, що сканування на наявність DOM забруднення можна увімкнути. Після цього **DOM Invader почне шукати вразливості DOM забруднення**. ## Посилання - [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) - [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-xss](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/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) {{#include ../../banners/hacktricks-training.md}}