# Dom Clobbering {{#include ../../banners/hacktricks-training.md}} ## **Msingi** Inawezekana kuunda **mabadiliko ya kimataifa ndani ya muktadha wa JS** kwa kutumia sifa **`id`** na **`name`** katika vitambulisho vya HTML. ```html
``` **Tu** vipengele fulani tu vinaweza kutumia **sifa ya jina** ili kuharibu globals, ni: `embed`, `form`, `iframe`, `image`, `img` na `object`. Kwa kushangaza, unapokuwa unatumia **kipengele cha fomu** ku **haribu** variable, utapata **`toString`** ya kipengele chenyewe: `[object HTMLFormElement]` lakini kwa **kiungo** **`toString`** itakuwa **`href`** ya kiungo. Hivyo, ikiwa uta **haribu** kwa kutumia **`a`** tag, unaweza **kontroli** **thamani** wakati inachukuliwa kama **string**: ```html ``` ### Arrays & Attributes Inawezekana pia **kuharibu array** na **sifa za kitu**: ```html ``` Ili kubadilisha **sifa ya 3rd** (mfano x.y.z), unahitaji kutumia **`form`**: ```html
``` Kukandamiza sifa zaidi ni **ngumu zaidi lakini bado inawezekana**, kwa kutumia iframes: ```html ``` > [!WARNING] > Tag ya style inatumika kutoa **muda wa kutosha kwa iframe kuonyesha**. Bila yake utaona arifa ya **undefined**. Ili kuharibu sifa za ndani zaidi, unaweza kutumia **iframes zenye uandishi wa html** hivi: ```html ``` ### **Kupita Kichujio** Ikiwa kichujio kina **zunguka** kupitia **mali** za nodi kwa kutumia kitu kama `document.getElementByID('x').attributes` unaweza **kuharibu** mali **`.attributes`** na **kuvunja kichujio**. Mali nyingine za DOM kama **`tagName`**, **`nodeName`** au **`parentNode`** na zaidi pia zinaweza **kuharibiwa**. ```html
``` ## **Clobbering `window.someObject`** Katika JavaScript ni kawaida kupata: ```javascript var someObject = window.someObject || {} ``` Kuharibu HTML kwenye ukurasa kunaruhusu kubadilisha `someObject` na nodi ya DOM, ambayo inaweza kuleta udhaifu wa usalama. Kwa mfano, unaweza kubadilisha `someObject` na kipengele cha kiungo kinachorejelea skripti mbaya: ```html ``` Katika msimbo unaoweza kuathiriwa kama: ```html ``` Hii mbinu inatumia chanzo cha script kutekeleza msimbo usiotakikana. **Hila**: **`DOMPurify`** inakuwezesha kutumia **`cid:`** itifaki, ambayo **haiwezi kuandika URL kwa alama za nukuu mbili**. Hii inamaanisha unaweza **kuingiza alama ya nukuu mbili iliyowekwa ambayo itafutwa wakati wa utekelezaji**. Hivyo, kuingiza kitu kama **``** kutaifanya HTML iliyowekwa `"` kuwa **futwa wakati wa utekelezaji** na **kuondoka** kutoka kwa thamani ya sifa ili **kuunda** tukio la **`onerror`**. Mbinu nyingine inatumia kipengele cha **`form`**. Maktaba fulani za upande wa mteja zinakagua sifa za kipengele kipya cha fomu ili kuzisafisha. Hata hivyo, kwa kuongeza `input` yenye `id=attributes` ndani ya fomu, unabadilisha kwa ufanisi mali za sifa, kuzuia sanitizer kufikia sifa halisi. Unaweza [**kupata mfano wa aina hii ya clobbering katika andiko hili la CTF**](iframes-in-xss-and-csp.md#iframes-in-sop-2). ## Clobbering object ya hati Kulingana na nyaraka, inawezekana kubadilisha sifa za object ya hati kwa kutumia DOM Clobbering: > [Document](https://html.spec.whatwg.org/multipage/dom.html#document) interface [inasaidia mali zenye majina](https://webidl.spec.whatwg.org/#dfn-support-named-properties). [Majina ya mali yanayosaidiwa](https://webidl.spec.whatwg.org/#dfn-supported-property-names) ya [Document](https://html.spec.whatwg.org/multipage/dom.html#document) object hati wakati wowote yanajumuisha yafuatayo, kwa [mpangilio wa mti](https://dom.spec.whatwg.org/#concept-tree-order) kulingana na kipengele kilichochangia, bila kuzingatia nakala za baadaye, na kwa thamani kutoka [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) sifa zikija kabla ya thamani kutoka sifa za jina wakati kipengele kimoja kinachangia zote: > > \- Thamani ya sifa ya maudhui ya jina kwa [exposed](https://html.spec.whatwg.org/multipage/dom.html#exposed) [embed](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-embed-element), [form](https://html.spec.whatwg.org/multipage/forms.html#the-form-element), [iframe](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-iframe-element), [img](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element), na [exposed](https://html.spec.whatwg.org/multipage/dom.html#exposed) [object](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element) vipengele ambavyo vina sifa ya maudhui ya jina isiyo tupu na viko [katika mti wa hati](https://dom.spec.whatwg.org/#in-a-document-tree) na hati kama [mizizi](https://dom.spec.whatwg.org/#concept-tree-root);\ > \ > \- Thamani ya [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) sifa ya maudhui kwa [exposed](https://html.spec.whatwg.org/multipage/dom.html#exposed) [object](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element) vipengele ambavyo vina sifa ya maudhui ya [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) isiyo tupu na viko [katika mti wa hati](https://dom.spec.whatwg.org/#in-a-document-tree) na hati kama [mizizi](https://dom.spec.whatwg.org/#concept-tree-root);\ > \ > \- Thamani ya [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) sifa ya maudhui kwa [img](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element) vipengele ambavyo vina sifa ya maudhui ya [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) isiyo tupu na sifa ya maudhui ya jina isiyo tupu, na viko [katika mti wa hati](https://dom.spec.whatwg.org/#in-a-document-tree) na hati kama [mizizi](https://dom.spec.whatwg.org/#concept-tree-root). Kwa kutumia mbinu hii unaweza kubadilisha **thamani zinazotumika sana kama `document.cookie`, `document.body`, `document.children`**, na hata mbinu katika interface ya Document kama `document.querySelector`. ```javascript document.write("") document.cookie typeof(document.cookie) 'object' //Something more sanitize friendly than a img tag document.write("
") document.cookie HTMLCollection(2) [img, form, cookie: img] typeof(document.cookie) 'object ``` ## Kuandika baada ya kipengele kilichoharibiwa Matokeo ya wito kwa **`document.getElementById()`** na **`document.querySelector()`** yanaweza kubadilishwa kwa kuingiza tag ya `` au `` yenye sifa sawa ya id. Hapa kuna jinsi inavyoweza kufanywa: ```html

