hacktricks/pentesting-web/xss-cross-site-scripting/dom-xss.md

24 KiB

DOM XSS

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

DOM Kwesbaarhede

DOM-kwesbaarhede kom voor wanneer data vanaf aanvaller-beheerde bronne (soos location.search, document.referrer, of document.cookie) onveilig oorgedra word na sinks. Sinks is funksies of voorwerpe (bv., eval(), document.body.innerHTML) wat skadelike inhoud kan uitvoer of vertoon as dit kwaadwillige data ontvang.

  • Bronne is insette wat deur aanvallers gemanipuleer kan word, insluitend URL's, koekies, en webboodskappe.
  • Sinks is potensieel gevaarlike eindpunte waar kwaadwillige data kan lei tot nadelige gevolge, soos skripsie-uitvoering.

Die risiko ontstaan wanneer data vloei vanaf 'n bron na 'n sink sonder behoorlike validering of sanitisering, wat aanvalle soos XSS moontlik maak.

{% hint style="info" %} Jy kan 'n meer opgedateerde lys van bronne en sinks vind op https://github.com/wisec/domxsswiki/wiki {% endhint %}

Gewone bronne:

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

Gewone Sinks:

Oopverwysing Javascript-inspuiting DOM-data manipulasie jQuery
location eval() scriptElement.src add()
location.host Function() konstrukteur 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 ``Plaaslike lêerpad-manipulasie 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()
``Ajax versoek-manipulasie FileReader.readAsFile() someDOMElement.backgroundImage constructor()
XMLHttpRequest.setRequestHeader() FileReader.root.getFile() someDOMElement.cssText init()
XMLHttpRequest.open() FileReader.root.getFile() someDOMElement.codebase index()
XMLHttpRequest.send() Skakel-manipulasie someDOMElement.innerHTML jQuery.parseHTML()
jQuery.globalEval() someDOMElement.href someDOMElement.outerHTML $.parseHTML()
$.globalEval() someDOMElement.src someDOMElement.insertAdjacentHTML Kliëntkant JSON-inspuiting
``HTML5-opberging-manipulasie someDOMElement.action someDOMElement.onevent JSON.parse()
sessionStorage.setItem() XPath-inspuiting document.write() jQuery.parseJSON()
localStorage.setItem() document.evaluate() document.writeln() $.parseJSON()
**[**`Ontkenning van Diens`**](dom-xss.md#denial-of-service)** someDOMElement.evaluate() document.title ``Koekie-manipulasie
requestFileSystem() ``Dokument-domein-manipulasie document.implementation.createHTMLDocument() document.cookie
RegExp() document.domain history.pushState() WebSocket-URL-vergiftiging
Kliëntkant SQL-inspuiting Web-boodskap-manipulasie history.replaceState() WebSocket
executeSql() postMessage() `` ``

Die innerHTML sink aanvaar nie script elemente op enige moderne webblaaier nie, en ook nie sal svg onload gebeure plaasvind nie. Dit beteken dat jy alternatiewe elemente soos img of iframe sal moet gebruik.

Hierdie tipe XSS is waarskynlik die moeilikste om te vind, aangesien jy binne-in die JS-kode moet kyk, sien of dit enige objek gebruik waarvan jy die waarde beheer, en in daardie geval sien of daar enige manier is om dit te misbruik om arbitêre JS uit te voer.

Gereedskap om hulle te vind

Voorbeelde

Oopverwysing

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

Oopverwysbaarhede in die DOM kom voor wanneer 'n skrips data skryf, wat 'n aanvaller kan beheer, na 'n sink wat in staat is om navigasie oor domeine te inisieer.

Dit is noodsaaklik om te verstaan dat die uitvoer van arbitêre kode, soos javascript:alert(1), moontlik is as jy beheer het oor die begin van die URL waar die oorverwysing plaasvind.

Sinks:

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()

Koekie manipulasie

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

DOM-gebaseerde koekie-manipulasie kwesbaarhede kom voor wanneer 'n skriffie data insluit, wat deur 'n aanvaller beheer kan word, in die waarde van 'n koekie. Hierdie kwesbaarheid kan lei tot onverwagte gedrag van die webbladsy as die koekie binne die webwerf gebruik word. Daarbenewens kan dit uitgebuit word om 'n sessie-fixasie aanval uit te voer as die koekie betrokke is by die opsporing van gebruikersessies. Die primêre sink wat met hierdie kwesbaarheid geassosieer word, is:

Sinks:

document.cookie

JavaScript Injeksie

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

DOM-gebaseerde JavaScript-injeksie kwetsbaarhede word geskep wanneer 'n skrip data uitvoer wat deur 'n aanvaller beheer kan word as JavaScript-kode.

Sinks:

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

Dokument-domein manipulasie

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

Dokument-domein manipulasie kwesbaarhede kom voor wanneer 'n skriffie die document.domain eienskap instel met behulp van data wat 'n aanvaller kan beheer.

Die document.domain eienskap speel 'n sleutelrol in die afdwinging van die selfde-oorsprong beleid deur webblaaier. Wanneer twee bladsye van verskillende oorsprong hul document.domain na dieselfde waarde instel, kan hulle sonder beperkings interaksie hê. Alhoewel webblaaier sekere grense afdwing op die waardes wat toewysbaar is aan document.domain, wat die toewysing van heeltemal onverwante waardes aan die werklike bladsy-oorsprong voorkom, bestaan daar uitsonderings. Tipies laat webblaaier die gebruik van kind of ouer domeine toe.

Sinks:

document.domain

WebSocket-URL vergiftiging

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

WebSocket-URL vergiftiging gebeur wanneer 'n skriffie beheerbare data as die teiken-URL vir 'n WebSocket-verbinding gebruik.

Sinks:

Die WebSocket konstrukteur kan lei tot WebSocket-URL vergiftiging kwesbaarhede.

Skakel manipulasie

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

DOM-gebaseerde skakel-manipulasie kwesbaarhede ontstaan wanneer 'n skriffie aanvaller-beheerbare data na 'n navigasie teiken binne die huidige bladsy skryf, soos 'n kliekbare skakel of die indienings-URL van 'n vorm.

Sinks:

someDOMElement.href
someDOMElement.src
someDOMElement.action

Ajax versoek manipulasie

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

Ajax versoek manipulasie kwesbaarhede ontstaan wanneer 'n skriffie aanvaller-beheerbare data in 'n Ajax versoek skryf wat uitgereik word met behulp van 'n XmlHttpRequest objek.

Sinks:

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

Plaaslike lêerpaadjie manipulasie

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

Plaaslike lêerpaadjie manipulasie kwesbaarhede ontstaan wanneer 'n skriffie aanvaller-beheerbare data deurgee na 'n lêerhanterings-API as die filename parameter. Hierdie kwesbaarheid kan deur 'n aanvaller uitgebuit word om 'n URL te konstrueer wat, indien besoek deur 'n ander gebruiker, kan lei tot die gebruiker se blaaier wat 'n willekeurige plaaslike lêer oopmaak of skryf.

Sinks:

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

Kliëntkant SQL-inspuiting

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

Kliëntkant SQL-inspuitingskwetsbaarhede kom voor wanneer 'n skriffie aanvaller-beheerbare data op 'n onveilige manier in 'n kliëntkant SQL-navraag inkorporeer.

Sinks:

executeSql()

HTML5-opberging manipulasie

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

HTML5-opberging manipulasie kwesbaarhede ontstaan wanneer 'n skrip aanvaller-beheerbare data in die webblaaier se HTML5-opberging (localStorage of sessionStorage) stoor. Terwyl hierdie aksie nie inherent 'n sekuriteitskwesbaarheid is nie, word dit problematies as die aansoek daarna die gestoorde data lees en dit onveilig verwerk. Dit kan 'n aanvaller in staat stel om die opbergingsmeganisme te benut om ander DOM-gebaseerde aanvalle uit te voer, soos kruissite-skripsing en JavaScript-inspuiting.

Sinks:

sessionStorage.setItem()
localStorage.setItem()

XPath inspuiting

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

DOM-gebaseerde XPath-inspuitingskwetsbaarhede kom voor wanneer 'n skriffie aanvaller-beheerbare data in 'n XPath-soektog inkorporeer.

Sinks:

document.evaluate()
someDOMElement.evaluate()

Kliëntkant JSON-inspuiting

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

DOM-gebaseerde JSON-inspuitingskwetsbaarhede kom voor wanneer 'n skriffie aanvaller-beheerbare data inkorporeer in 'n string wat as 'n JSON-datastruktuur geïnterpreteer word en dan deur die aansoek verwerk word.

Sinks:

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

Web-boodskap manipulasie

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

Web-boodskap kwesbaarhede ontstaan wanneer 'n skrip aanvaller-beheerbare data as 'n web-boodskap na 'n ander dokument binne die blaaier stuur. 'n Voorbeeld van 'n kwesbare Web-boodskap manipulasie kan gevind word by PortSwigger se Web Security Academy.

Sinks:

Die postMessage() metode vir die stuur van web-boodskappe kan lei tot kwesbaarhede as die gebeurtenisluister vir die ontvangs van boodskappe die inkomende data op 'n onveilige manier hanteer.

DOM-data manipulasie

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

DOM-data manipulasie kwesbaarhede ontstaan wanneer 'n skrip aanvaller-beheerbare data na 'n veld binne die DOM skryf wat gebruik word binne die sigbare UI of kliëntkant-logika. Hierdie kwesbaarheid kan deur 'n aanvaller uitgebuit word om 'n URL te konstrueer wat, indien deur 'n ander gebruiker besoek, die voorkoms of gedrag van die kliëntkant UI kan verander.

Sinks:

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()

Ontkenning van Diens

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

DOM-gebaseerde ontkenning-van-diens kwesbaarhede gebeur wanneer 'n skriffie aanvaller-beheerbare data onveilig deurgee na 'n problematiese platform API. Dit sluit API's in wat, wanneer geaktiveer, kan lei tot die gebruiker se rekenaar wat oormatige hoeveelhede CPU of skyfspasie verbruik. Sulke kwesbaarhede kan beduidende newe-effekte hê, soos die webblaaier wat die webwerf se funksionaliteit beperk deur pogings om data in localStorage te stoor te verwerp of besige skripte te beëindig.

Sinks:

requestFileSystem()
RegExp()

Dom Clobbering

{% content-ref url="dom-clobbering.md" %} dom-clobbering.md {% endcontent-ref %}

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!