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.

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)”

Payload: Reflected XSS

searchterm=martin"><img onerror=alert(2)>			

User Input nicht direkt unverändert wieder in die Seite ausgeben.

Payload: Stored XSS

USER=martin&username_neu=<script>print(document.cookie)</script>	

Payload: Out-of-band SQLi (Resultat über ANDEREN Weg übermittelt)

id=5; EXEC(q)						

Links