Zeitbasierte SQL Injection Attacken: Unterschied zwischen den Versionen

Aus IT-Forensik Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 5: Zeile 5:


== SQL Injection mit einer Zeitverzögerung (Time Delay) ==
== SQL Injection mit einer Zeitverzögerung (Time Delay) ==


Zeitbasierte Attacken können genutzt werden, um grundlegende Informationen zur Datenbank zu ermitteln oder das Vorhandensein einer Schwachstelle. Es ist keine unübliche Vorgehensweise, wenn ein Angreifer mit einer zeitbasierten "Deep Blind SQLi" Attacke dem Zieldatenbanksystem Informationen entlocken will.
Zeitbasierte Attacken können genutzt werden, um grundlegende Informationen zur Datenbank zu ermitteln oder das Vorhandensein einer Schwachstelle. Es ist keine unübliche Vorgehensweise, wenn ein Angreifer mit einer zeitbasierten "Deep Blind SQLi" Attacke dem Zieldatenbanksystem Informationen entlocken will.

Version vom 23. Februar 2022, 23:14 Uhr


Zeitbasierte SQL Injection Attacken werden häufig dann genutzt, wenn andere Arten von SQLi wenig oder eingeschränkte Ergebnisse vom Zieldatenbanksystem liefern. Diese zeitbasierte Angriffsmethode schleust komplexere Abfragen in das SQL-Statement, die wiederum zu Zeitverzögerungen bei den Antworten oder hoher Auslastung am Zieldatenbanksystem führen sollen. Abhängig von der Zeit, die das Datenbanksystem benötigt, um zu antworten ist es möglich einige Informationen daraus zu ermitteln (Inferenzansatz, Informationserschließung). Diese Herangehensweise der Deduktion von Informationen ist sehr nützlich für sog. "Blind SQLi" und "Deep Blind SQLi".


SQL Injection mit einer Zeitverzögerung (Time Delay)

Zeitbasierte Attacken können genutzt werden, um grundlegende Informationen zur Datenbank zu ermitteln oder das Vorhandensein einer Schwachstelle. Es ist keine unübliche Vorgehensweise, wenn ein Angreifer mit einer zeitbasierten "Deep Blind SQLi" Attacke dem Zieldatenbanksystem Informationen entlocken will.

In folgender Tabelle wird exemplarisch aufgezeigt, wie die Ausführung der SQL-Anfrage verzögert werden kann in einigen Beispielen an unterschiedlichen DBMS Typen.


DBMS Befehl Beispiel Kommentare
MySQL SLEEP(Zeit) SELECT ... SLEEP(60) Die Zeitangabe erfolgt in Sekunden und ist verfügbar ab MySQL Version 5.
MySQL BENCHMARK(Anzahl, Ausdruck) SELECT BENCHMARK(100000000, 'SELECT ...') Führt die Anweisung vielfach aus. Mit der Nutzung einer zu Beginn hohen Zahl ist es möglich eine Verzögerung im Zieldatenbanksystem zu generieren
MS-SQL, Transact-SQL WAITFOR DELAY 'hh:mm:ss' SELECT ... WAITFOR DELAY '00:00:15' SELECT ... Verzögert die Ausführung des Befehls um den angegebenen Zeitraum
MS-SQL, Transact-SQL WAITFOR TIME 'hh:mm:ss' SELECT ... WAITFOR TIME '14:15:00' SELECT ... Verzögert die Ausführung des Befehls und führt diesen fort, wenn der angegebene Zeitpunkt erreicht ist

*Hinweis: Es ist von Vorteil für die Ausführung von zeitbasierten Attacken im Voraus zu wissen um welchen Typ Datenbanksystem es sich bei dem Zielsystem handelt. Sofern dies nicht bekannt ist, ist es möglich unterschiedliche zeitbasierte Anfragen abzusetzen, bis eine Antwort vom Zieldatenbanksystem zurückgegeben wird. Falls keine dieser Möglichkeiten zum gewünschten Ergebnis führt, sollte auf die Ergebnisse von "Enumerieren" und "Fingeprinting" für das Zielsystem zurückgegriffen werden, um den Datenbanktypen zu ermitteln.


Das Identifizieren von Schwachstellen ist nicht der einzige Einsatzzweck zeitbasierter SQLi Attacken. Sofern der Angreifer Verzögerungen in Prozeduren, bzw. Statements mit Bedingungen (z.B. CASE oder IF) integriert, ist es möglich, dass die Zieldatenbank Systeminformationen oder auch Daten preisgibt. Diese Methode basiert auf dem Inferenzansatz oder auch der Informationserschließung.

Vereinfacht dargestellt, wenn ein Angreifer eine Zeitverzögerung in ein Bedingungs-Statement integriert, hat der Angreifer die Möglichkeit geschaffen dem Zieldatenbanksystem eine Ja/Nein Frage zu stellen. Die Antwort des Datenbanksystems hängt somit von diesem Zeitfaktor ab (wäre fallweise ungewöhnlich lang) und lässt den Angreifer ermitteln, ob die Antwort Ja oder Nein war und daraus weiterführende Informationen erschließen.

In folgender Tabelle werden exemplarisch für einige Datenbanksysteme beispielhaft Bedingungs-Statements aufgeführt:

DBMS Bedingungs- Anweisung Kommentare
MySQL IF(Bedingung, wenn_wahr, wenn_falsch) Nur innerhalb eines SQL Statements möglich. In einer Prozedur ist die Syntax analog zu der von Oracle-SQL (PL-SQL)
MS-SQL, Transact-SQL IF Bedingung, wenn_wahr [ELSE wenn_falsch] Nur innerhalb einer Prozedur oder Stapelabfrage (Stacked SQL Query) möglich
Oracle, PL/SQL IF Bedingung THEN wenn_wahr [ELSE wenn_falsch] END IF Nur in PL/SQL möglich

Wie ersichtlich wird unterscheiden sich die injizierten Statements geringfügig abhängig vom Zweck der zeitbasierten Attacke. Im Folgenden Abschnitt werden exemplarische Beispiele anhand unterschiedlicher DBMS aufgezeigt.


Zeitbasierte Attacken in MySQL

Eine zeitbasierte SQLi Attacke exemplarisch für den Datenbanksystemtypen MySQL ist simpel durchzuführen. Die Funktionen SLEEP() und Benchmark() können in ein entsprechend präpariertes SQL-Statement integriert werden. Das Code-Beispiel unten führt auf wie ein Angreifer eine Schwachstelle eines Parameters auf SQLi Verwundbarkeit prüfen kann. Eine zeitverzögerte Antwort würde bedeuten, dass die Applikation eine MySQL Datenbank nutzt.