SQL Injection — Low
Welkom bij SQL Injection. Door slimme tekst in een invoerveld te typen kun je de database-opdracht erachter veranderen — en zo gegevens opvragen die niet voor jou bedoeld zijn.
1. Predict (Voorspel)
Kijk naar deze (vereenvoudigde) code die zoekt naar een gebruiker op basis van een ID:
$id = $_REQUEST[ 'id' ];
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
Vraag: Wat wordt de volledige SQL query als een gebruiker niet 1 invult, maar de tekst hallo? En wat als iemand 1' invult (met een enkel aanhalingsteken erachter)?
Antwoord
Met hallo wordt de query:
SELECT ... WHERE user_id = 'hallo'; — geen resultaat, maar geen fout.
Met 1' wordt de query:
SELECT ... WHERE user_id = '1''; — het aanhalingsteken sluit de string te vroeg, waarna er een onverwacht tweede ' overblijft. Dit is een syntax error in SQL.
2. Run (Uitvoeren)
Start het lab en bekijk hoe de applicatie normaal werkt.
Vul achtereenvolgens 1, 2 en 3 in en klik telkens op Submit. Observeer wat je terugkrijgt.
3. Investigate (Onderzoeken)
Typ nu 1' (een getal gevolgd door één enkel aanhalingsteken) in het veld en klik op Submit.
Vraag: Wat zie je op het scherm? Wat onthult die reactie over hoe de applicatie werkt?
Antwoord
Je ziet waarschijnlijk een rode foutmelding zoals:
You have an error in your SQL syntax near ''1''' at line 1
Dit vertelt je drie dingen:
- De applicatie plakt jouw invoer ongefilterd rechtstreeks in de SQL query.
- De foutmelding lekt terug naar de browser — de applicatie is slecht geconfigureerd.
- De database is MySQL (de foutmeldingsopmaak verraadt het systeem).
De applicatie is kwetsbaar. Nu weet je waar je in kunt breken. Wat je nodig hebt: een payload die de SQL-syntax weer geldig maakt én de query naar jouw hand zet.
4. Modify & Make (Aanpassen & Maken)
Je weet nu dat de applicatie kwetsbaar is en hoe de SQL eruitziet. Jouw doel: één payload invoeren die alle gebruikers in de database ophaalt in plaats van slechts één.
Bedenk: welke toevoeging achter 1' maakt de WHERE-clausule altijd waar — zonder de SQL syntax te breken?
Tip
Je hebt een OR-conditie nodig die altijd WAAR is. De truc is dat je het openstaande aanhalingsteken in de query correct moet 'sluiten'. Denk aan iets als 'A' = 'A'.
Antwoord
Vul exact dit in: 1' OR '1'='1 en klik op Submit.
De server voert dan uit:
SELECT ... WHERE user_id = '1' OR '1'='1';
Omdat '1'='1' altijd waar is, geeft de database alle rijen terug.
Als je een lege pagina krijgt, probeer dan: 1' OR '1'='1' # — het hekje commentarieert de rest van de query weg.
5. ✓ Wat moest je zien?
- Er verschijnt een lijst met alle 5 gebruikers (Voornaam + Achternaam), niet slechts één.
- Geen SQL-foutmelding (rode balk).
- In het ID-veld staat jouw payload.
Zie je maar één gebruiker? Controleer of je exact 1' OR '1'='1 hebt ingevuld met enkele aanhalingstekens en klik op Submit.
6. Er gaat iets mis...
Als je per ongeluk 1" OR "1"="1 typt (met dubbele in plaats van enkele aanhalingstekens), krijg je misschien opnieuw een SQL Syntax Error.
Dit komt omdat de database string-waardes verwacht in enkele aanhalingstekens. Hackers zijn stiekem héél blij met dit soort foutmeldingen — een error bevestigt de kwetsbaarheid én verklapt welke database op de achtergrond draait.