Am menționat deja două tipuri de exploit XSS : reflectate și stocate.Toate au caracteristica comună că codul periculos, după ce a fost inserat, va fi executat după răspunsul serverului, ceea ce înseamnă că eroarea se află de partea serverului.server.server. Există un alt tip de exploatare XSS care contravine acestei caracteristici, codul rău intenționat este executat imediat pe partea clientului fără a trece prin server, cunoscut sub numele de XSS bazat pe DOM sau cunoscut și ca XSS de tip 0.
În primul rând trebuie să știm ce este DOM?
DOM, prescurtare pentru Document Object Model, este o formă standard a W3C (http://www.w3.org/DOM/) propusă pentru a prelua și manipula datele documentelor structurate, cum ar fi HTML și XML. Acest model reprezintă documentele ca o structură arborescentă ierarhică. Toate elementele din HTML și XML sunt considerate un nod.
XSS bazat pe DOM este o tehnică de exploatare XSS bazată pe modificarea structurii DOM a documentului, în special HTML.
Să ne uităm la un exemplu concret de mai jos:
Un site web are următoarea adresă URL către pagina de înregistrare:
example.com/register.php?message=Please fill in the form
Când îl accesăm, vedem o formă foarte normală:

Puteți deduce cu ușurință parametrul mesajului trecut în conținutul notificării din formular, uitați-vă cu atenție la codul sursă al acestei notificări:
![Web9: Tipuri de exploatare XSS - Partea 3: XSS bazat pe Dom Web9: Tipuri de exploatare XSS - Partea 3: XSS bazat pe Dom]()
Segmentul JavaScript este responsabil pentru obținerea valorii din parametrul mesajului și imprimarea acesteia. Din această verificare laxă a intrărilor, este complet posibil să păcăliți utilizatorii să acceseze adrese URL periculoase.
În loc de turnare:
message=Please fill in the form
apoi transmite:
message=GenderMaleFemale
function show(){alert();}
Apoi formularul de înregistrare va arăta astfel:
![Web9: Tipuri de exploatare XSS - Partea 3: XSS bazat pe Dom Web9: Tipuri de exploatare XSS - Partea 3: XSS bazat pe Dom]()
Utilizatorii nu vor fi suspicioși de o formă „normală” ca aceasta, iar atunci când selectează genul, Scriptul va fi executat:
![Web9: Tipuri de exploatare XSS - Partea 3: XSS bazat pe Dom Web9: Tipuri de exploatare XSS - Partea 3: XSS bazat pe Dom]()
Voi explica puțin mai multe despre valoarea transmisă în parametrul mesajului:
GenderMaleFemale
function show(){alert();}
Scopul său principal este de a executa funcția show() de fiecare dată când există un eveniment onchage pe eticheta select.Funcția show() de aici apare pur și simplu pentru a arăta că scriptul a fost executat. Cu toate acestea, în realitate, hackerii vor folosi adesea această funcție show() pentru a executa un script care transmite valoarea cookie-ului utilizatorului către un server predeterminat.Cititorii pot consulta articolul Reflected XSS care menționează cum creează hackerii Cum arată această solicitare?
Acest exemplu ne oferă două concluzii importante. În primul rând, codul rău intenționat a fost executat imediat după ce s-a făcut clic pe valoarea din eticheta select, ceea ce înseamnă că a fost executat chiar pe partea clientului fără a trece prin răspunsul serverului. În al doilea rând, structura HTML a fost schimbată cu scriptul transmis. Și putem vedea, de asemenea, scenariul real de exploatare, DOM Based este oarecum mai asemănător cu Reflected decât Stored XSS atunci când vine vorba de a păcăli utilizatorii să acceseze o adresă URL încorporată cu cod rău intenționat.
Următoarea figură descrie fiecare pas în implementarea tehnicii de atac XSS bazat pe DOM:
![Web9: Tipuri de exploatare XSS - Partea 3: XSS bazat pe Dom Web9: Tipuri de exploatare XSS - Partea 3: XSS bazat pe Dom]()
Mai jos este un videoclip cu un membru al forumului WhiteHat.vn care efectuează un exploit prin XSS bazat pe DOM:
Noroc!