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

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:

  1. Identyfikację kontrolowanych miejsc docelowych w czasie rzeczywistym, w tym kontekst (atrybut, HTML, URL, JS) i zastosowaną sanitizację.
  2. Rejestrowanie, edytowanie i ponowne wysyłanie postMessage() wiadomości webowych, lub pozwolenie rozszerzeniu na automatyczną mutację.
  3. Wykrywanie źródeł zanieczyszczenia prototypu po stronie klienta i skanowanie łańcuchów gadget→sink, generując PoC w locie.
  4. Znajdowanie wektorów DOM clobbering (np. kolizje id / name, które nadpisują zmienne globalne).
  5. Dostosowywanie zachowania za pomocą bogatego interfejsu ustawień (niestandardowy canary, automatyczne wstrzykiwanie, blokowanie przekierowań, listy źródeł/miejsc docelowych itp.).

1. Włącz to

  1. Otwórz Proxy ➜ Intercept ➜ Open Browser (wbudowana przeglądarka Burp).
  2. Kliknij logo Burp Suite (w prawym górnym rogu). Jeśli jest ukryte, najpierw kliknij ikonę puzzli.
  3. W zakładce DOM Invader, włącz Enable DOM Invader i naciśnij Reload.
  4. 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:

  1. Przeglądaj – DOM Invader oznacza źródła zanieczyszczenia (__proto__, constructor, prototype) znalezione w URL/zapytaniu/hash lub wiadomościach JSON.
  2. Testuj – kliknij Test, aby otworzyć zakładkę PoC, w której powinno istnieć Object.prototype.testproperty:
javascript
let obj = {};
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
  1. 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).
  2. 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__ a constructor.
  • 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.

  1. Main
  • Enable DOM Invader – globalny przełącznik.
  • Postmessage interception – włącz/wyłącz rejestrowanie wiadomości; podprzełączniki do automatycznej mutacji.
  • Custom Sources/Sinksikona zębatki ➜ włącz/wyłącz konkretne miejsca docelowe (np. eval, setAttribute), które mogą uszkodzić aplikację.
  1. Attack Types
  • Prototype pollution (z ustawieniami dla każdej techniki).
  • DOM clobbering.
  1. 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.
  1. 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

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