DOM XSS
Last updated
Last updated
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
DOM-Schwachstellen treten auf, wenn Daten aus von Angreifern kontrollierten Quellen (wie location.search
, document.referrer
oder document.cookie
) unsicher an Senken übertragen werden. Senken sind Funktionen oder Objekte (z. B. eval()
, document.body.innerHTML
), die schädlichen Inhalt ausführen oder rendern können, wenn sie mit bösartigen Daten versorgt werden.
Quellen sind Eingaben, die von Angreifern manipuliert werden können, einschließlich URLs, Cookies und Webnachrichten.
Senken sind potenziell gefährliche Endpunkte, an denen bösartige Daten zu negativen Auswirkungen führen können, wie z. B. der Ausführung von Skripten.
Das Risiko entsteht, wenn Daten von einer Quelle zu einer Senke fließen, ohne ordnungsgemäße Validierung oder Bereinigung, was Angriffe wie XSS ermöglicht.
Eine aktuellere Liste von Quellen und Senken finden Sie unter https://github.com/wisec/domxsswiki/wiki
Häufige Quellen:
Häufige Senken:
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()
``
``
Die innerHTML
Senke akzeptiert in modernen Browsern keine script
-Elemente, noch werden svg onload
-Ereignisse ausgelöst. Das bedeutet, dass Sie alternative Elemente wie img
oder iframe
verwenden müssen.
Diese Art von XSS ist wahrscheinlich die schwierigste zu finden, da Sie den JS-Code durchsuchen müssen, um zu sehen, ob er irgendein Objekt verwendet, dessen Wert Sie kontrollieren, und in diesem Fall zu prüfen, ob es irgendeine Möglichkeit gibt, es auszunutzen, um beliebigen JS auszuführen.
Browsererweiterung, um jede Daten zu überprüfen, die eine potenzielle Senke erreicht: https://github.com/kevin-mizu/domloggerpp
Von: https://portswigger.net/web-security/dom-based/open-redirection
Open Redirect-Schwachstellen im DOM treten auf, wenn ein Skript Daten, die ein Angreifer kontrollieren kann, in eine Senke schreibt, die in der Lage ist, die Navigation über Domains hinweg zu initiieren.
Es ist entscheidend zu verstehen, dass die Ausführung beliebigen Codes, wie javascript:alert(1)
, möglich ist, wenn Sie die Kontrolle über den Anfang der URL haben, an der die Umleitung erfolgt.
Senken:
Von: https://portswigger.net/web-security/dom-based/cookie-manipulation
DOM-basierte Cookie-Manipulationsanfälligkeiten treten auf, wenn ein Skript Daten, die von einem Angreifer kontrolliert werden können, in den Wert eines Cookies einfügt. Diese Anfälligkeit kann zu unerwartetem Verhalten der Webseite führen, wenn das Cookie innerhalb der Seite verwendet wird. Darüber hinaus kann sie ausgenutzt werden, um einen Session-Fixation-Angriff durchzuführen, wenn das Cookie an der Verfolgung von Benutzersitzungen beteiligt ist. Der primäre Sink, der mit dieser Anfälligkeit verbunden ist, ist:
Sinks:
Von: https://portswigger.net/web-security/dom-based/javascript-injection
DOM-basierte JavaScript-Injektionsanfälligkeiten entstehen, wenn ein Skript Daten, die von einem Angreifer kontrolliert werden können, als JavaScript-Code ausführt.
Sinks:
From: https://portswigger.net/web-security/dom-based/document-domain-manipulation
Document-Domain-Manipulation-Schwachstellen treten auf, wenn ein Skript die document.domain
-Eigenschaft mit Daten festlegt, die ein Angreifer kontrollieren kann.
Die document.domain
-Eigenschaft spielt eine Schlüsselrolle bei der Durchsetzung der Same-Origin-Policy durch Browser. Wenn zwei Seiten aus unterschiedlichen Ursprüngen ihre document.domain
auf den gleichen Wert setzen, können sie ohne Einschränkungen interagieren. Obwohl Browser bestimmte Grenzen für die Werte, die document.domain
zugewiesen werden können, auferlegen und die Zuweisung von völlig nicht verwandten Werten zum tatsächlichen Seitenursprung verhindern, gibt es Ausnahmen. Typischerweise erlauben Browser die Verwendung von Kind- oder Eltern-Domains.
Sinks:
From: https://portswigger.net/web-security/dom-based/websocket-url-poisoning
WebSocket-URL-Poisoning tritt auf, wenn ein Skript kontrollierbare Daten als Ziel-URL für eine WebSocket-Verbindung verwendet.
Sinks:
Der WebSocket
-Konstruktor kann zu WebSocket-URL-Poisoning-Schwachstellen führen.
From: https://portswigger.net/web-security/dom-based/link-manipulation
DOM-basierte Link-Manipulationsschwachstellen entstehen, wenn ein Skript angreifer-kontrollierbare Daten an ein Navigationsziel innerhalb der aktuellen Seite schreibt, wie z.B. einen klickbaren Link oder die Einreichungs-URL eines Formulars.
Sinks:
Von: https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation
Schwachstellen bei der Ajax-Anforderungsmanipulation entstehen, wenn ein Skript angreiferkontrollierbare Daten in eine Ajax-Anforderung schreibt, die mit einem XmlHttpRequest
-Objekt ausgegeben wird.
Sinks:
Von: https://portswigger.net/web-security/dom-based/local-file-path-manipulation
Schwachstellen bei der lokalen Dateipfadmanipulation entstehen, wenn ein Skript vom Angreifer kontrollierbare Daten an eine Datei-Verarbeitungs-API als filename
-Parameter übergibt. Diese Schwachstelle kann von einem Angreifer ausgenutzt werden, um eine URL zu konstruieren, die, wenn sie von einem anderen Benutzer besucht wird, dazu führen könnte, dass der Browser des Benutzers eine beliebige lokale Datei öffnet oder schreibt.
Sinks:
From: https://portswigger.net/web-security/dom-based/client-side-sql-injection
Client-seitige SQL-Injection-Schwachstellen treten auf, wenn ein Skript angreiferkontrollierte Daten auf unsichere Weise in eine client-seitige SQL-Abfrage einfügt.
Sinks:
From: https://portswigger.net/web-security/dom-based/html5-storage-manipulation
HTML5-Speicher-Manipulationsanfälligkeiten entstehen, wenn ein Skript angreiferkontrollierte Daten im HTML5-Speicher des Webbrowsers (localStorage
oder sessionStorage
) speichert. Während diese Aktion an sich keine Sicherheitsanfälligkeit darstellt, wird sie problematisch, wenn die Anwendung anschließend die gespeicherten Daten liest und unsicher verarbeitet. Dies könnte es einem Angreifer ermöglichen, den Speichermechanismus auszunutzen, um andere DOM-basierte Angriffe durchzuführen, wie z.B. Cross-Site-Scripting und JavaScript-Injection.
Sinks:
Von: https://portswigger.net/web-security/dom-based/client-side-xpath-injection
DOM-basierte XPath-Injektionsanfälligkeiten treten auf, wenn ein Skript angreiferkontrollierte Daten in eine XPath-Abfrage einfügt.
Sinks:
From: https://portswigger.net/web-security/dom-based/client-side-json-injection
DOM-basierte JSON-Injektionsanfälligkeiten treten auf, wenn ein Skript von einem Angreifer kontrollierbare Daten in einen String einfügt, der als JSON-Datenstruktur geparst und dann von der Anwendung verarbeitet wird.
Sinks:
From: https://portswigger.net/web-security/dom-based/web-message-manipulation
Web-message-Sicherheitsanfälligkeiten entstehen, wenn ein Skript vom Angreifer kontrollierbare Daten als Web-Nachricht an ein anderes Dokument im Browser sendet. Ein Beispiel für anfällige Web-Nachrichtenmanipulation findet sich in PortSwiggers Web Security Academy.
Sinks:
Die postMessage()
-Methode zum Senden von Web-Nachrichten kann zu Sicherheitsanfälligkeiten führen, wenn der Ereignislistener für den Empfang von Nachrichten die eingehenden Daten auf unsichere Weise verarbeitet.
From: https://portswigger.net/web-security/dom-based/dom-data-manipulation
DOM-Datenmanipulationsanfälligkeiten entstehen, wenn ein Skript vom Angreifer kontrollierbare Daten in ein Feld innerhalb des DOM schreibt, das in der sichtbaren UI oder der clientseitigen Logik verwendet wird. Diese Sicherheitsanfälligkeit kann von einem Angreifer ausgenutzt werden, um eine URL zu konstruieren, die, wenn sie von einem anderen Benutzer besucht wird, das Erscheinungsbild oder Verhalten der clientseitigen UI ändern kann.
Sinks:
From: https://portswigger.net/web-security/dom-based/denial-of-service
DOM-basierte Denial-of-Service-Schwachstellen treten auf, wenn ein Skript angreiferkontrollierte Daten unsicher an eine problematische Plattform-API übergibt. Dazu gehören APIs, die, wenn sie aufgerufen werden, dazu führen können, dass der Computer des Benutzers übermäßige Mengen an CPU oder Speicherplatz verbraucht. Solche Schwachstellen können erhebliche Nebenwirkungen haben, wie z.B. dass der Browser die Funktionalität der Website einschränkt, indem er Versuche, Daten in localStorage
zu speichern, ablehnt oder beschäftigte Skripte beendet.
Sinks:
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)