SQL-injectie
Eén aanhalingsteken in een opzoekveld herschrijft de query.
Wat is SQL-injectie?
Een door de gebruiker aangeleverde tekenreeks wordt samengevoegd tot een query, en die tekenreeks kan veranderen waar de query om vraagt. Elk verzoek hier draait tegen een echte ingebedde database, dus er is niets nagemaakt. U verbreekt een formulier voor het opzoeken van accounts met een enkele aanhalingstekens, retourneert de hele ledentabel met ' OR '1'='1 en gebruikt vervolgens UNION SELECT en information_schema om beheerders-e-mails en wachtwoord-hashes eruit te halen. De oplossing bindt de waarde als een parameter, zodat de SQL-grammatica de invoer nooit als code parseert. Geen opschoning, geen firewall-blokkeerlijst.
Wat je leert in SQL-injectie
- Herken de tautologie uit het leerboek SQL-injectie 'OR '1'='1 en leg uit waarom een altijd-waar-voorwaarde een WHERE-filter omzeilt
- Traceren hoe een opzoekeindpunt met één rij een volledige tabellezing wordt wanneer de parameter ervan wordt samengevoegd in de SQL-tekenreeks
- Gebruik UNION SELECT om databasetabellen op te sommen via information_schema en rijen op te halen uit een tabel waarvoor het formulier nooit bedoeld was om openbaar te maken, zoals admin_users
- Maak onderscheid tussen geparametriseerde queries (de betrouwbare verdediging) en string-manipulatie-verdedigingen zoals blocklists, escapes en WAF-regels, en leg uit waarom alleen de geparametriseerde aanpak geldt
- Lees een kwetsbare database-handler goed genoeg om de concatenatiefout te ontdekken en bevestig vervolgens de geparametriseerde oplossing door de exacte payload opnieuw uit te voeren op het gepatchte eindpunt en nul rijen te zien
SQL-injectie — Trainingsstappen
-
Zoek het doelformulier
Bob heeft Vantyr in het vizier, een lidmaatschapsservice met een openbare account-lookup -pagina. Geen login, alleen een e-mailveld dat het abonnement van een lid retourneert. Dit is waar webaanvallen beginnen: een gewone vorm die stilletjes met een database praat.
-
Voer een normale zoekopdracht uit
Kijk eerst hoe het formulier zich normaal gedraagt. Voer het e-mailadres van een echt lid in en verstuur. Het Netwerkpaneel van de browser wordt geopend en registreert het verzoek, precies wat een ontwikkelaar ziet in DevTools.
-
Controleer het verzoek
Daar is het verzoek. De e-mail die u hebt getypt, wordt naar de server in het verzoek payload gestuurd en het antwoord retourneert het ene overeenkomende lid. Er is nog niets mis. Dit is hoe de functie moet werken.
-
Lees de handlercode
Nu het interessante deel: de servercode die dit verzoek afhandelt. Het bouwt de SQL-query op door uw e-mail rechtstreeks in de queryreeks te plakken. Die ene uitspraak is het hele probleem.
-
Zoek de kwetsbare lijn
Die ene verklaring is de hele kwetsbaarheid: uw invoer wordt in de SQL-tekenreeks geplakt en de opmerking toont de exacte zoekopdracht die naar de database is verzonden, live opnieuw opgebouwd op basis van wat u ook typt.
-
Breek het met een citaat
Het veld bevat nog steeds morgan.lee@example.com uit uw eerste zoekopdracht. Uw invoer komt terecht in een tekenreeks tussen aanhalingstekens, dus wat gebeurt er als u een prijsopgave verzendt? Voeg een enkel aanhalingsteken toe aan het einde en verzend het, en bekijk de uitgevoerde query -opmerking in de code die opnieuw wordt opgebouwd terwijl u typt: uw citaat belandt inside in de string en breekt deze af. Je verzendt geen gegevens meer. U bewerkt de query.
-
Lees de databasefout
De server retourneerde een 500 met een echte databasefout. Dat extra aanhalingsteken beëindigde de tekenreeks voortijdig en zorgde ervoor dat de query niet goed opgemaakt was. De database probeerde het uit te voeren en stikte. Een dergelijke fout betekent groen licht voor een aanvaller: de invoer bereikt de SQL-engine.
-
Omzeil het filter
Laat de zoekopdracht nu iets nuttigs voor u doen. Sluit de tekenreeks zelf, voeg een voorwaarde toe die altijd waar is , en het WHERE -filter stopt met filteren. De klassieker: ' OR '1'='1 .
-
Bekijk de volledige dump
Het filter is verdwenen. In plaats van één lid is het antwoord de tabel met volledige leden : elke e-mail en elk plan dat Vantyr heeft. U vroeg om één account en de database heeft ze allemaal overgedragen.
-
Kennis check
Je hebt zojuist één lading de hele tafel zien terugbrengen. Leg vast waarom.
Dekking van beveiligingsframeworks
OWASP Top 10
- A05:2025 Injection
- A03:2021 Injection
CWE
- CWE-89 Improper Neutralization of Special Elements used in an SQL Command
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security