DOM XSS

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Udhaifu wa DOM

Udhaifu wa DOM hutokea wakati data kutoka kwenye vyanzo vinavyodhibitiwa na mshambuliaji (kama vile location.search, document.referrer, au document.cookie) inahamishwa kwa sinks bila usalama. Sinks ni kazi au vitu (kwa mfano, eval(), document.body.innerHTML) ambavyo vinaweza kutekeleza au kuonyesha maudhui hatari ikiwa inapewa data yenye nia mbaya.

  • Vyanzo ni pembejeo ambazo zinaweza kudhibitiwa na wadukuzi, ikiwa ni pamoja na URL, vidakuzi, na ujumbe wa wavuti.

  • Sinks ni hatima hatari ambapo data yenye nia mbaya inaweza kusababisha athari mbaya, kama vile utekelezaji wa script.

Hatari inatokea wakati data inatiririka kutoka chanzo hadi sink bila ukaguzi au usafi sahihi, kuruhusu mashambulizi kama XSS.

Unaweza kupata orodha iliyosasishwa zaidi ya vyanzo na sinks katika https://github.com/wisec/domxsswiki/wiki

Vyanzo vya kawaida:

document.URL
document.documentURI
document.URLUnencoded
document.baseURI
location
document.cookie
document.referrer
window.name
history.pushState
history.replaceState
localStorage
sessionStorage
IndexedDB (mozIndexedDB, webkitIndexedDB, msIndexedDB)
Database

Mifereji Maarufu:

jQuery

location

eval()

scriptElement.src

add()

location.host

Function() constructor

scriptElement.text

after()

location.hostname

setTimeout()

scriptElement.textContent

append()

location.href

setInterval()

scriptElement.innerText

animate()

location.pathname

setImmediate()

someDOMElement.setAttribute()

insertAfter()

location.search

execCommand()

someDOMElement.search

insertBefore()

location.protocol

execScript()

someDOMElement.text

before()

location.assign()

msSetImmediate()

someDOMElement.textContent

html()

location.replace()

range.createContextualFragment()

someDOMElement.innerText

prepend()

open()

crypto.generateCRMFRequest()

someDOMElement.outerText

replaceAll()

domElem.srcdoc

someDOMElement.value

replaceWith()

XMLHttpRequest.open()

FileReader.readAsArrayBuffer()

someDOMElement.name

wrap()

XMLHttpRequest.send()

FileReader.readAsBinaryString()

someDOMElement.target

wrapInner()

jQuery.ajax()

FileReader.readAsDataURL()

someDOMElement.method

wrapAll()

$.ajax()

FileReader.readAsText()

someDOMElement.type

has()

FileReader.readAsFile()

someDOMElement.backgroundImage

constructor()

XMLHttpRequest.setRequestHeader()

FileReader.root.getFile()

someDOMElement.cssText

init()

XMLHttpRequest.open()

FileReader.root.getFile()

someDOMElement.codebase

index()

XMLHttpRequest.send()

someDOMElement.innerHTML

jQuery.parseHTML()

jQuery.globalEval()

someDOMElement.href

someDOMElement.outerHTML

$.parseHTML()

$.globalEval()

someDOMElement.src

someDOMElement.insertAdjacentHTML

someDOMElement.action

someDOMElement.onevent

JSON.parse()

sessionStorage.setItem()

document.write()

jQuery.parseJSON()

localStorage.setItem()

document.evaluate()

document.writeln()

$.parseJSON()

