DOM XSS
Last updated
Last updated
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
DOM ranljivosti se javljaju kada se podaci iz izvora pod kontrolom napadača (kao što su location.search
, document.referrer
ili document.cookie
) nesigurno prenose u sinks. Sinks su funkcije ili objekti (npr., eval()
, document.body.innerHTML
) koji mogu izvršiti ili prikazati štetne sadržaje ako dobiju zlonamerne podatke.
Izvori su ulazi koje napadači mogu manipulisati, uključujući URL-ove, kolačiće i web poruke.
Sinks su potencijalno opasne tačke gde zlonamerni podaci mogu dovesti do negativnih efekata, kao što je izvršavanje skripti.
Rizik nastaje kada podaci teku od izvora do sinka bez pravilne validacije ili sanitizacije, omogućavajući napade poput XSS-a.
Možete pronaći ažuriraniju listu izvora i sinkova na https://github.com/wisec/domxsswiki/wiki
Uobičajeni izvori:
Uobičajeni Sinks:
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()
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()
XMLHttpRequest.setRequestHeader()
FileReader.root.getFile()
someDOMElement.cssText
init()
XMLHttpRequest.open()
FileReader.root.getFile()
someDOMElement.codebase
index()
jQuery.globalEval()
someDOMElement.href
someDOMElement.outerHTML
$.parseHTML()
localStorage.setItem()
document.evaluate()
document.writeln()
$.parseJSON()
**[**`Denial of Service`**](dom-xss.md#denial-of-service)**
someDOMElement.evaluate()
document.title
requestFileSystem()
document.implementation.createHTMLDocument()
document.cookie
executeSql()
postMessage()
``
``
innerHTML
sink ne prihvata script
elemente u bilo kojem modernom pretraživaču, niti će svg onload
događaji biti aktivirani. To znači da ćete morati koristiti alternativne elemente kao što su img
ili iframe
.
Ova vrsta XSS-a je verovatno najteža za pronalaženje, jer morate da pogledate unutar JS koda, da vidite da li koristi neki objekat čiju vrednost kontrolišete, i u tom slučaju, da vidite da li postoji bilo koji način da ga zloupotrebite za izvršavanje proizvoljnog JS-a.
Ekstenzija za pretraživač za proveru svih podataka koji dolaze do potencijalnog sinka: https://github.com/kevin-mizu/domloggerpp
Sa: https://portswigger.net/web-security/dom-based/open-redirection
Ranljivosti otvorenog preusmeravanja u DOM-u se javljaju kada skripta piše podatke, koje napadač može kontrolisati, u sink koji može inicirati navigaciju između domena.
Ključno je razumeti da je izvršavanje proizvoljnog koda, kao što je javascript:alert(1)
, moguće ako imate kontrolu nad početkom URL-a gde se preusmeravanje dešava.
Sinks:
From: https://portswigger.net/web-security/dom-based/cookie-manipulation
DOM-bazirane ranjivosti manipulacije kolačićima se javljaju kada skripta uključuje podatke, koje može kontrolisati napadač, u vrednost kolačića. Ova ranjivost može dovesti do neočekivanog ponašanja veb stranice ako se kolačić koristi unutar sajta. Pored toga, može se iskoristiti za sprovođenje napada fiksacije sesije ako je kolačić uključen u praćenje korisničkih sesija. Primarni izlaz povezan sa ovom ranjivošću je:
Sinks:
From: https://portswigger.net/web-security/dom-based/javascript-injection
DOM-bazirane ranjivosti za injekciju JavaScript-a nastaju kada skripta izvršava podatke, kojima može upravljati napadač, kao JavaScript kod.
Sinks:
From: https://portswigger.net/web-security/dom-based/document-domain-manipulation
Ranljivosti manipulacije dokument-domenom se javljaju kada skripta postavlja document.domain
svojstvo koristeći podatke koje napadač može kontrolisati.
Svojstvo document.domain
igra ključnu ulogu u sprovodjenju politike iste porekla od strane pregledača. Kada dve stranice iz različitih porekla postave svoj document.domain
na istu vrednost, mogu da komuniciraju bez ograničenja. Iako pregledači nameću određene ograničenja na vrednosti koje se mogu dodeliti document.domain
, sprečavajući dodeljivanje potpuno nepovezanih vrednosti stvarnom poreklu stranice, postoje izuzeci. Obično, pregledači dozvoljavaju korišćenje dečijih ili roditeljskih domena.
Sinks:
From: https://portswigger.net/web-security/dom-based/websocket-url-poisoning
WebSocket-URL poisoning se dešava kada skripta koristi kontrolisane podatke kao ciljni URL za WebSocket vezu.
Sinks:
WebSocket
konstruktor može dovesti do ranjivosti WebSocket-URL poisoning.
From: https://portswigger.net/web-security/dom-based/link-manipulation
DOM-based link-manipulation vulnerabilities nastaju kada skripta piše podatke koje kontroliše napadač u navigacioni cilj unutar trenutne stranice, kao što su klikabilna veza ili URL za slanje forme.
Sinks:
From: https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation
Ranljivosti manipulacije Ajax zahtevima nastaju kada skripta upisuje podatke koje napadač može kontrolisati u Ajax zahtev koji se izdaje koristeći XmlHttpRequest
objekat.
Sinks:
From: https://portswigger.net/web-security/dom-based/local-file-path-manipulation
Ranljivosti manipulacije lokalnim putanjama datoteka nastaju kada skripta prosledi podatke koje kontroliše napadač API-ju za rukovanje datotekama kao filename
parametar. Ovu ranljivost može iskoristiti napadač da konstruiše URL koji, ako ga poseti drugi korisnik, može dovesti do otvaranja ili pisanja proizvoljne lokalne datoteke u korisnikovom pretraživaču.
Sinks:
From: https://portswigger.net/web-security/dom-based/client-side-sql-injection
Ranljivosti klijentske SQL injekcije se javljaju kada skripta uključuje podatke koje kontroliše napadač u klijentsku SQL upit na nesiguran način.
Sinks:
From: https://portswigger.net/web-security/dom-based/html5-storage-manipulation
HTML5-storage manipulation vulnerabilities nastaju kada skripta smešta podatke koje napadač može kontrolisati u HTML5 skladištu web pretraživača (localStorage
ili sessionStorage
). Iako ova akcija nije inherentno sigurnosna ranjivost, postaje problematična ako aplikacija kasnije čita smeštene podatke i obrađuje ih na nesiguran način. Ovo bi moglo omogućiti napadaču da iskoristi mehanizam skladištenja za izvođenje drugih DOM-baziranih napada, kao što su cross-site scripting i JavaScript injekcija.
Sinks:
From: https://portswigger.net/web-security/dom-based/client-side-xpath-injection
DOM-bazirane XPath-injekcione ranjivosti se javljaju kada skripta uključuje podatke koje kontroliše napadač u XPath upit.
Sinks:
From: https://portswigger.net/web-security/dom-based/client-side-json-injection
DOM-bazirane JSON-injekcione ranjivosti se javljaju kada skripta uključuje podatke koje kontroliše napadač u string koji se analizira kao JSON struktura podataka i zatim obrađuje od strane aplikacije.
Sinks:
From: https://portswigger.net/web-security/dom-based/web-message-manipulation
Ranljivosti web-poruka nastaju kada skripta šalje podatke koje kontroliše napadač kao web poruku drugom dokumentu unutar pregledača. Primer ranljive manipulacije web-porukama može se naći na PortSwigger-ovoj Akademiji za web bezbednost.
Sinks:
Metoda postMessage()
za slanje web poruka može dovesti do ranljivosti ako slušalac događaja za primanje poruka obrađuje dolazne podatke na nesiguran način.
From: https://portswigger.net/web-security/dom-based/dom-data-manipulation
Ranljivosti manipulacije DOM-podacima nastaju kada skripta piše podatke koje kontroliše napadač u polje unutar DOM-a koje se koristi unutar vidljivog UI-a ili klijentske logike. Ovu ranljivost može iskoristiti napadač da konstruira URL koji, ako ga poseti drugi korisnik, može promeniti izgled ili ponašanje klijentskog UI-a.
Sinks:
From: https://portswigger.net/web-security/dom-based/denial-of-service
DOM-bazirane ranjivosti za uskraćivanje usluge se javljaju kada skripta prenosi podatke koje kontroliše napadač na nesiguran način do problematičnog platformskog API-ja. Ovo uključuje API-je koji, kada se pozovu, mogu dovesti do toga da korisnički računar troši prekomerne količine CPU-a ili prostora na disku. Takve ranjivosti mogu imati značajne nuspojave, kao što je ograničavanje funkcionalnosti veb stranice od strane pregledača odbijanjem pokušaja čuvanja podataka u localStorage
ili prekidanje zauzetih skripti.
Sinks:
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)