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 7b53873af..d903e7c0f 100644 --- a/src/pentesting-web/xss-cross-site-scripting/dom-invader.md +++ b/src/pentesting-web/xss-cross-site-scripting/dom-invader.md @@ -4,78 +4,125 @@ ## DOM Invader -DOM Invader to narzędzie przeglądarkowe zainstalowane w wbudowanej przeglądarce Burp. Pomaga w **wykrywaniu podatności DOM XSS** przy użyciu różnych źródeł i zlewów, w tym wiadomości internetowych i zanieczyszczenia prototypu. Narzędzie jest wstępnie zainstalowane jako rozszerzenie. +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 integruje zakładkę w panelu DevTools przeglądarki, umożliwiającą: +DOM Invader dodaje zakładkę do panelu DevTools przeglądarki, która pozwala na: -1. **Identyfikację kontrolowanych zlewów** na stronie internetowej do testowania DOM XSS, dostarczając kontekst i szczegóły sanitizacji. -2. **Rejestrowanie, edytowanie i ponowne wysyłanie wiadomości internetowych** wysyłanych za pomocą metody `postMessage()` do testowania DOM XSS. DOM Invader może również automatycznie wykrywać podatności przy użyciu specjalnie przygotowanych wiadomości internetowych. -3. Wykrywanie **źródeł zanieczyszczenia prototypu po stronie klienta** i skanowanie kontrolowanych gadżetów wysyłanych do ryzykownych zlewów. -4. Identyfikacja **podatności DOM clobbering**. +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.). -### Włącz to +--- -W wbudowanej przeglądarce Burp przejdź do **rozszerzenia Burp** i włącz je: +### 1. Włącz to
-Teraz odśwież stronę, a w **Dev Tools** znajdziesz **zakładkę DOM Invader:** +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. -### Wstrzyknij Canary +### 2. Wstrzyknij Canary -Na poprzednim obrazku możesz zobaczyć **losową grupę znaków, to jest Canary**. Teraz powinieneś zacząć **wstrzykiwać** go w różnych częściach sieci (parametry, formularze, url...) i za każdym razem kliknąć wyszukiwanie. DOM Invader sprawdzi, czy **canary trafił do jakiegoś interesującego zlewu**, który mógłby być wykorzystany. +**Canary** to losowy ciąg znaków (np. `xh9XKYlV`), który śledzi DOM Invader. Możesz: -Ponadto opcje **Wstrzyknij parametry URL** i **Wstrzyknij formularze** automatycznie otworzą **nową zakładkę**, **wstrzykując** **canary** w każdy **parametr URL** i **formularz**, który znajdą. +* **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). -### Wstrzyknij pusty Canary +#### Niestandardowy canary (2025+) -Jeśli chcesz tylko znaleźć potencjalne zlewy, które strona może mieć, nawet jeśli nie są one wykorzystywalne, możesz **wyszukiwać pusty canary**. +Burp 2024.12 wprowadził **Ustawienia Canary** (logo Burp ➜ DOM Invader ➜ Canary). Możesz: -### Wiadomości post +* **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**. -DOM Invader umożliwia testowanie DOM XSS przy użyciu wiadomości internetowych z takimi funkcjami jak: +--- -1. **Rejestrowanie wiadomości internetowych** wysyłanych za pomocą `postMessage()`, podobnie jak rejestrowanie historii żądań/odpowiedzi HTTP w Burp Proxy. -2. **Modyfikacja** i **ponowne wydanie** wiadomości internetowych w celu ręcznego testowania DOM XSS, podobnie jak funkcja Burp Repeater. -3. **Automatyczna zmiana** i wysyłanie wiadomości internetowych w celu badania DOM XSS. +### 3. Wiadomości webowe (`postMessage`) -#### Szczegóły wiadomości +Podzakładka **Messages** rejestruje każde wywołanie `window.postMessage()`, pokazując użycie `origin`, `source` i `data`. -Szczegółowe informacje można zobaczyć o każdej wiadomości, klikając na nią, co obejmuje, czy JavaScript po stronie klienta uzyskuje dostęp do właściwości `origin`, `data` lub `source` wiadomości. +• **Modyfikuj i wysyłaj ponownie**: kliknij dwukrotnie wiadomość, edytuj `data` i naciśnij **Send** (podobnie jak Burp Repeater). -- **`origin`** : Jeśli **informacje o pochodzeniu wiadomości nie są sprawdzane**, możesz być w stanie wysyłać wiadomości między źródłami do obsługi zdarzeń **z dowolnej zewnętrznej domeny**. Ale jeśli jest to sprawdzane, nadal może być to niebezpieczne. -- **`data`**: Tutaj wysyłany jest ładunek. Jeśli te dane nie są używane, zlew jest bezużyteczny. -- **`source`**: Ocena, czy właściwość źródła, zazwyczaj odnosząca się do iframe, jest weryfikowana zamiast pochodzenia. Nawet jeśli to jest sprawdzane, nie zapewnia to, że weryfikacja nie może być obejrzana. +• **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. -#### Odpowiedz na wiadomość +Podsumowanie znaczenia pól: -1. Z widoku **Wiadomości** kliknij dowolną wiadomość, aby otworzyć okno szczegółów wiadomości. -2. Edytuj pole **Dane** według potrzeb. -3. Kliknij **Wyślij**. +* **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. -### Zanieczyszczenie prototypu +--- -DOM Invader może również wyszukiwać **podatności Zanieczyszczenia Prototypu**. Najpierw musisz to włączyć: +### 4. Zanieczyszczenie prototypu -
+Włącz w **Settings ➜ Attack types ➜ Prototype pollution**. -Następnie **wyszuka źródła**, które umożliwiają dodawanie dowolnych właściwości do **`Object.prototype`**. +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`: -Jeśli coś zostanie znalezione, pojawi się przycisk **Test**, aby **przetestować znalezione źródło**. Kliknij na niego, otworzy się nowa zakładka, utwórz obiekt w konsoli i sprawdź, czy `testproperty` istnieje: ```javascript -let b = {} -b.testproperty +let obj = {}; +console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC' ``` -Gdy znajdziesz źródło, możesz **zeskanować pod kątem gadżetu**: +3. **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`). +4. **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. -1. Nowa karta jest otwierana przez DOM Invader, gdy klikniesz przycisk **Scan for gadgets**, który znajduje się obok każdego zidentyfikowanego źródła zanieczyszczenia prototypu w widoku **DOM**. Rozpoczyna się skanowanie w poszukiwaniu odpowiednich gadżetów. -2. W międzyczasie w tej samej karcie powinien być otwarty zakładka **DOM Invader** w panelu DevTools. Po zakończeniu skanowania, wszelkie zlewy dostępne za pośrednictwem zidentyfikowanych gadżetów są wyświetlane w widoku **DOM**. Na przykład, właściwość gadżetu o nazwie `html` przekazywana do zlewu `innerHTML` jest pokazana w poniższym przykładzie. +Zaawansowane ustawienia (ikona zębatki): -## DOM clobbering +* **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. -Na poprzednim obrazku widać, że skanowanie pod kątem zanieczyszczenia DOM można włączyć. Po włączeniu **DOM Invader zacznie szukać luk w zanieczyszczeniu DOM**. +--- + +### 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 (`` → 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/Sinks** – *ikona zębatki* ➜ włącz/wyłącz konkretne miejsca docelowe (np. `eval`, `setAttribute`), które mogą uszkodzić aplikację. + +2. **Attack Types** +* **Prototype pollution** (z ustawieniami dla każdej techniki). +* **DOM clobbering**. + +3. **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. + +4. **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 @@ -85,5 +132,7 @@ Na poprzednim obrazku widać, że skanowanie pod kątem zanieczyszczenia DOM mo - [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}}