
DOM XSS-Scanner für Single-Page-Anwendungen
DOMDig ist ein DOM-XSS-Scanner, der im Chromium-Webbrowser läuft und Single-Page-Anwendungen (SPA) rekursiv scannen kann.
Im Gegensatz zu anderen Scannern kann DOMDig jede Webanwendung (einschließlich Gmail) crawlen, indem es DOM-Änderungen und XHR-/Fetch-/WebSocket-Anfragen verfolgt und durch das Auslösen von Ereignissen eine echte Benutzerinteraktion simuliert. Während dieses Prozesses werden XSS-Payloads in Eingabefelder eingefügt und deren Ausführung überwacht, um Injektionspunkte und die damit verbundenen URL-Änderungen zu finden.
Es basiert auf htcrawl, einer leistungsstarken Node-Bibliothek, die problemlos ein Gmail-Konto crawlen kann.
git clone https://github.com/fcavallarin/domdig.git
cd domdig && npm i && cd ..
node domdig/domdig.js
node domdig.js -c 'foo=bar' -p http:127.0.0.1:8080 https://fcvl.net/htcap/scanme/domxss.php
DOMDig kann drei verschiedene Prüfungen durchführen:
Die DOM-XSS-Prüfung kann mit verschiedenen Modi konfiguriert werden, die unterschiedliche Verhaltensweisen ermöglichen. Standardmäßig sind alle aktiviert.
Die Modi sind:
Durchsucht das DOM nach Stellen, an denen ein Benutzer JavaScript-Code injizieren kann, z. B. ein Textfeld. Es kann Injektionspunkte entdecken, die von einem Scanner nicht erraten werden können. Ein Beispiel könnte eine Suchfunktion sein, die den Text eines Eingabefeldes nimmt und ihn zur Suche als JSON-String in den URL-Hash einfügt.
Fuzzt die URL (Query-Parameter und den Hash), um zu sehen, ob unser Code beim Laden der Seite ausgeführt wird. Wenn kein Code ausgeführt wird, durchsucht es das DOM und löst HTML-Ereignisse aus, in der Hoffnung, etwas zu finden, das unser Payload ausführt.
Es kann auch das klassische Reflected-XSS entdecken.
Nachdem eine DOM-XSS-Prüfung durchgeführt wurde, durchsucht DOMDig dieselbe Seite erneut und wartet auf die Ausführung zuvor verwendeter Payloads. Wenn einer gefunden wird, bedeutet dies, dass er Seitenneuladungen überlebt.
Sucht nach Stellen, an denen Template-Platzhalter (z. B. {var1}) als JavaScript-Code ausgewertet werden können.
Jede gemeldete Schwachstelle enthält die folgenden Felder:
domxss, stored oder templateinj sein.DOMDig verwendet htcrawl als Crawling-Engine.
Das Diagramm zeigt den rekursiven Crawling-Prozess.
.
Das folgende Video zeigt die Engine beim Crawlen von Gmail. Der Crawl dauerte viele Stunden und es wurden etwa 3000 XHR-Anfragen erfasst.
Eine Login-Sequenz (oder Anfangssequenz) ist ein JSON-Objekt, das eine Liste von Aktionen enthält, die vor dem Scanstart ausgeführt werden sollen.
Jedes Element der Liste ist ein Array, bei dem das erste Element der Name der auszuführenden Aktion ist und die restlichen Elemente "Parameter" für diese Aktion sind.
Aktionen sind:
[
["navigate", "https://target.local/login-page"],
["write", "#username", "demo"],
["write", "#password", "demo"],
["sleep", 2],
["clickToNavigate", "#btn-login"]
]
Payloads können aus einer JSON-Datei (-P Option) als Array von Strings geladen werden. Um benutzerdefinierte Payloads zu erstellen, muss der String window.___xssSink({0}) als auszuführende Funktion verwendet werden (anstelle des klassischen alert(1)).
[
';window.___xssSink({0});',
'<img src="https://raw.githubusercontent.com/fcavallarin/domdig/HEAD/a" onerror="window.___xssSink({0})">'
]