SQL-injectie

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

SQL-injectie — Trainingsstappen

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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 .

  9. 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.

  10. 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