Wir haben bereits zwei Arten von XSS- Exploits erwähnt : reflektierte und gespeicherte. Sie alle haben das gemeinsame Merkmal, dass gefährlicher Code, nachdem er eingefügt wurde, nach der Antwort des Servers ausgeführt wird, was bedeutet, dass der Fehler auf der Seite des Servers liegt. Server. Server. Es gibt eine andere Art der XSS-Ausnutzung, die dieser Funktion zuwiderläuft: Schadcode wird sofort auf der Clientseite ausgeführt, ohne den Server zu durchlaufen. Dies wird als DOM-basiertes XSS oder auch als Typ-0-XSS bezeichnet.
Zunächst müssen wir wissen, was DOM ist?
DOM, kurz für Document Object Model, ist eine Standardform des W3C (http://www.w3.org/DOM/), die zum Abrufen und Bearbeiten von Daten strukturierter Dokumente wie HTML und XML vorgeschlagen wird. Dieses Modell stellt Dokumente als hierarchische Baumstruktur dar. Alle Elemente in HTML und XML werden als Knoten betrachtet.
DOM-basiertes XSS ist eine XSS-Ausnutzungstechnik, die auf der Änderung der DOM-Struktur des Dokuments, insbesondere von HTML, basiert.
Schauen wir uns unten ein konkretes Beispiel an:
Eine Website hat die folgende URL zur Registrierungsseite:
example.com/register.php?message=Please fill in the form
Wenn wir darauf zugreifen, sehen wir ein ganz normales Formular:

Sie können den in den Benachrichtigungsinhalt des Formulars übergebenen Nachrichtenparameter leicht ableiten. Schauen Sie sich den Quellcode dieser Benachrichtigung genau an:

Das JavaScript-Segment ist dafür verantwortlich, den Wert aus dem Nachrichtenparameter abzurufen und auszugeben. Durch diese laxe Eingabeprüfung ist es durchaus möglich, Benutzer dazu zu verleiten, auf gefährliche URLs zuzugreifen.
Statt zu gießen:
message=Please fill in the form
dann übermitteln:
message=GenderMaleFemale
function show(){alert();}
Dann sieht das Anmeldeformular so aus:

Benutzer werden gegenüber einer „normalen“ Form wie dieser nicht misstrauisch sein, und bei der Auswahl des Geschlechts wird das Skript ausgeführt:

Ich erkläre etwas mehr über den im Nachrichtenparameter übergebenen Wert:
GenderMaleFemale
function show(){alert();}
Sein Hauptzweck besteht darin, die Funktion show() jedes Mal auszuführen, wenn ein Onchage-Ereignis auf dem Select-Tag auftritt. Die Funktion show() wird hier einfach angezeigt, um anzuzeigen, dass das Skript ausgeführt wurde. In der Realität verwenden Hacker jedoch häufig diese show()-Funktion, um ein Skript auszuführen, das den Cookie-Wert des Benutzers an einen vorgegebenen Server überträgt. Leser können den Artikel Reflected XSS lesen , in dem erwähnt wird, wie Hacker erstellen. Wie sieht diese Anfrage aus?
Dieses Beispiel liefert uns zwei wichtige Schlussfolgerungen. Erstens wurde der Schadcode sofort beim Klicken auf den Wert im Select-Tag ausgeführt, d. h. er wurde direkt auf der Client-Seite ausgeführt, ohne die Antwort des Servers zu durchlaufen. Zweitens wurde die HTML-Struktur mit dem übergebenen Skript geändert. Und wir können auch das tatsächliche Ausnutzungsszenario sehen: DOM Based ähnelt eher Reflected als Stored XSS, wenn es darum geht, Benutzer dazu zu verleiten, auf eine URL zuzugreifen, in die bösartiger Code eingebettet ist.
Die folgende Abbildung beschreibt jeden Schritt bei der Implementierung der DOM-basierten XSS-Angriffstechnik:

Unten sehen Sie ein Video eines Mitglieds des WhiteHat.vn-Forums, das einen Exploit über DOM-basiertes XSS durchführt:
Viel Glück!