CSRF — Low
Welkom bij Cross-Site Request Forgery (CSRF). Dit is een kwetsbaarheid waarbij een aanvaller een ingelogde gebruiker misleidt om zonder dat hij het weet ongewenste acties uit te voeren.
1. Predict (Voorspel)
Kijk naar de manier waarop een ingelogde gebruiker (zoals de admin) op het Low level zijn wachtwoord verandert. Wanneer hij op Opslaan klikt, ziet de URL er zo uit:
http://localhost/DVWA/vulnerabilities/csrf/?password_new=wachtwoord&password_conf=wachtwoord&Change=Change
Vraag: Stel, jij bent een kwade hacker. Je stuurt een mail naar de beheerder (admin) van DVWA met een grappig plaatje, maar onder het plaatje verstop je een onzichtbare HTML afbeelding:
<img src="http://localhost/DVWA/vulnerabilities/csrf/?password_new=hacked&password_conf=hacked&Change=Change" style="display:none;">
Wat gebeurt er als de admin op dat moment toevallig in zijn browser op DVWA ingelogd is, en de mail opent?
Antwoord
De browser probeert de verborgen 'afbeelding' in te laden door de URL op te vragen. Omdat de admin nog is ingelogd op DVWA, voegt zijn browser netjes zijn sessie-cookies toe aan het verzoek. De webserver krijgt een geldige aanvraag ("verander het wachtwoord naar 'hacked'!") afkomstig van de admin. En boem: het wachtwoord van de admin is zonder dat hij ook maar iets heeft ingetypt veranderd! Dit is de essentie van CSRF.
2. Run & Investigate
Start het lab hieronder. Je ziet een venster om je wachtwoord te wijzigen.
Probeer het wachtwoord te veranderen.
3. Modify & Make (Aanpassen & Maken)
Bouw nu zelf een "kwaadaardige" URL om het wachtwoord van buitenaf te forceren.
Tip
Kijk goed naar de structuur van het HTTP GET-request (de URL uit de Predict-fase). Verander de waarden achter de = tekens.
Antwoord
Maak een URL zoals: ?password_new=12345&password_conf=12345&Change=Change. In een real-life scenario zou je een slachtoffer verleiden om op deze link te klikken. Zodra de link in de achtergrond laadt, is het wachtwoord gewijzigd zonder waarschuwing!
4. ✓ Wat moest je zien?
- Na het laden van de URL met
password_new=…&password_conf=…&Change=Changeverschijnt "Password Changed" op de pagina. - Je hebt geen formulier ingevuld: het wachtwoord werd gewijzigd puur door de URL aan te roepen — dát is de essentie van CSRF.
- In de URL-balk staan beide wachtwoorden zichtbaar (GET-parameters), wat aantoont dat een verborgen
<img src="…">precies hetzelfde effect zou hebben.
Krijg je een foutmelding zoals "Passwords did not match"? Controleer dat password_new en password_conf exact dezelfde waarde hebben in de URL.