Jau minėjome dviejų tipų XSS išnaudojimus : atspindėtus ir saugomus. Jie visi turi bendrą bruožą, kad įdėjus pavojingą kodą, jis bus paleistas po serverio atsakymo, o tai reiškia, kad klaida slypi serverio pusėje. serveris. serveris. Yra ir kitas XSS išnaudojimo tipas, kuris prieštarauja šiai funkcijai. Kenkėjiškas kodas iš karto vykdomas kliento pusėje, neperžengiant serverio, žinomas kaip DOM pagrįstas XSS arba dar žinomas kaip 0 tipo XSS.
Pirmiausia turime žinoti, kas yra DOM?
DOM, trumpinys iš Document Object Model, yra standartinė W3C forma (http://www.w3.org/DOM/), skirta struktūrinių dokumentų, tokių kaip HTML ir XML, duomenims nuskaityti ir jais valdyti. Šis modelis vaizduoja dokumentus kaip hierarchinę medžio struktūrą. Visi HTML ir XML elementai laikomi mazgu.
DOM pagrįstas XSS yra XSS išnaudojimo technika, pagrįsta dokumento DOM struktūros keitimu, ypač HTML.
Pažvelkime į konkretų pavyzdį žemiau:
Svetainėje yra toks registracijos puslapio URL:
example.com/register.php?message=Please fill in the form
Kai pasiekiame ją, matome labai įprastą formą:

Galite lengvai nustatyti pranešimo parametrą, perduotą į pranešimo turinį formoje, atidžiai peržiūrėkite šio pranešimo šaltinio kodą:

„JavaScript“ segmentas yra atsakingas už reikšmės gavimą iš pranešimo parametro ir jos spausdinimą. Dėl šio nerūpestingo įvesties tikrinimo visiškai įmanoma priversti vartotojus pasiekti pavojingus URL.
Užuot perdavęs:
message=Please fill in the form
tada perduokite:
message=GenderMaleFemale
function show(){alert();}
Tada registracijos forma atrodys taip:

Vartotojai nesukels įtarimų dėl tokios „įprastos“ formos, o pasirinkus lytį, scenarijus bus vykdomas:

Paaiškinsiu šiek tiek daugiau apie pranešimo parametre perduotą reikšmę:
GenderMaleFemale
function show(){alert();}
Pagrindinis jos tikslas yra vykdyti funkciją show() kiekvieną kartą, kai žymoje yra onchage įvykis.Funkcija show() čia tiesiog pasirodo, kad parodytų, kad scenarijus buvo įvykdytas. Tačiau iš tikrųjų įsilaužėliai dažnai naudoja šią funkciją „show()“, kad vykdytų scenarijų, kuris perduoda vartotojo slapuko reikšmę į iš anksto nustatytą serverį. Skaitytojai gali peržiūrėti straipsnį „ Reflected XSS“ , kuriame minima, kaip įsilaužėliai kuria Kaip atrodo ši užklausa?
Šis pavyzdys pateikia dvi svarbias išvadas. Pirma, kenkėjiškas kodas buvo paleistas iš karto spustelėjus reikšmę pasirinkimo žymoje, o tai reiškia, kad jis buvo vykdomas tiesiai kliento pusėje, neperžiūrint serverio atsakymo. Antra, HTML struktūra buvo pakeista perduotu scenarijumi. Taip pat matome tikrąjį išnaudojimo scenarijų, kai DOM pagrįstas yra šiek tiek panašesnis į Reflected nei saugomas XSS, kai kalbama apie vartotojų apgaudinėjimą, kad jie pasiektų URL, įterptą su kenkėjišku kodu.
Toliau pateiktame paveikslėlyje aprašomas kiekvienas DOM pagrįstos XSS atakos technikos diegimo veiksmas:

Žemiau yra vaizdo įrašas, kuriame WhiteHat.vn forumo narys atlieka išnaudojimą per DOM pagrįstą XSS:
Sėkmės!