We hebben al twee soorten XSS- exploits genoemd : gereflecteerd en opgeslagen. Ze hebben allemaal het gemeenschappelijke kenmerk dat gevaarlijke code, nadat deze is ingevoegd, wordt uitgevoerd na de reactie van de server, wat betekent dat de fout aan de kant van de server ligt. Er is een ander type XSS-exploitatie dat in strijd is met deze functie: kwaadaardige code wordt onmiddellijk aan de clientzijde uitgevoerd zonder via de server te gaan, bekend als DOM Based XSS of ook bekend als type 0 XSS.
Allereerst moeten we weten wat DOM is?
DOM, een afkorting van Document Object Model, is een standaardvorm van W3C (http://www.w3.org/DOM/) die wordt voorgesteld om gegevens van gestructureerde documenten zoals HTML en XML op te halen en te manipuleren. Dit model geeft documenten weer als een hiërarchische boomstructuur. Alle elementen in HTML en XML worden als een knooppunt beschouwd.
DOM-gebaseerde XSS is een XSS-exploitatietechniek gebaseerd op het wijzigen van de DOM-structuur van het document, met name HTML.
Laten we hieronder een specifiek voorbeeld bekijken:
Een website heeft de volgende URL naar de registratiepagina:
example.com/register.php?message=Please fill in the form
Wanneer we er toegang toe krijgen, zien we een heel normaal formulier:

U kunt eenvoudig de berichtparameter afleiden die is doorgegeven aan de meldingsinhoud op het formulier, kijk goed naar de broncode van deze melding:
![Web9: Soorten XSS-exploitatie - Deel 3: Dom-gebaseerde XSS Web9: Soorten XSS-exploitatie - Deel 3: Dom-gebaseerde XSS]()
Het JavaScript-segment is verantwoordelijk voor het ophalen van de waarde van de berichtparameter en het afdrukken ervan. Door deze lakse invoercontrole is het heel goed mogelijk om gebruikers te misleiden zodat ze toegang krijgen tot gevaarlijke URL's.
In plaats van casten:
message=Please fill in the form
verzend dan:
message=GenderMaleFemale
function show(){alert();}
Dan ziet het inschrijfformulier er als volgt uit:
![Web9: Soorten XSS-exploitatie - Deel 3: Dom-gebaseerde XSS Web9: Soorten XSS-exploitatie - Deel 3: Dom-gebaseerde XSS]()
Gebruikers zullen een "normale" vorm als deze niet wantrouwen, en bij het selecteren van geslacht wordt het script uitgevoerd:
![Web9: Soorten XSS-exploitatie - Deel 3: Dom-gebaseerde XSS Web9: Soorten XSS-exploitatie - Deel 3: Dom-gebaseerde XSS]()
Ik zal wat meer uitleggen over de waarde die wordt doorgegeven in de berichtparameter:
GenderMaleFemale
function show(){alert();}
Het belangrijkste doel is om de functie show() uit te voeren elke keer dat er een onchage-gebeurtenis op de select-tag staat. De functie show() verschijnt hier eenvoudigweg om aan te geven dat het script is uitgevoerd. In werkelijkheid zullen hackers deze show()-functie echter vaak gebruiken om een script uit te voeren dat de waarde van de gebruikerscookie naar een vooraf bepaalde server verzendt. Lezers kunnen het artikel Reflected XSS lezen , waarin wordt vermeld hoe hackers creëren. Hoe ziet dit verzoek eruit?
Dit voorbeeld levert ons twee belangrijke conclusies op. Ten eerste werd de kwaadaardige code onmiddellijk uitgevoerd nadat op de waarde in de select-tag werd geklikt, wat betekent dat deze rechtstreeks aan de clientzijde werd uitgevoerd zonder de reactie van de server te doorlopen. Ten tweede is de HTML-structuur gewijzigd met het doorgegeven script. En we kunnen ook het daadwerkelijke exploitatiescenario zien: DOM Based lijkt iets meer op Reflected dan op Stored XSS als het gaat om het misleiden van gebruikers om toegang te krijgen tot een URL die is ingebed met kwaadaardige code.
De volgende afbeelding beschrijft elke stap bij het implementeren van de DOM-gebaseerde XSS-aanvalstechniek:
![Web9: Soorten XSS-exploitatie - Deel 3: Dom-gebaseerde XSS Web9: Soorten XSS-exploitatie - Deel 3: Dom-gebaseerde XSS]()
Hieronder staat een video van een lid van het WhiteHat.vn-forum die een exploit uitvoert via DOM Based XSS:
Succes!