Zeitbasierte SQL Injection Attacken

Aus IT-Forensik Wiki

Zeitbasierte SQL Injection Attacken

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 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.