Dom Clobbering
Misingi
Inawezekana kuzalisha variables za kikoa za kawaida ndani ya muktadha wa JS kwa kutumia sifa id
na name
kwenye vitambulisho vya HTML.
Ni vipengele fulani tu vinavyoweza kutumia sifa ya jina kuathiri globals, ni: embed
, form
, iframe
, image
, img
na object
.
Kwa kushangaza, unapotumia kipengele cha fomu kuathiri kipengele, utapata thamani ya toString
ya kipengele lenyewe: [object HTMLFormElement]
lakini na kiungo cha toString
itakuwa href
ya kiungo. Kwa hiyo, ikiwa unatumia tag ya a
, unaweza kudhibiti thamani wakati inachukuliwa kama herufi:
Mafurushi na Vipengele
Pia ni inawezekana kuchafua mafurushi na vipengele vya vitu:
Kwa kufuta sifa ya 3 (kwa mfano x.y.z), unahitaji kutumia form
:
Kuweka alama zaidi ni ngumu zaidi lakini bado inawezekana, kwa kutumia iframes:
Tagi ya mtindo hutumiwa kutoa muda wa kutosha kwa kiolesura cha iframe kuonyesha. Bila hiyo, utapata onyo la "isiyofafanuliwa".
Ili kufunika sifa za kina zaidi, unaweza kutumia iframes na uandishi wa HTML kwa njia hii:
Kuvuka Kichujio
Ikiwa kichujio kinapitia mali za kipengee kwa kutumia kitu kama document.getElementByID('x').attributes
, unaweza kuvuka mali ya .attributes
na kuvunja kichujio. Mali nyingine za DOM kama tagName
, nodeName
au parentNode
na zingine zinaweza pia kuvukwa.
Kuweka window.someObject
window.someObject
Katika JavaScript ni kawaida kupata:
Kuathiri HTML kwenye ukurasa kunaruhusu kubadilisha someObject
na kipengele cha DOM, kinachoweza kuleta udhaifu wa usalama. Kwa mfano, unaweza kubadilisha someObject
na kipengele cha kiungo kinachoelekeza kwenye hati ya kudhuru:
Katika kificho kinachoweza kudhurika kama:
Mbinu hii inatumia chanzo cha skripti kuendesha nambari isiyo hitajika.
Hila: DOMPurify
inakuwezesha kutumia itifaki ya cid:
, ambayo haitoi URL-encode alama za nukuu mara mbili. Hii inamaanisha unaweza kuingiza alama ya nukuu iliyofichwa ambayo itadecode wakati wa runtime. Kwa hivyo, kuingiza kitu kama <a id=defaultAvatar><a id=defaultAvatar name=avatar href="cid:"onerror=alert(1)//">
kutafanya HTML encoded "
idecode wakati wa runtime na kutoroka kutoka kwa thamani ya sifa ili kuunda tukio la onerror
.
Tekniki nyingine inatumia kipengele cha form
. Maktaba fulani za upande wa mteja huchunguza sifa za kipengele cha fomu kilichoundwa hivi karibuni ili kuzisafisha. Walakini, kwa kuongeza input
na id=attributes
ndani ya fomu, unaweza kubadilisha mali ya sifa, kuzuia sanitizer kufikia sifa halisi.
Unaweza kupata mfano wa aina hii ya clobbering katika hii CTF writeup.
Kuchafua kipengele cha hati
Kulingana na nyaraka, ni rahisi kubadilisha sifa za kipengele cha hati kwa kutumia DOM Clobbering:
Kiolesura cha Hati kinasaidia mali zilizo na majina. Majina ya mali yaliyosaidiwa ya kipengele cha Hati wakati wowote yanajumuisha yafuatayo, kwa mpangilio wa mti kulingana na kipengele kilichochangia, ikipuuza nakala zinazofuata, na na thamani kutoka kwa sifa za id zinazokuja kabla ya thamani kutoka kwa sifa za jina wakati kipengele kimoja kinachangia vyote viwili:
- Thamani ya sifa ya yaliyomo ya jina kwa vifaa vyote vilivyofichuliwa vya embed, form, iframe, img, na vifaa vilivyofichuliwa vya object ambavyo vina sifa ya yaliyomo ya jina isiyo tupu na viko katika mti wa hati na hati kama mizizi yao; - Thamani ya sifa ya yaliyomo ya id kwa vifaa vyote vilivyofichuliwa vya object ambavyo vina sifa ya yaliyomo ya id isiyo tupu na viko katika mti wa hati na hati kama mizizi yao; - Thamani ya sifa ya yaliyomo ya id kwa vifaa vyote vya img ambavyo vina sifa ya yaliyomo ya id isiyo tupu na sifa ya yaliyomo ya jina isiyo tupu, na viko katika mti wa hati na hati kama mizizi.
Kwa kutumia mbinu hii, unaweza kubadilisha thamani za kawaida kama document.cookie
, document.body
, document.children
, na hata njia katika kiolesura cha Hati kama document.querySelector
.
Kuandika baada ya kufuta kipengele
Matokeo ya wito wa document.getElementById()
na document.querySelector()
yanaweza kubadilishwa kwa kuingiza lebo ya <html>
au <body>
na sifa sawa ya kitambulisho. Hapa ndipo jinsi inavyoweza kufanywa:
Zaidi ya hayo, kwa kutumia mitindo kuificha HTML/injini za mwili zilizoingizwa hizi, kuingiliwa na maandishi mengine katika innerText
kunaweza kuzuiwa, hivyo kuongeza ufanisi wa shambulio:
Uchunguzi katika SVG ulifunua kuwa lebo ya <body>
inaweza kutumiwa kwa ufanisi:
Kwa lebo ya HTML kufanya kazi ndani ya SVG kwenye vivinjari kama Chrome na Firefox, lebo ya <foreignobject>
ni muhimu:
Kuziba Fomu
Inawezekana kuongeza vipengele vipya ndani ya fomu kwa tu kutaja sifa ya form
ndani ya baadhi ya vitambulisho. Unaweza kutumia hii kuongeza thamani mpya ndani ya fomu na hata kuongeza kitufe kipya cha kupeleka (clickjacking au kutumia baadhi ya msimbo wa JS wa .click()
):
Kwa aina zaidi ya fomu katika kitufe hiki.
Marejeo
Heyes, Gareth. JavaScript kwa wadukuzi: Jifunze kufikiri kama mdukuzi.
Last updated