clobbered

``` Zaidi ya hayo, kwa kutumia mitindo kuficha hizi lebo za HTML/body zilizowekwa, kuingiliwa kutoka kwa maandiko mengine katika `innerText` kunaweza kuzuiwa, hivyo kuboresha ufanisi wa shambulio: ```html

existing text

clobbered ``` Uchunguzi kuhusu SVG ulibaini kwamba tag `` inaweza pia kutumika kwa ufanisi: ```html clobbered ``` Ili tag ya HTML ifanye kazi ndani ya SVG katika vivinjari kama Chrome na Firefox, tag ya `` inahitajika: ```html clobbered ``` ## Clobbering Forms Ni uwezekano wa kuongeza **ingizo jipya ndani ya fomu** kwa ku **ainisha sifa ya `form`** ndani ya baadhi ya lebo. Unaweza kutumia hii ku **ongeza thamani mpya ndani ya fomu** na hata kuongeza **kitufe kipya** cha **kutuma** (clickjacking au kutumia baadhi ya msimbo wa JS `.click()`): ```html ``` - Kwa maelezo zaidi kuhusu sifa za fomu katika [**button check this**](https://www.w3schools.com/tags/tag_button.asp)**.** ## Marejeleo - [https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering](https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering) - [https://portswigger.net/web-security/dom-based/dom-clobbering](https://portswigger.net/web-security/dom-based/dom-clobbering) - Heyes, Gareth. JavaScript for hackers: Learn to think like a hacker. {{#include ../../banners/hacktricks-training.md}}