Injectie
Verander een zoekvak in een leesfunctie van de hele database.
Wat is Injectie?
Niet-vertrouwde invoer wordt samengevoegd tot een query die een tolk vervolgens parseert, zodat de invoer niet langer een waarde is en onderdeel wordt van de instructie. U escaleert een cataloguszoekeindpunt in drie stappen: een enkel aanhalingsteken genereert een onbewerkte SQL-fout die de query terugstuurt, een altijd-waar-voorwaarde verwijdert het gepubliceerde filter, en UNION SELECT bereikt een andere tabel voor account-e-mails, bcrypt-hashes en rollen. De fix is een gebonden parameter, dus de database compileert eerst de instructie. Het retourneren van een onbewerkte SQL-fout geeft een aanvaller ook de kaart.
Wat je leert in Injectie
- Herkennen van SQL-injectie: een verzoekparameter die is samengevoegd in een query die de database vervolgens parseert, zodat de invoer de query kan herschrijven en gegevens kan bereiken die het eindpunt nooit had willen retourneren
- Lees de escalatie van een probe met enkele aanhalingstekens die een SQL-fout lekt, naar een altijd-waar-voorwaarde die een filter verwijdert, naar een UNION SELECT die een andere tabel volledig dumpt
- Begrijp dat injectie niet afhankelijk is van gestolen inloggegevens of ontbrekende authenticatie; een gewoon, volledig geauthenticeerd account kan via elke invoer die de server als code behandelt, injecteren
- Pas de oplossing toe: gebruik geparametriseerde query's of voorbereide instructies, zodat de waarde afzonderlijk wordt gebonden en als gegevens wordt behandeld, in plaats van met de hand geschreven ontsnappingscodes of blokkeerlijsten met gevaarlijke tekens
- Voorkom dat onbewerkte SQL-fouten naar clients lekken en controleer elk eindpunt dat een query, opdracht of sjabloon bouwt op basis van invoer voor hetzelfde aaneenschakelingspatroon
Injectie — Trainingsstappen
-
Een gewone kopersstoel
Wexlar beheert een groothandelsmarktplaats en deelt zelfbedieningskopersaccounts uit aan iedereen die zich aanmeldt. Bob nam er een, met een wegwerpidentiteit. Zijn stoel is een eenvoudige koper: blader door de catalogus, plaats bestellingen, niets bevoorrecht. Hij opent de ontwikkelaarsconsole om te zien wat het account is en wat de API biedt.
-
Eén zoekvak
Niets in Bob's account is bevoorrecht, dus er zijn geen beheerdersfuncties te bereiken. De enige input die hem interesseert is het zoeken in de catalogus: het neemt alles wat hij typt en voert een naammatch uit met de productendatabase.
-
Een normale zoektocht
Bob begint met een gewone zoektocht om het eindpunt te zien werken en de vorm ervan te leren kennen. De zoekopdracht gebruikt een q -queryparameter en retourneert de producten waarvan de naam overeenkomt.
-
Werken zoals bedoeld
De zoekopdracht gedraagt zich precies zoals verwacht. Drie gepubliceerde laptops, alleen de velden die een koper zou moeten zien.
-
Voeg een enkel citaat toe
De oudste injectiesonde die er is: Bob voegt een enkel aanhalingsteken toe aan zijn zoekterm. Als er naar de term als waarde wordt gezocht, levert een zoekopdracht naar een naam met een aanhalingstekens eenvoudigweg niets op. Als het wordt samengevoegd in SQL, zal het verdwaalde citaat de query verbreken.
-
De vraag, opengebroken
Eén extra personage crashte het eindpunt en de fout gaf Bob de bevestiging die hij wilde.
-
Herschrijf het filter
Nu Bob weet dat de term onderdeel wordt van de vraag, stopt hij met het breken ervan en begint hij te sturen. Hij bedenkt een term die de string afsluit, voegt een voorwaarde toe die altijd waar is, en geeft commentaar op de rest van de oorspronkelijke zoekopdracht.
-
De hele tafel
Het filter dat de zoekopdracht beperkte tot gepubliceerde producten is verdwenen, en de reactie bewijst dit.
-
Bereik een andere tafel
Elk product lezen is slecht; het lezen van tafels waarvan de zoekopdracht nooit bedoeld was om aan te raken, is erger. Bob gebruikt een UNION om rijen uit een andere tabel aan de resultaten toe te voegen, waarbij hij hetzelfde aantal kolommen selecteert als de productquery retourneert.
-
Het referentiearchief in een zoekresultaat
De rijen die terugkwamen zijn helemaal geen producten.
Dekking van beveiligingsframeworks
OWASP API Top 10
- API8:2019 Injection
CWE
- CWE-74 Improper Neutralization of Special Elements in Output ('Injection')
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