DOM Invader
Reading time: 6 minutes
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
DOM Invader
DOM Invader to narzędzie przeglądarki zainstalowane w wbudowanej przeglądarce Chromium Burp Suite. Pomaga w wykrywaniu DOM XSS i innych podatności po stronie klienta (zanieczyszczenie prototypu, DOM clobbering itp.) poprzez automatyczne instrumentowanie źródeł i miejsc docelowych JavaScriptu. Rozszerzenie jest dostarczane z Burp i wymaga jedynie włączenia.
DOM Invader dodaje zakładkę do panelu DevTools przeglądarki, która pozwala na:
- Identyfikację kontrolowanych miejsc docelowych w czasie rzeczywistym, w tym kontekst (atrybut, HTML, URL, JS) i zastosowaną sanitizację.
- Rejestrowanie, edytowanie i ponowne wysyłanie
postMessage()
wiadomości webowych, lub pozwolenie rozszerzeniu na automatyczną mutację. - Wykrywanie źródeł zanieczyszczenia prototypu po stronie klienta i skanowanie łańcuchów gadget→sink, generując PoC w locie.
- Znajdowanie wektorów DOM clobbering (np. kolizje
id
/name
, które nadpisują zmienne globalne). - Dostosowywanie zachowania za pomocą bogatego interfejsu ustawień (niestandardowy canary, automatyczne wstrzykiwanie, blokowanie przekierowań, listy źródeł/miejsc docelowych itp.).
1. Włącz to
.png)
- Otwórz Proxy ➜ Intercept ➜ Open Browser (wbudowana przeglądarka Burp).
- Kliknij logo Burp Suite (w prawym górnym rogu). Jeśli jest ukryte, najpierw kliknij ikonę puzzli.
- W zakładce DOM Invader, włącz Enable DOM Invader i naciśnij Reload.
- Otwórz DevTools (
F12
/ Prawy przycisk ➜ Inspekcja ) i dokuj go. Pojawia się nowy panel DOM Invader.
Burp zapamiętuje stan dla każdego profilu. Wyłącz to w Settings ➜ Tools ➜ Burp’s browser ➜ Store settings... jeśli to konieczne.
2. Wstrzyknij Canary
Canary to losowy ciąg znaków (np. xh9XKYlV
), który śledzi DOM Invader. Możesz:
- Skopiować go i ręcznie wstrzyknąć w parametrach, formularzach, ramkach Web-Socket, wiadomościach webowych itp.
- Użyć przycisków Inject URL params / Inject forms, aby otworzyć nową zakładkę, w której canary jest automatycznie dodawany do każdego klucza/wartości zapytania lub pola formularza.
- Szukać pustego canary, aby ujawnić wszystkie miejsca docelowe niezależnie od możliwości wykorzystania (świetne do rozpoznania).
Niestandardowy canary (2025+)
Burp 2024.12 wprowadził Ustawienia Canary (logo Burp ➜ DOM Invader ➜ Canary). Możesz:
- Losować lub ustawić niestandardowy ciąg (przydatne do testowania w wielu zakładkach lub gdy domyślna wartość pojawia się naturalnie na stronie).
- Skopiować wartość do schowka.
- Zmiany wymagają Reload.
3. Wiadomości webowe (postMessage
)
Podzakładka Messages rejestruje każde wywołanie window.postMessage()
, pokazując użycie origin
, source
i data
.
• Modyfikuj i wysyłaj ponownie: kliknij dwukrotnie wiadomość, edytuj data
i naciśnij Send (podobnie jak Burp Repeater).
• Auto-fuzz: włącz Postmessage interception ➜ Auto-mutate w ustawieniach, aby pozwolić DOM Invader na generowanie ładunków opartych na canary i odtwarzanie ich do handlera.
Podsumowanie znaczenia pól:
- origin – czy handler weryfikuje
event.origin
. - data – lokalizacja ładunku. Jeśli nieużywane, miejsce docelowe jest nieistotne.
- source – weryfikacja odniesienia do iframe / okna; często słabsza niż ścisła weryfikacja pochodzenia.
4. Zanieczyszczenie prototypu
Włącz w Settings ➜ Attack types ➜ Prototype pollution.
Przebieg pracy:
- Przeglądaj – DOM Invader oznacza źródła zanieczyszczenia (
__proto__
,constructor
,prototype
) znalezione w URL/zapytaniu/hash lub wiadomościach JSON. - Testuj – kliknij Test, aby otworzyć zakładkę PoC, w której powinno istnieć
Object.prototype.testproperty
:
let obj = {};
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
- Skanuj pod kątem gadżetów – DOM Invader brutalnie próbuje nazwy właściwości i śledzi, czy którakolwiek trafia do niebezpiecznych miejsc docelowych (np.
innerHTML
). - Eksploituj – gdy znajdzie się łańcuch gadżet-miejsce docelowe, pojawia się przycisk Exploit, który łączy źródło + gadżet + miejsce docelowe, aby wywołać alert.
Zaawansowane ustawienia (ikona zębatki):
- Usuń CSP / X-Frame-Options, aby utrzymać działające iframe podczas skanowania gadżetów.
- Skanuj techniki w oddzielnych ramach, aby uniknąć zakłóceń między
__proto__
aconstructor
. - Wyłącz techniki indywidualnie dla delikatnych aplikacji.
5. DOM Clobbering
Włącz Attack types ➜ DOM clobbering. DOM Invader monitoruje dynamicznie tworzone elementy, których atrybuty id
/name
kolidują z zmiennymi globalnymi lub obiektami formularzy (<input name="location">
→ nadpisuje window.location
). Wpis jest tworzony za każdym razem, gdy kontrolowany przez użytkownika markup prowadzi do zastąpienia zmiennej.
6. Przegląd ustawień (2025)
DOM Invader jest teraz podzielony na kategorie Main / Attack Types / Misc / Canary.
- Main
- Enable DOM Invader – globalny przełącznik.
- Postmessage interception – włącz/wyłącz rejestrowanie wiadomości; podprzełączniki do automatycznej mutacji.
- Custom Sources/Sinks – ikona zębatki ➜ włącz/wyłącz konkretne miejsca docelowe (np.
eval
,setAttribute
), które mogą uszkodzić aplikację.
- Attack Types
- Prototype pollution (z ustawieniami dla każdej techniki).
- DOM clobbering.
- Misc
- Redirect prevention – blokuj przekierowania po stronie klienta, aby lista miejsc docelowych nie została utracona.
- Breakpoint before redirect – wstrzymaj JS tuż przed przekierowaniem, aby zbadać stos wywołań.
- Inject canary into all sources – automatycznie wstrzykuj canary wszędzie; konfigurowalna lista dozwolonych źródeł/parametrów.
- Canary
- Wyświetl / losuj / ustaw niestandardowy canary; skopiuj do schowka. Zmiany wymagają ponownego załadowania przeglądarki.
7. Wskazówki i dobre praktyki
- Używaj wyraźnego canary – unikaj powszechnych ciągów, takich jak
test
, w przeciwnym razie mogą wystąpić fałszywe pozytywy. - Tymczasowo wyłącz ciężkie miejsca docelowe (
eval
,innerHTML
), jeśli psują funkcjonalność strony podczas nawigacji. - Łącz z Burp Repeater i Proxy – powtórz żądanie/odpowiedź przeglądarki, które spowodowało podatny stan i stwórz ostateczne adresy URL exploitu.
- Pamiętaj o zakresie ramki – źródła/miejsca docelowe są wyświetlane w kontekście przeglądania; podatności wewnątrz iframe mogą wymagać ręcznej uwagi.
- Eksportuj dowody – kliknij prawym przyciskiem na panelu DOM Invader ➜ Zapisz zrzut ekranu, aby dołączyć do raportów.
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
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.