Ga naar hoofdinhoud

XSS (Reflected) — Low

Welkom bij Cross-Site Scripting (XSS). In dit lab leer je hoe hackers kwaadaardige JavaScript-code kunnen verstoppen in links en invoervelden.

1. Predict (Voorspel)

De code op het Low niveau is heel simpel. Je vult je naam in en de website begroet je:

$name = $_GET[ 'name' ];
echo "Hello " . $name;

Vraag: Wat gebeurt er als een gebruiker de volgende vreemde tekst als naam invult: <script>alert("Hacked!");</script> ?

Antwoord

Omdat de tekst direct en ongefilterd door echo op de webpagina wordt uitgeprint, denkt jouw webbrowser dat de <script> tag daadwerkelijk een stukje bijbehorende broncode van de website is! De browser voert het script direct uit en toont een pop-up (alert) met de tekst "Hacked!".

2. Run & Investigate

Start het lab hieronder.

Laden...

Vul een gewone naam in en zie hoe deze op het scherm wordt weerspiegeld (reflected). Kijk vervolgens naar de broncode van de module.

3. Modify & Make (Aanpassen & Maken)

Tijd om je eerste XSS aanval te lanceren. Het doel is om een JavaScript pop-up box op je eigen scherm te laten verschijnen.

Tip

Gebruik de code uit de Predict fase. Plak het letterlijk in het tekstvak en klik op Submit.

Antwoord

Vul in: <script>alert(1);</script>. Zodra je op Submit klikt, voert jouw browser de code uit. In een echte aanval zou de hacker jou een linkje sturen waarin dit script al zit verstopt (bijv: http://website.nl/?name=<script>...). Zodra jij klikt, ben je gehackt!

4. ✓ Wat moest je zien?

Controle
  • Direct na Submit verschijnt een JavaScript-popup (alert) met de tekst 1 (of wat je in alert() zette).
  • Op de pagina zelf staat na de popup Hello zonder dat je script zichtbaar is — de browser heeft je <script>-tag uitgevoerd in plaats van geprint.
  • In de URL staat je payload letterlijk terug, bijvoorbeeld ?name=<script>alert(1);</script>.

Krijg je geen popup, maar zie je je script als platte tekst? Dan blokkeert je browser inline scripts (XSS Auditor / strikte CSP). Probeer een andere browser of gebruik DVWA zoals bedoeld.

5. Er gaat iets mis...

Wat als je probeert een geavanceerd script te injecteren, maar de webpagina toont simpelweg letterlijk de tekst <script>... op het scherm in plaats van het uit te voeren? Dit is eigenlijk precies wat we willen (als beveiliger)! Dit gebeurt wanneer de input wordt weergegeven in een veld dat al sterk beveiligd is, of in een moderne browser die XSS Auditor of Content Security Policy (CSP) heeft ingeschakeld. Zorg ervoor dat je dergelijke beveiligingen uitschakelt of DVWA gebruikt zoals bedoeld om te leren hoe de basisaanval werkt.