Ga naar hoofdinhoud

JavaScript Attacks โ€” Low

Dit onderdeel draait om client-side logica. We kijken wat er misgaat als een webserver beveiligingsbeslissingen overlaat aan JavaScript-code in de browser van de gebruiker.

1. Predict (Voorspel)โ€‹

Wanneer de pagina laadt, roept JavaScript de functie generate_token() aan en verbergt het resultaat in een verborgen formulierveld. Wanneer je het formulier verzendt met het woord success, controleert de backend of het token overeenkomt met de hash van dat woord.

Vraag: Je typt success in het tekstvak en klikt op Submit. De pagina geeft "Invalid Token". Waarom?

Antwoord

JavaScript heeft het token aangemaakt voor het standaardwoord dat al in het veld stond (bijv. ChangeMe). Toen jij de tekst veranderde naar success, werd het token niet automatisch bijgewerkt. De PHP-backend ontvangt het woord success maar het token voor ChangeMe โ€” die matchen niet, dus de server weigert de boel.

2. Run (Uitvoeren)โ€‹

Start het lab en bekijk het formulier.

Laden...

โš ๏ธ Labbeperking: Deze aanval vereist toegang tot de F12 Console van de kwetsbare pagina. Omdat het lab in een beveiligd iframe draait, is dit beperkt mogelijk. Voor de volledige ervaring heb je een lokale DVWA-installatie nodig.

Vul het woord success in het tekstvak in en klik op Submit. Observeer de foutmelding.

3. Investigate (Onderzoeken)โ€‹

Open F12 โ†’ Elements en zoek naar het verborgen invoerveld met type="hidden". Bekijk de waarde van het token-veld vรณรณr en nadat je success in het zichtbare veld typt.

Vraag: Verandert de token-waarde mee wanneer je de tekst aanpast? Wat onthult dit over wie het token bepaalt?

Antwoord

Het token verandert niet mee โ€” het staat vast op de waarde die JavaScript heeft berekend voor het standaardwoord. Dit onthult dat het token volledig door JavaScript in de browser wordt bepaald. De browser heeft de logica, dus de gebruiker heeft de controle: als we de juiste JavaScript-functie aanroepen met het woord success, wordt het token correct bijgewerkt.

4. Modify & Make (Aanpassen & Maken)โ€‹

Roep de JavaScript-functie handmatig aan via de F12 Console om het token voor success te genereren.

Tip

Ga in F12 naar het tabblad Console. Alle JavaScript-functies op de pagina zijn vanuit de Console aanroepbaar. Zoek in de broncode (tabblad Sources) naar de functienaam die tokens genereert.

Antwoord
  1. Open F12 โ†’ Console.
  2. Typ: generate_token("success") en druk op Enter.
  3. Het script berekent nu het correcte token voor success en stopt het in het verborgen formulierveld.
  4. Klik daarna op Submit. De server accepteert je request!

5. โœ“ Wat moest je zien?โ€‹

:::tip Controle

  • Het direct indienen van success geeft "Invalid Token" โ€” het token klopt niet.
  • Na het aanroepen van generate_token("success") in de Console slaagt het formulier.
  • De server accepteert de request, wat bewijst dat het beveiligingssysteem volledig client-side is.

Werkt de Console niet in het lab? Probeer het in een lokale DVWA-installatie. :::

6. Er gaat iets mis...โ€‹

Als een webserver blind de input van een browser gelooft zolang de "rekensom" klopt, noem je zo'n systeem "Client-Authoritative". Bij online games zie je dit veel: als de game-client beslist of een schot raak was en de server dat klakkeloos goedkeurt, staat de deur wagenwijd open voor cheaters. Never trust the client!