**[**`Kukataa Huduma`**](dom-xss.md#denial-of-service)**

someDOMElement.evaluate()

document.title

requestFileSystem()

document.implementation.createHTMLDocument()

document.cookie

RegExp()

document.domain

history.pushState()

history.replaceState()

WebSocket

executeSql()

postMessage()

``

``

Mfereji wa innerHTML haupokei vipengele vya script kwenye kivinjari chochote cha kisasa, wala haifanyi matukio ya svg onload. Hii inamaanisha kuwa utahitaji kutumia vipengele mbadala kama img au iframe.

Aina hii ya XSS inawezekana kuwa ngumu zaidi kupata, kwani unahitaji kutazama ndani ya msimbo wa JS, kuona ikiwa inatumia kitu chochote ambacho thamani yake unadhibiti, na katika kesi hiyo, kuona ikiwa kuna njia yoyote ya kuitumia kutekeleza JS ya kiholela.

Zana za kuzipata

Mifano

Uelekezaji Wazi

Kutoka: https://portswigger.net/web-security/dom-based/open-redirection

Udhaifu wa uelekezaji wazi katika DOM hutokea wakati skripti inaandika data, ambayo mshambuliaji anaweza kuidhibiti, katika mfereji ambao unaweza kuanzisha uelekezaji kati ya vikoa.

Ni muhimu kuelewa kuwa kutekeleza msimbo wa kiholela, kama vile javascript:alert(1), inawezekana ikiwa una udhibiti juu ya mwanzo wa URL ambapo uelekezaji unatokea.

Mifereji:

location
location.host
location.hostname
location.href
location.pathname
location.search
location.protocol
location.assign()
location.replace()
open()
domElem.srcdoc
XMLHttpRequest.open()
XMLHttpRequest.send()
jQuery.ajax()
$.ajax()

Kutoka: https://portswigger.net/web-security/dom-based/cookie-manipulation

Udhaifu wa udhibiti wa cookie unaotegemea DOM hutokea wakati script inajumuisha data, ambayo inaweza kudhibitiwa na mshambuliaji, katika thamani ya cookie. Udhaifu huu unaweza kusababisha tabia isiyotarajiwa ya ukurasa ikiwa cookie inatumika ndani ya tovuti. Zaidi ya hayo, inaweza kutumiwa kutekeleza shambulio la kufikia kikao ikiwa cookie inahusishwa na kufuatilia vikao vya watumiaji. Sink kuu inayohusiana na udhaifu huu ni:

Sink:

document.cookie

Uingizaji wa JavaScript

Kutoka: https://portswigger.net/web-security/dom-based/javascript-injection

Mazingira ya uingizaji wa JavaScript yanayotegemea DOM hutokea wakati script inatekeleza data, ambayo inaweza kudhibitiwa na mshambuliaji, kama nambari ya JavaScript.

Mifereji:

eval()
Function() constructor
setTimeout()
setInterval()
setImmediate()
execCommand()
execScript()
msSetImmediate()
range.createContextualFragment()
crypto.generateCRMFRequest()

Kubadilisha kikoa cha hati

Kutoka: https://portswigger.net/web-security/dom-based/document-domain-manipulation

Mambo yanayoweza kusababisha kushughulikia kikoa cha hati hutokea wakati script inaweka mali ya document.domain kwa kutumia data ambayo mshambuliaji anaweza kudhibiti.

Mali ya document.domain inacheza jukumu muhimu katika utekelezaji wa sera ya asili sawa na vivinjari. Wakati kurasa mbili kutoka asili tofauti zinaweka document.domain yao kwa thamani sawa, zinaweza kuingiliana bila vizuizi. Ingawa vivinjari hawaruhusu thamani zote zinazoweza kuwekwa kwa document.domain, kuzuia kuweka thamani zisizohusiana kabisa na asili halisi ya ukurasa, kuna ubaguzi. Kwa kawaida, vivinjari huruhusu matumizi ya vikoa vya watoto au vikoa vya wazazi.

Mifereji:

document.domain

Kuharibu URL ya WebSocket

Kutoka: https://portswigger.net/web-security/dom-based/websocket-url-poisoning

Kuharibu URL ya WebSocket hutokea wakati script inatumia data inayoweza kudhibitiwa kama URL ya lengo kwa uhusiano wa WebSocket.

Mifereji:

Mjenzi wa WebSocket inaweza kusababisha udhaifu wa kuharibu URL ya WebSocket.

Ubadilishaji wa Viungo

Kutoka: https://portswigger.net/web-security/dom-based/link-manipulation

Udhaifu wa ubadilishaji wa viungo kulingana na DOM hutokea wakati script inaandika data inayoweza kudhibitiwa na mshambuliaji kwenye lengo la urambazaji ndani ya ukurasa wa sasa, kama kiungo kinachoweza bonyezwa au URL ya kuwasilisha fomu.

Mifereji:

someDOMElement.href
someDOMElement.src
someDOMElement.action

Ubadilishaji wa Ombi la Ajax

Kutoka: https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation

Udhaifu wa ubadilishaji wa ombi la Ajax unatokea wakati script inaandika data inayoweza kudhibitiwa na mshambuliaji katika ombi la Ajax ambalo linatolewa kwa kutumia kitu cha XmlHttpRequest.

Mifereji:

XMLHttpRequest.setRequestHeader()
XMLHttpRequest.open()
XMLHttpRequest.send()
jQuery.globalEval()
$.globalEval()

Ubadilishaji wa njia ya faili ya ndani

Kutoka: https://portswigger.net/web-security/dom-based/local-file-path-manipulation

Udhaifu wa ubadilishaji wa njia ya faili ya ndani unatokea wakati script inapitisha data inayoweza kudhibitiwa na mshambuliaji kwa API ya kushughulikia faili kama parameter ya filename. Udhaifu huu unaweza kutumiwa na mshambuliaji kuunda URL ambayo, ikiwa inatembelewa na mtumiaji mwingine, inaweza kusababisha kivinjari cha mtumiaji kufungua au kuandika faili ya ndani isiyo na kikomo.

Mifereji:

FileReader.readAsArrayBuffer()
FileReader.readAsBinaryString()
FileReader.readAsDataURL()
FileReader.readAsText()
FileReader.readAsFile()
FileReader.root.getFile()
FileReader.root.getFile()

Uingizaji wa SQL Upande wa Mteja

Kutoka: https://portswigger.net/web-security/dom-based/client-side-sql-injection

Udhaifu wa uingizaji wa SQL upande wa mteja hutokea wakati script inajumuisha data inayoweza kudhibitiwa na mshambuliaji katika swali la SQL upande wa mteja kwa njia isiyokuwa salama.

Mifereji:

executeSql()

Kubadilisha HTML5-storage

Kutoka: https://portswigger.net/web-security/dom-based/html5-storage-manipulation

Makosa ya kubadilisha HTML5-storage yanatokea wakati script inahifadhi data inayoweza kudhibitiwa na mshambuliaji katika kuhifadhi ya HTML5 ya kivinjari cha wavuti (localStorage au sessionStorage). Ingawa hatua hii haileti hatari ya usalama kwa asili, inakuwa tatizo ikiwa programu inasoma data iliyohifadhiwa na kuitumia bila usalama. Hii inaweza kuruhusu mshambuliaji kutumia mfumo wa kuhifadhi kufanya mashambulizi mengine yanayohusiana na DOM, kama vile udukuzi wa tovuti na uingizaji wa JavaScript.

Mifereji:

sessionStorage.setItem()
localStorage.setItem()

Uingizaji wa XPath

Kutoka: https://portswigger.net/web-security/dom-based/client-side-xpath-injection

Mazingira ya XPath-injection ya DOM-based hutokea wakati script inajumuisha data inayoweza kudhibitiwa na mshambuliaji katika ombi la XPath.

Mifereji:

document.evaluate()
someDOMElement.evaluate()

Uingizaji wa JSON upande wa Mteja

Kutoka: https://portswigger.net/web-security/dom-based/client-side-json-injection

Mazingira hatarishi ya uingizaji wa JSON upande wa DOM hutokea wakati script inajumuisha data inayoweza kudhibitiwa na mshambuliaji katika string ambayo inachambuliwa kama muundo wa data wa JSON na kisha kusindika na programu.

Mifereji:

JSON.parse()
jQuery.parseJSON()
$.parseJSON()

Ubadilishaji wa Ujumbe wa Wavuti

Kutoka: https://portswigger.net/web-security/dom-based/web-message-manipulation

Mambo hatarishi ya ujumbe wa wavuti yanatokea wakati script inatuma data inayoweza kudhibitiwa na mshambuliaji kama ujumbe wa wavuti kwenda hati nyingine ndani ya kivinjari. Mfano wa udhaifu wa ubadilishaji wa ujumbe wa wavuti unaweza kupatikana kwenye PortSwigger's Web Security Academy.

Mifereji:

Mbinu ya postMessage() ya kutuma ujumbe wa wavuti inaweza kusababisha udhaifu ikiwa msikilizaji wa tukio la kupokea ujumbe unashughulikia data inayopokelewa kwa njia isiyokuwa salama.

Ubadilishaji wa Data ya DOM

Kutoka: https://portswigger.net/web-security/dom-based/dom-data-manipulation

Mambo hatarishi ya ubadilishaji wa data ya DOM yanatokea wakati script inaandika data inayoweza kudhibitiwa na mshambuliaji kwenye uga ndani ya DOM ambao hutumiwa katika UI inayoonekana au mantiki ya upande wa mteja. Udhaifu huu unaweza kutumiwa na mshambuliaji kuunda URL ambayo, ikiwa inatembelewa na mtumiaji mwingine, inaweza kubadilisha muonekano au tabia ya UI ya upande wa mteja.

Mifereji:

scriptElement.src
scriptElement.text
scriptElement.textContent
scriptElement.innerText
someDOMElement.setAttribute()
someDOMElement.search
someDOMElement.text
someDOMElement.textContent
someDOMElement.innerText
someDOMElement.outerText
someDOMElement.value
someDOMElement.name
someDOMElement.target
someDOMElement.method
someDOMElement.type
someDOMElement.backgroundImage
someDOMElement.cssText
someDOMElement.codebase
document.title
document.implementation.createHTMLDocument()
history.pushState()
history.replaceState()

Kukataa Huduma

Kutoka: https://portswigger.net/web-security/dom-based/denial-of-service

Makosa ya kukataa huduma yanayotokana na DOM hutokea wakati script inapitisha data inayoweza kudhibitiwa na mshambuliaji kwa njia isiyokuwa salama kwa API ya jukwaa lenye shida. Hii ni pamoja na API ambazo, zinapoitwa, zinaweza kusababisha kompyuta ya mtumiaji kutumia kiwango kikubwa cha CPU au nafasi ya diski. Makosa kama haya yanaweza kuwa na athari kubwa, kama vile kivinjari kuzuia utendaji wa tovuti kwa kukataa jaribio la kuhifadhi data katika localStorage au kusitisha script zinazofanya kazi.

Mifereji:

requestFileSystem()
RegExp()

Dom Clobbering

pageDom Clobbering
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Last updated