mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/xss-cross-site-scripting/dom-invader.md'
This commit is contained in:
parent
e41440c414
commit
08ddead068
@ -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 ➜ 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
|
||||
|
||||
<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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user