SQL Injection
SQL-Injection ist das Ausnutzen einer Sicherheitslücke in Zusammenhang mit SQL-Datenbanken. Die Sicherheitslücke entsteht durch einen Programmierfehler in einem Programm, das auf die Datenbank zugreift. Durch diesen Programmierfehler kann ein Angreifer Datenbankbefehle einschleusen und abhängig vom Einzelfall weitere Daten aus der Datenbank auslesen, Daten unberechtigt ändern oder löschen oder sogar die Kontrolle über den kompletten Datenbankserver übernehmen.
Payload-Arten und Remediation
Payload: Boolean blind SQLi
id=4 AND 1=1 id=4 AND 1=0
AND erfüllt ggf. den Zweck besser als OR, da “..AND 1=0” in keinem Fall ein Ergebnis liefert, also das Resultat leer wäre.
⇒ Erkennt man gut.
- Definition: “A type of SQL Injection attack that asks the database true or false questions and determines the answer based on the application's response.”
- Remediation: Input Sanitization, Parameterized Queries / Prepared Statements, blocken d. Schlüsselwörter wie AND
Merkmale bei “Blind” Injection: Man vergleicht verschiedene Query-Varianten um die Injection zu beweisen. Z.B. TRUE und FALSE (1=1 versus 1=0 Ergebnis). Oder Zeiträume bei “Time Based Blind Injection” (5 Sekunden ‘Sleep’ vs. 50 Sekunden ‘Sleep’).
Man kann potentiell nicht sofort direkt Daten auslesen oder Ergebnisse sehen (wie in detaillierten SQL Error-Ausgaben).
Payload: TIME BASED BLIND SQLi
id=4 AND sleep(5)
oder “waitfordelay(10)”
- Remediation: Input Sanitization, Parameterized Queries a.k.a. Prepared Statements Schlüsselwörter filtern (sleep, waitfordelay)
Payload: Reflected XSS
searchterm=martin"><img onerror=alert(2)>
- Remediation: Input Sanitization, die entsprechenden Zeichen und Befehle encoden/escapen oder verbieten: “ > < ( ) script print alert onerror… (escapen = umwandeln von “<” in < oder von “>” in >)
User Input nicht direkt unverändert wieder in die Seite ausgeben.
Payload: Stored XSS
USER=martin&username_neu=<script>print(document.cookie)</script>
- Remediation: Input Sanitization, die entsprechenden Zeichen und Befehle encoden/escapen oder verbieten: “ > < ( ) script print alert onerror…
Payload: Out-of-band SQLi (Resultat über ANDEREN Weg übermittelt)
id=5; EXEC(q)
- Remediation: Input Sanitization, Parameterized Queries / Prepared Statements, blocken d. Schlüsselwörter wie AND und von Zeichen wie ; (Semikolon)
