Translated ['src/pentesting-web/xss-cross-site-scripting/dom-invader.md'

This commit is contained in:
Translator 2025-08-05 00:46:28 +00:00
parent e41440c414
commit 08ddead068

View File

@ -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
<figure><img src="../../images/image (1129).png" alt=""><figcaption></figcaption></figure>
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**.
<figure><img src="../../images/image (695).png" alt=""><figcaption></figcaption></figure>
> Burp zapamiętuje stan dla każdego profilu. Wyłącz to w *Settings ➜ Tools ➜ Burps 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
<figure><img src="../../images/image (1026).png" alt=""><figcaption></figcaption></figure>
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 (`<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/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}}