-In deze en de volgende lezingen
gaan we het hebben over een kwetsbaarheid die XSS heet.
XSS staat voor Cross Site Scripting.
Met dit soort kwetsbaarheid kan een aanvaller
JavaScript in een pagina injecteren.
Dus JavaScript is een programmeertaal.
Met behulp van dit lek kan een aanvaller
code, geschreven in JavaScript, uitvoeren
op een bepaalde pagina
van een website.
JavaScript is een client-side taal,
dus wanneer de code wordt uitgevoerd, wordt deze
uitgevoerd op de client, op de gebruiker, op
de persoon die de webpagina bekijkt.
Het wordt niet uitgevoerd op
de server, dus zelfs als je code
resulteert in een reverse shell, zal
de shell afkomstig zijn van de gebruiker
die de pagina bekijkt,
en niet van de website.
Dus elke code die je schrijft in JavaScript zal worden uitgebuit
of zal draaien op de doelgebruiker,
op de mensen die de pagina's
zien en niet op de webserver.
De webserver wordt dus alleen gebruikt om de code
uit te voeren of om de code af te leveren.
Er zijn drie hoofdtypes van XSS-kwetsbaarheden:
Persistent of Stored, Reflected en DOM
based.
De opgeslagen XSS wordt opgeslagen in de database, dus
de code die u injecteert wordt opgeslagen in de database
of in de pagina, zodat
elke keer dat iemand die pagina bekijkt, uw code wordt
uitgevoerd.
Bij de gereflecteerde wordt de
code alleen uitgevoerd wanneer
de beoogde gebruiker een specifieke door u gemaakte
of geschreven URL uitvoert.
Dus je manipuleert een soort URL en stuurt
die naar een doel en wanneer
ze dat doel uitvoeren,
wordt de code uitgevoerd.
De DOM is gebaseerd op JavaScript-code die op de client is
geschreven.
De code wordt dus feitelijk geïnterpreteerd
en uitgevoerd aan de clientzijde
zonder enige communicatie met de webserver.
Deze kunnen zeer gevaarlijk
zijn, want soms passen webservers een soort beveiliging en filtering
toe om te controleren op XSS.
Maar met DOM wordt de code nooit naar de webserver
gestuurd.
De code wordt dus geïnterpreteerd en uitgevoerd in de webbrowser
zonder dat er interactie is met de webserver.
En deze zullen aanwezig zijn in websites die hun inhoud
bijwerken zonder te verversen.
We hebben allemaal wel eens websites gebruikt waar je bijvoorbeeld
je gebruikersnaam
invult, en die meteen
wordt geladen zonder dat je dat met de webserver hoeft te controleren,
of je vult een soort string in en die doet een
zoekopdracht zonder met een webserver te communiceren of doet iets
zonder met de webserver te communiceren.
Dus als je daarin kunt injecteren, dan
wordt deze injectie niet gevalideerd, dus
hij wordt meteen uitgevoerd en omzeilt
alle validaties.