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

This commit is contained in:
Translator 2025-08-05 00:36:02 +00:00
parent bb653f6097
commit 3241573012

View File

@ -4,78 +4,125 @@
## DOM Invader ## DOM Invader
DOM Invader is 'n blaartoepassing wat in Burp se ingeboude blaarder geïnstalleer is. Dit help met **die opsporing van DOM XSS kwesbaarhede** deur verskeie bronne en sinke, insluitend webboodskappe en prototipe besoedeling. Die hulpmiddel is vooraf geïnstalleer as 'n uitbreiding. DOM Invader is 'n blaaiertool wat geïnstalleer is in **Burp Suite se ingeboude Chromium-blaaier**. Dit help met **die opsporing van DOM XSS en ander kliënt-kant kwesbaarhede** (prototipe besoedeling, DOM klobbering, ens.) deur outomaties **JavaScript bronne en sinke te instrumenteer**. Die uitbreiding word saam met Burp gestuur en moet net geaktiveer word.
DOM Invader integreer 'n oortjie binne die blaarder se DevTools-paneel wat die volgende moontlik maak: DOM Invader voeg 'n oortjie by die blaaiers se DevTools-paneel wat jou toelaat om:
1. **Identifikasie van beheerde sinke** op 'n webblad vir DOM XSS toetsing, wat konteks en sanitasiedetails verskaf. 1. **Beheersbare sinke** in werklike tyd te identifiseer, insluitend konteks (attribuut, HTML, URL, JS) en toegepaste sanitasie.
2. **Teken, redigeer en stuur webboodskappe weer** wat via die `postMessage()` metode gestuur is vir DOM XSS toetsing. DOM Invader kan ook outomaties kwesbaarhede opspoor deur spesiaal saamgestelde webboodskappe te gebruik. 2. **Log, redigeer en stuur weer `postMessage()` web-boodskappe**, of laat die uitbreiding hulle outomaties verander.
3. Opsporing van **klantkant prototipe besoedeling** bronne en skandering van beheerde gadgets wat na riskante sinke gestuur word. 3. **Kliënt-kant prototipe-besoedeling bronne opspoor en skandeer vir gadget→sink kettings**, wat PoCs on-the-fly genereer.
4. Identifikasie van **DOM klobbering kwesbaarhede**. 4. **Vind DOM klobbering vektore** (bv. `id` / `name` botsings wat globale veranderlikes oorskryf).
5. **Fynstel gedrag** via 'n ryk Instellings UI (aangepaste kanarie, outo-inspuiting, herleiding blokkering, bron/sink lyste, ens.).
### Aktiveer Dit ---
In Burp se ingeboude blaarder, gaan na die **Burp uitbreiding** en aktiveer dit: ### 1. Aktiveer dit
<figure><img src="../../images/image (1129).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../images/image (1129).png" alt=""><figcaption></figcaption></figure>
Nou verfris die bladsy en in die **Dev Tools** sal jy die **DOM Invader oortjie** vind: 1. Maak **Proxy ➜ Intercept ➜ Open Browser** (Burp se ingebedde blaaiert).
2. Klik op die **Burp Suite** logo (bo-regs). As dit versteek is, klik eers op die legkaartstuk.
3. In die **DOM Invader** oortjie, skakel **Enable DOM Invader** AAN en druk **Reload**.
4. Maak DevTools oop ( `F12` / Regsklik ➜ Inspekteer ) en dock dit. 'n Nuwe **DOM Invader** paneel verskyn.
<figure><img src="../../images/image (695).png" alt=""><figcaption></figcaption></figure> > Burp onthou die toestand per profiel. Deaktiveer dit onder *Instellings ➜ Gereedskap ➜ Burp se blaaiert ➜ Stoor instellings...* indien nodig.
### Injeksie van 'n Kanarie ### 2. Inspuit 'n Kanarie
In die vorige beeld kan jy 'n **random groep karakters sien, dit is die Kanarie**. Jy moet nou begin **injeksie** daarvan in verskillende dele van die web (params, vorms, url...) en elke keer op soek klik. DOM Invader sal kyk of die **kanarie in enige interessante sink geëindig het** wat uitgebuit kan word. 'n **kanarie** is 'n ewekansige merkstring (bv. `xh9XKYlV`) wat DOM Invader volg. Jy kan:
Boonop sal die opsies **Injek URL params** en **Injek vorms** outomaties 'n **nuwe oortjie** **injeksie** van die **kanarie** in elke **URL** param en **vorm** wat dit vind, oopmaak. * **Kopieer** dit en handmatig inspuit in parameters, vorms, Web-Socket rame, web-boodskappe, ens.
* Gebruik **Inject URL params / Inject forms** knoppies om 'n nuwe oortjie te open waar die kanarie outomaties by elke navraag sleutel/waarde of vorm veld gevoeg word.
* Soek vir 'n **leë kanarie** om alle sinke te onthul ongeag van eksploitabiliteit (groot vir verkenning).
### Injeksie van 'n leë Kanarie #### Aangepaste kanarie (2025+)
As jy net potensiële sinke wil vind wat die bladsy mag hê, selfs al is hulle nie uitbuitbaar nie, kan jy **soek na 'n leë kanarie**. Burp 2024.12 het **Kanarie instellings** bekendgestel (Burp-logo ➜ DOM Invader ➜ Kanarie). Jy kan:
### Post Boodskappe * **Ewekansig maak** of 'n **aangepaste string** stel (nuttig vir multi-oortjie toetsing of wanneer die standaardwaarde natuurlik op die bladsy verskyn).
* **Kopieer** die waarde na die klembord.
* Veranderinge vereis **Reload**.
DOM Invader laat toetsing van DOM XSS toe deur webboodskappe met funksies soos: ---
1. **Teken webboodskappe** wat via `postMessage()` gestuur is, soortgelyk aan Burp Proxy se HTTP versoek/antwoord geskiedenis. ### 3. Web-boodskappe (`postMessage`)
2. **Wysiging** en **heruitreiking** van webboodskappe om handmatig vir DOM XSS te toets, soortgelyk aan Burp Repeater se funksie.
3. **Outomatiese verandering** en sending van webboodskappe vir die ondersoek van DOM XSS.
#### Boodskap besonderhede Die **Boodskappe** sub-oortjie registreer elke `window.postMessage()` oproep, wat `origin`, `source`, en `data` gebruik toon.
Gedetailleerde inligting kan oor elke boodskap gesien word deur daarop te klik, wat insluit of die klantkant JavaScript die `origin`, `data`, of `source` eienskappe van die boodskap benader. **Wysig & stuur weer**: dubbelklik op 'n boodskap, redigeer `data`, en druk **Stuur** (soos Burp Repeater).
- **`origin`** : As die **oorsprong inligting van die boodskap nie nagegaan word nie**, mag jy in staat wees om kruis-oorsprong boodskappe na die gebeurtenis handler **van 'n arbitrêre eksterne domein** te stuur. Maar as dit nagegaan word, kan dit steeds onveilig wees. **Auto-fuzz**: aktiveer **Postmessage interception ➜ Auto-mutate** in instellings om DOM Invader toe te laat om kanarie-gebaseerde payloads te genereer en hulle aan die handler te herhaal.
- **`data`**: Dit is waar die payload gestuur word. As hierdie data nie gebruik word nie, is die sink nutteloos.
- **`source`**: Evalueer of die bron eienskap, wat gewoonlik na 'n iframe verwys, gevalideer word in plaas van die oorsprong. Selfs as dit nagegaan word, verseker dit nie dat die validasie omseil kan word nie.
#### Antwoord 'n boodskap Veld betekenis opsomming:
1. Van die **Boodskappe** sien, klik op enige boodskap om die boodskap besonderhede dialoog te open. * **origin** of die handler `event.origin` valideer.
2. Wysig die **Data** veld soos benodig. * **data** payload ligging. As ongebruik, is die sink irrelevant.
3. Klik **Stuur**. * **source** iframe / venster verwysing validasie; dikwels swakker as streng oorsprong kontrole.
### Prototipe Besoedeling ---
DOM Invader kan ook soek na **Prototipe Besoedeling kwesbaarhede**. Eerstens, jy moet dit aktiveer: ### 4. Prototipe Besoedeling
<figure><img src="../../images/image (1026).png" alt=""><figcaption></figcaption></figure> Aktiveer onder **Instellings ➜ Aanval tipes ➜ Prototipe besoedeling**.
Dan, dit sal **soek na bronne** wat jou in staat stel om arbitrêre eienskappe aan die **`Object.prototype`** toe te voeg. Werkvloei:
1. **Blaai** DOM Invader merk besoedeling **bronne** (`__proto__`, `constructor`, `prototype`) wat in URL/navraag/hash of JSON web-boodskappe gevind word.
2. **Toets** klik *Toets* om 'n PoC oortjie te open waar `Object.prototype.testproperty` moet bestaan:
As iets gevind word, sal 'n **Toets** knoppie verskyn om **die gevonde bron te toets**. Klik daarop, 'n nuwe oortjie sal verskyn, skep 'n objek in die konsole en kyk of die `testproperty` bestaan:
```javascript ```javascript
let b = {} let obj = {};
b.testproperty console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
``` ```
Sodra jy 'n bron gevind het, kan jy **scan vir 'n gadget**: 3. **Skandeer vir gadgets** DOM Invader brute-force eienskap name en volg of enige in gevaarlike sinke eindig (bv. `innerHTML`).
4. **Eksploiteer** wanneer 'n gadget-sink ketting gevind word, verskyn 'n *Eksploiteer* knoppie wat bron + gadget + sink ketting om 'n waarskuwing te aktiveer.
1. 'n Nuwe oortjie word deur DOM Invader geopen wanneer die **Scan for gadgets** knoppie, wat langs enige geïdentifiseerde prototipe besoedeling bron in die **DOM**-weergave gevind kan word, geklik word. Die skandering vir geskikte gadgets begin dan. Geavanceerde instellings (rat ikon):
2. Intussen, in dieselfde oortjie, moet die **DOM Invader** oortjie in die DevTools-paneel geopen wees. Nadat die skandering voltooi is, word enige sinke wat via die geïdentifiseerde gadgets toeganklik is, in die **DOM**-weergave vertoon. Byvoorbeeld, 'n gadget eienskap genaamd `html` wat aan die `innerHTML` sink oorgedra word, word in die onderstaande voorbeeld getoon.
## DOM klobbering * **Verwyder CSP / X-Frame-Options** om iframes werkbaar te hou tydens gadget skandering.
* **Skandeer tegnieke in aparte rame** om `__proto__` teen `constructor` interferensie te vermy.
* **Deaktiveer tegnieke** individueel vir brose toepassings.
In die vorige beeld is dit moontlik om te sien dat die DOM klobbering skandering aangeskakel kan word. Sodra dit gedoen is, **sal DOM Invader begin soek na DOM klobbering kwesbaarhede**. ---
### 5. DOM Klobbering
Skakel **Aanval tipes ➜ DOM klobbering** aan. DOM Invader monitor dinamies geskepte elemente wie se `id`/`name` attribuut met globale veranderlikes of vormobjekte bots (bv. `<input name="location">` → klobber `window.location`). 'n Inskrywing word geproduseer wanneer gebruikersbeheerde markup tot veranderlike vervanging lei.
---
## 6. Instellings Oorsig (2025)
DOM Invader is nou verdeel in **Hoof / Aanval Tipes / Divers / Kanarie** kategorieë.
1. **Hoof**
* **Enable DOM Invader** globale skakel.
* **Postmessage interception** skakel boodskaplogging aan/af; sub-skakelaars vir outo-mutasie.
* **Aangepaste Bronne/Sinke** *rat ikon* ➜ aktiveer/deaktiveer spesifieke sinke (bv. `eval`, `setAttribute`) wat die toepassing kan breek.
2. **Aanval Tipes**
* **Prototipe besoedeling** (met per-tegniek instellings).
* **DOM klobbering**.
3. **Divers**
* **Herleiding voorkoming** blokkeer kliënt-kant herleidings sodat die sink lys nie verlore gaan nie.
* **Breakpoint voor herleiding** pauzeer JS net voor herleiding vir oproep-stapel inspeksie.
* **Inspuit kanarie in alle bronne** auto-inspuit kanarie oral; konfigureerbare bron/parameter toelaat lys.
4. **Kanarie**
* Beskou / ewekansig maak / stel aangepaste kanarie; kopieer na klembord. Veranderinge vereis blaaiert herlaai.
---
### 7. Wenke & Goeie Praktyke
* **Gebruik 'n duidelike kanarie** vermy algemene stringe soos `test`, anders gebeur vals positiewe.
* **Deaktiveer swaar sinke** (`eval`, `innerHTML`) tydelik as hulle bladsy funksionaliteit breek tydens navigasie.
* **Kombineer met Burp Repeater & Proxy** repliseer die blaaiervraag/antwoord wat 'n kwesbare toestand geproduseer het en skep finale eksploit URL's.
* **Onthou raam omvang** bronne/sinke word per blaai kontekst vertoon; kwesbaarhede binne iframes mag handmatige fokus benodig.
* **Eksporteer bewyse** regsklik die DOM Invader paneel ➜ *Stoor skermskoot* om in verslae in te sluit.
---
## Verwysings ## Verwysings
@ -85,5 +132,7 @@ In die vorige beeld is dit moontlik om te sien dat die DOM klobbering skandering
- [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/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/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/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}} {{#include ../../banners/hacktricks-training.md}}