Identifikation von SQL-Injektions-Schwachstellen

SQL-Injection (SQLi) gehört zu den häufigsten Formen von Code-Injections. Bei einem SQLi-Angriff manipuliert der Angreifer eine oder mehrere der vier grundlegenden SQL-Funktionen (SELECT, INSERT, DELETE, UPDATE), indem er eigenen Code in Eingabefelder einer Webanwendung einbettet. Dadurch kann er eigene SQL-Abfragen ausführen lassen.

Testen aller Eingabepunkte

Um SQL-Injektionslücken in einer Webanwendung zu identifizieren, sollten sämtliche Eingabepunkte getestet werden:

  • URL-Parameter
  • Formularfelder
  • Cookies
  • POST-Daten
  • HTTP-Header

Single-Quote-Methode

Die einfachste und gängigste Methode zur Identifizierung potenzieller SQLi-Schwachstellen ist das Einfügen eines einzelnen Apostrophs (') in ein Eingabefeld und das Beobachten der Reaktion. Gibt die Anwendung einen Fehler zurück, kann dieser Hinweise auf die SQL-Syntax liefern, die für weiterführende Angriffe genutzt werden können.

Beispiel:

Angenommen, die Anwendung führt folgende SQL-Abfrage aus:

SELECT * FROM users WHERE username = 'Bob' AND password = 'Pa22w0rd'

Wird im Benutzernamen-Feld ein Apostroph eingegeben, könnte die Abfrage wie folgt aussehen:

SELECT * FROM users WHERE username = ''' AND password = 'Pa22w0rd'

Dies führt zu einem Syntaxfehler, da das zusätzliche Apostroph die Zeichenkette unterbricht. Die vom Server zurückgegebene Fehlermeldung kann Aufschluss über die verwendete Datenbank und die Abfragestruktur geben.

Logische Bedingungen und Kommentare nutzen

Durch Einfügen von Werten, die immer wahr sind (z.B. 1=1), und Nutzung von SQL-Kommentaren (--), kann ein Angreifer syntaktisch korrekte, aber logisch manipulierte Abfragen erstellen.

Manipulierte Eingabe:

' OR 1=1--

Resultierende SQL-Abfrage:

SELECT * FROM users WHERE username = '' OR 1=1--' AND password = 'Pa22w0rd'

Durch die immer wahre Bedingung 1=1 und das Kommentieren des restlichen Codes wird die Abfrage so verändert, dass alle Datensätze zurückgegeben werden.

Nutzung von UNION für erweiterte Abfragen

Einige Webanwendungen erlauben das Stapeln mehrerer Abfragen oder die Nutzung des UNION-Operators, um Ergebnisse aus verschiedenen Tabellen zu kombinieren. Dies kann benutzt werden, um an Daten zu gelangen, die normalerweise nicht sichtbar sind.

Beispiel:

UNION SELECT '1', '2' FROM users--

Hier werden die Ergebnisse der ursprünglichen Abfrage mit denen aus der Tabelle users kombiniert. Da UNION nur funktioniert, wenn beide Abfragen die gleiche Anzahl an Spalten haben, muss die Anzahl der ausgewählten Spalten angepasst werden.

Angepasste Abfrage:

UNION SELECT '1', username, password, '4', '5' FROM users--

Diese Abfrage fügt die username- und password-Daten aus der users-Tabelle in die Ergebnistabelle ein.

Blind SQL Injection

In einigen Fällen zeigt die Webanwendung keine Fehlermeldungen oder Daten an, selbst wenn eine SQLi-Schwachstelle vorliegt. Dies wird als Blind SQL Injection bezeichnet.

Boolean-basierte Blind SQLi

Durch Einfügen von Bedingungen, die entweder wahr oder falsch sind, und Beobachtung der Reaktionen der Anwendung kann festgestellt werden, ob eine Schwachstelle existiert.

Beispiele:

  • Wahr: ' OR '1'='1'--
  • Falsch: ' OR '1'='2'--

Time-basierte Blind SQLi

Hierbei werden Zeitverzögerungen in die Abfrage eingefügt, um anhand der Antwortzeit Rückschlüsse zu ziehen.

Beispiel:

'; WAITFOR DELAY '0:0:05'--

Wenn die Antwort der Anwendung verzögert eintrifft, ist dies ein Hinweis darauf, dass die Eingabe als Teil der SQL-Abfrage ausgeführt wurde.

Fazit

Das Identifizieren von SQL-Injektions-Schwachstellen erfordert systematisches Testen aller Eingabepunkte einer Webanwendung und das Nutzen verschiedener Techniken, um Sicherheitslücken aufzudecken.

Schlagwörter

SQLInjectionSQLiSicherheitWebSecurityCodeInjectionCyberSecurityBlindSQLiUNIONAttack

Gehacktes-Overview