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

This commit is contained in:
Translator 2025-08-05 00:34:09 +00:00
parent ad596f971b
commit 9f5b2ccebc

View File

@ -4,78 +4,125 @@
## DOM Invader
DOM Invader ni chombo cha kivinjari kilichosakinishwa katika kivinjari cha ndani cha Burp. Kinasaidia katika **kubaini udhaifu wa DOM XSS** kwa kutumia vyanzo na visinki mbalimbali, ikiwa ni pamoja na ujumbe wa wavuti na uchafuzi wa prototype. Chombo hiki kimewekwa awali kama nyongeza.
DOM Invader ni chombo cha kivinjari kilichowekwa kwenye **kivinjari cha Chromium kilichojumuishwa cha Burp Suite**. Inasaidia katika **kubaini DOM XSS na udhaifu mwingine wa upande wa mteja** (uchafuzi wa prototype, DOM clobbering, n.k.) kwa kujiendesha kiotomatiki **kuweka vifaa vya JavaScript na vyanzo**. Kiongezeo hiki kinakuja na Burp na kinahitaji tu kuwezeshwa.
DOM Invader inaunganisha kichupo ndani ya paneli ya DevTools ya kivinjari ikiruhusu yafuatayo:
DOM Invader inaongeza kichupo kwenye paneli ya DevTools ya kivinjari ambayo inakuwezesha:
1. **Utambuzi wa visinki vinavyoweza kudhibitiwa** kwenye ukurasa wa wavuti kwa ajili ya upimaji wa DOM XSS, ikitoa muktadha na maelezo ya kusafisha.
2. **Kurekodi, kuhariri, na kutuma tena ujumbe wa wavuti** uliopelekwa kupitia njia ya `postMessage()` kwa ajili ya upimaji wa DOM XSS. DOM Invader pia inaweza kugundua udhaifu kiotomatiki kwa kutumia ujumbe wa wavuti ulioandaliwa kwa njia maalum.
3. Kugundua **vyanzo vya uchafuzi wa prototype upande wa mteja** na kuskanisha vifaa vinavyoweza kudhibitiwa vilivyopelekwa kwa visinki hatari.
4. Utambuzi wa **udhaifu wa DOM clobbering**.
1. **Tambua vyanzo vinavyoweza kudhibitiwa** kwa wakati halisi, ikiwa ni pamoja na muktadha (attribute, HTML, URL, JS) na usafi uliofanywa.
2. **Rekodi, hariri na tuma tena `postMessage()` ujumbe wa wavuti**, au acha kiongezeo kibadilishe moja kwa moja.
3. **Gundua vyanzo vya uchafuzi wa prototype wa upande wa mteja na scan kwa minyororo ya gadget→sink**, ikitengeneza PoCs kwa wakati.
4. **Pata mwelekeo wa DOM clobbering** (mfano `id` / `name` migongano inayofuta mabadiliko ya kimataifa).
5. **Boresha tabia** kupitia UI tajiri ya Mipangilio (canary maalum, auto-injection, kuzuia upitishaji, orodha za vyanzo/vyanzo, n.k.).
### Wezesha
---
Katika kivinjari cha ndani cha Burp nenda kwenye **Burp extension** na uweke:
### 1. Wezesha
<figure><img src="../../images/image (1129).png" alt=""><figcaption></figcaption></figure>
Sasa refresh ukurasa na katika **Dev Tools** utaona **DOM Invader tab:**
1. Fungua **Proxy ➜ Intercept ➜ Open Browser** (kivinjari kilichojumuishwa cha Burp).
2. Bonyeza nembo ya **Burp Suite** (juu-kulia). Ikiwa imefichwa, bonyeza kipande cha puzzle kwanza.
3. Katika kichupo cha **DOM Invader**, geuza **Enable DOM Invader** kuwa ON na bonyeza **Reload**.
4. Fungua DevTools ( `F12` / Bonyeza-kulia ➜ Inspect ) na uweke. Paneli mpya ya **DOM Invader** inaonekana.
<figure><img src="../../images/image (695).png" alt=""><figcaption></figcaption></figure>
> Burp inakumbuka hali kwa kila wasifu. Zima chini ya *Settings ➜ Tools ➜ Burps browser ➜ Store settings...* ikiwa inahitajika.
### Ingiza Canary
### 2. Ingiza Canary
Katika picha ya awali unaweza kuona **kikundi cha herufi za nasibu, hiyo ndiyo Canary**. Sasa unapaswa kuanza **kuingiza** katika sehemu tofauti za wavuti (params, fomu, url...) na kila wakati bonyeza kutafuta. DOM Invader itakagua kama **canary imeishia katika sink yoyote ya kuvutia** ambayo inaweza kutumika.
**Canary** ni mfuatano wa alama wa nasibu (mfano `xh9XKYlV`) ambao DOM Invader inafuatilia. Unaweza:
Zaidi ya hayo, chaguo **Inject URL params** na Inject forms zitafungua kiotomatiki **kichupo kipya** **kikiingiza** **canary** katika kila **param** ya **URL** na **fomu** inayoipata.
* **Nakili** na kuingiza kwa mikono katika vigezo, fomu, fremu za Web-Socket, ujumbe wa wavuti, n.k.
* Tumia **Inject URL params / Inject forms** vifungo kufungua kichupo kipya ambapo canary inaongezwa kwa kila ufunguo wa swali/key au uwanja wa fomu kiotomatiki.
* Tafuta **canary tupu** ili kufichua vyanzo vyote bila kujali uwezekano wa kutumia (nzuri kwa upelelezi).
### Ingiza Canary tupu
#### Canary maalum (2025+)
Ikiwa unataka tu kutafuta visinki vya uwezekano ambavyo ukurasa unaweza kuwa navyo, hata kama havitumiwi, unaweza **kutafuta canary tupu**.
Burp 2024.12 ilianzisha **Mipangilio ya Canary** (Burp-logo ➜ DOM Invader ➜ Canary). Unaweza:
### Ujumbe wa Post
* **Randomize** au kuweka **mfuatano maalum** (inasaidia kwa majaribio ya tab nyingi au wakati thamani ya chaguo-msingi inajitokeza kwa asili kwenye ukurasa).
* **Nakili** thamani kwenye clipboard.
* Mabadiliko yanahitaji **Reload**.
DOM Invader inaruhusu upimaji wa DOM XSS kwa kutumia ujumbe wa wavuti wenye vipengele kama:
---
1. **Kurekodi ujumbe wa wavuti** uliopelekwa kupitia `postMessage()`, kama historia ya ombi/jibu la HTTP ya Burp Proxy.
2. **Mabadiliko** na **kupeleka tena** ujumbe wa wavuti ili kupima kwa mikono DOM XSS, sawa na kazi ya Burp Repeater.
3. **Mabadiliko ya kiotomatiki** na kutuma ujumbe wa wavuti kwa ajili ya kuchunguza DOM XSS.
### 3. Ujumbe wa wavuti (`postMessage`)
#### Maelezo ya ujumbe
Kichupo cha **Messages** kinarekodi kila wito wa `window.postMessage()`, kikionyesha matumizi ya `origin`, `source`, na `data`.
Maelezo ya kina yanaweza kuonekana kuhusu kila ujumbe kwa kubonyeza juu yake, ambayo inajumuisha ikiwa JavaScript ya upande wa mteja inapata mali za `origin`, `data`, au `source` za ujumbe.
**Badilisha & tuma tena**: bonyeza mara mbili ujumbe, hariri `data`, na bonyeza **Send** (kama Burp Repeater).
- **`origin`** : Ikiwa **taarifa ya asili ya ujumbe haijakaguliwa**, unaweza kuwa na uwezo wa kutuma ujumbe wa kuvuka asili kwa mpangaji wa tukio **kutoka kwa kikoa chochote cha nje**. Lakini ikiwa imekaguliwa bado inaweza kuwa isiyo salama.
- **`data`**: Hapa ndipo mzigo unatumwa. Ikiwa data hii haitumiki, sink haitakuwa na maana.
- **`source`**: Inakadiria ikiwa mali ya chanzo, ambayo kawaida inarejelea iframe, inathibitishwa badala ya asili. Hata kama hii imekaguliwa, haihakikishi kwamba uthibitisho hauwezi kupuuziliwa mbali.
**Auto-fuzz**: wezesha **Postmessage interception ➜ Auto-mutate** kwenye mipangilio ili kuruhusu DOM Invader kutengeneza payloads za msingi wa canary na kuzireplay kwa handler.
#### Jibu ujumbe
Muhtasari wa maana ya uwanja:
1. Kutoka kwenye mtazamo wa **Messages**, bonyeza ujumbe wowote kufungua kidirisha cha maelezo ya ujumbe.
2. Hariri uwanja wa **Data** kama inavyohitajika.
3. Bonyeza **Send**.
* **origin** ikiwa handler inathibitisha `event.origin`.
* **data** eneo la payload. Ikiwa halitumiki, sink si muhimu.
* **source** uthibitisho wa marejeleo ya iframe / dirisha; mara nyingi dhaifu kuliko ukaguzi wa asili mkali.
### Uchafuzi wa Prototype
---
DOM Invader pia inaweza kutafuta **udhaifu wa Uchafuzi wa Prototype**. Kwanza, unahitaji kuuwezesha:
### 4. Uchafuzi wa Prototype
<figure><img src="../../images/image (1026).png" alt=""><figcaption></figcaption></figure>
Wezesha chini ya **Settings ➜ Attack types ➜ Prototype pollution**.
Kisha, itatafuta **vyanzo** vinavyokuwezesha kuongeza mali zisizo za kawaida kwenye **`Object.prototype`**.
Mchakato:
1. **Browse** DOM Invader inabaini uchafuzi **vyanzo** (`__proto__`, `constructor`, `prototype`) vilivyopatikana katika URL/query/hash au ujumbe wa JSON wa wavuti.
2. **Test** bonyeza *Test* kufungua kichupo cha PoC ambapo `Object.prototype.testproperty` inapaswa kuwepo:
Ikiwa kitu chochote kimepatikana kitakuwa na **Test** kitufe ku **jaribu chanzo kilichopatikana**. Bonyeza juu yake, kichupo kipya kitaonekana, tengeneza kitu kwenye console na angalia ikiwa `testproperty` inapatikana:
```javascript
let b = {}
b.testproperty
let obj = {};
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
```
Mara tu unapopata chanzo unaweza **kuchunguza kwa gadget**:
3. **Scan for gadgets** DOM Invader inajaribu majina ya mali na kufuatilia ikiwa yoyote inamalizika kwenye vyanzo hatari (mfano `innerHTML`).
4. **Exploit** wakati minyororo ya gadget-sink inapatikana, kitufe cha *Exploit* kinaonekana kinachounganisha chanzo + gadget + sink ili kuanzisha tahadhari.
1. Kichupo kipya kinafunguliwa na DOM Invader wakati kitufe cha **Scan for gadgets**, ambacho kinaweza kupatikana karibu na chanzo chochote kilichotambuliwa cha uchafuzi wa prototype katika mtazamo wa **DOM**, kinapobonyezwa. Uchunguzi wa gadgets zinazofaa huanza.
2. Wakati huo huo, katika kichupo hicho hicho, kichupo cha **DOM Invader** kinapaswa kufunguliwa katika paneli ya DevTools. Baada ya uchunguzi kukamilika, vyanzo vyovyote vinavyopatikana kupitia gadgets zilizotambuliwa vinaonyeshwa katika mtazamo wa **DOM**. Kwa mfano, mali ya gadget inayoitwa `html` inayopitishwa kwa sink ya `innerHTML` inaonyeshwa katika mfano hapa chini.
Mipangilio ya juu (ikoni ya cog):
## DOM clobbering
* **Ondoa CSP / X-Frame-Options** ili kuweka iframes zikiwa na kazi wakati wa skanning ya gadget.
* **Scan techniques in separate frames** ili kuepuka kuingiliana kwa `__proto__` dhidi ya `constructor`.
* **Zima mbinu** moja kwa moja kwa programu dhaifu.
Katika picha iliyopita inawezekana kuona kwamba uchunguzi wa DOM clobbering unaweza kuwashwa. Mara tu inavyokamilika, **DOM Invader itaanza kutafuta udhaifu wa DOM clobbering**.
---
### 5. DOM Clobbering
Geuza **Attack types ➜ DOM clobbering**. DOM Invader inafuatilia vipengele vilivyoundwa kwa nguvu ambavyo `id`/`name` attributes vinagongana na mabadiliko ya kimataifa au vitu vya fomu (`<input name="location">` → inafuta `window.location`). Kuingia kunatolewa kila wakati muundo unaodhibitiwa na mtumiaji unapelekea kubadilishwa kwa mabadiliko.
---
## 6. Muonekano wa Mipangilio (2025)
DOM Invader sasa imegawanywa katika makundi ya **Main / Attack Types / Misc / Canary**.
1. **Main**
* **Enable DOM Invader** swichi ya kimataifa.
* **Postmessage interception** wezesha/kuzima urekodi wa ujumbe; sub-toggles kwa auto-mutation.
* **Custom Sources/Sinks** *ikoni ya cog* ➜ wezesha/zima vyanzo maalum (mfano `eval`, `setAttribute`) ambavyo vinaweza kuvunja programu.
2. **Attack Types**
* **Prototype pollution** (ikiwa na mipangilio ya mbinu).
* **DOM clobbering**.
3. **Misc**
* **Redirect prevention** zuia upitishaji wa upande wa mteja ili orodha ya sink isipotee.
* **Breakpoint before redirect** simamisha JS kabla ya upitishaji kwa ukaguzi wa call-stack.
* **Inject canary into all sources** auto-inject canary kila mahali; orodha ya vyanzo/vigezo inayoweza kubadilishwa.
4. **Canary**
* Tazama / randomize / weka canary maalum; nakili kwenye clipboard. Mabadiliko yanahitaji upya wa kivinjari.
---
### 7. Vidokezo & Mazoea Mazuri
* **Tumia canary tofauti** epuka mfuatano wa kawaida kama `test`, vinginevyo kutakuwa na matokeo ya uwongo.
* **Zima vyanzo vizito** (`eval`, `innerHTML`) kwa muda ikiwa vinavunja kazi ya ukurasa wakati wa urambazaji.
* **Changanya na Burp Repeater & Proxy** rudia ombi/jibu la kivinjari ambalo lilisababisha hali yenye udhaifu na tengeneza URL za mwisho za exploit.
* **Kumbuka upeo wa fremu** vyanzo/vyanzo vinaonyeshwa kwa kila muktadha wa urambazaji; udhaifu ndani ya iframes unaweza kuhitaji umakini wa mikono.
* **Export evidence** bonyeza-kulia paneli ya DOM Invader ➜ *Save screenshot* ili kujumuisha katika ripoti.
---
## Marejeleo
@ -85,5 +132,7 @@ Katika picha iliyopita inawezekana kuona kwamba uchunguzi wa DOM clobbering unaw
- [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}}