Um ein wichtiges Problem, beim Arbeiten mit SQL Injections aufzuführen, erstelle ich mein drittes Video Tutorial, damit auch SQL Injections ohne sichtbare Ausgabe kein Problem für den Anwender darstellen.
Ich stelle im Tutorial lediglich die, von mir bezeichnete, “Content-Change” Methode vor, bei der man mittels Boolescher Operationen, den dargestellten Seiteninhalt verschieden anzeigen kann.
Link zum Tutorial
Ein Query veranschaulicht die Grundmethode:
1
| SELECT article FROM webpage WHERE id = $_GET['id'] ; |
Der Aufruf von page.php?id=1+and+1=0
führt zu folgendem Query:
1
| SELECT article FROM webpage WHERE id = 1 AND 1 = 0; |
Der Artikel wird also selektiert, wenn beide Seiten “true” sind.
Die Artikel ID ist in unserem Fall tatsächlich “true” aber die rechte Seite, bestehend aus 1=0 ist eine widerspruchsvolle Aussage, weswegen der Artikel nicht dargestellt wird.
eine andere Methode für den Fall, dass sich der Content nicht nachweislich ändert, ist zum Beispiel
BENCHMARK
Der Befehl führt eine Operation so oft aus, wie in ihrem Argument übergeben wird.
Das kann je nach Befehl und Anzahl zu großen Rechenleistungen führen, und der Antwortzeit des Server sollte sich stark verzögern. Aus Differenz der Antwortzeit bei wahrer und falscher Bedingung kann man dann eine Blind SQL Injection durchführen.
Die BENCHMARK Methode ist aber langsam und nicht zu empfehlen.
Lidloses_Auge SQL Injections, Video Tutorials
Ein weiteres Tutorial, in welchem ich dem User die Datenbank INFORMATION_SCHEMA vorstelle, die hervorragende Möglichkeiten bietet, etwas über die Struktur und dem Inhalt der anderen Datenbanken herauszufinden. Es fungiert hierbei als eine Art Inhaltsverzeichnis, das dem User einen sehr großen Vorteil bietet.
Außerdem stelle ich dem Anwender die, im ersten Tutorial vernachlässigten, ORDER BY Methode zur Bestimmung der Columns einer Tabelle vor, die für ein UNION SELECT gebraucht werden.
Link zum Tutorial
Bei einem verwundbaren Query von:
1
| SELECT article FROM webpages WHERE id = $_GET['id'] ; |
und dem Aufruf von page.php?id=1+order+by+100
ergibt sich der resultierende Query:
1
| SELECT article FROM webpages WHERE id = 1 ORDER BY 100 ; |
Die selektierten rows, werden per ORDER BY sortiert nach dem Wert der Column mit der Nummer 100.
Wenn diese nicht existiert, wird dem User ein Fehler ausgegeben, und man kann sehr einfach die Anzahl für ein gültiges UNION SELECT feststellen.
Lidloses_Auge SQL Injections, Video Tutorials
Tutorial 1 – SQL Injection über GET-Parameter
Meine 3 Video Tutorials kennen viele bereits von Free-Hack, und auch hier möchte ich diese den Usern nicht vorenthalten.
Link zum Tutorial
Ich muss dazu sagen, dass ich in dem Tutorial eine relativ umständliche Methode wähle, um den User nicht von Anfang an zu überfordern. Die ORDER BY Methode wende ich daher gar nicht an, und vernachlässige auch die MySQL Version.
Es ist auf jeden Fall ratsam, sich zum einen, weitere Tutorials anzuschauen, und was unerlässlich für den Lernprozess ist, sich die Dokumentationen der Datenbanksysteme anzuschauen.
MySQL bietet eine sehr ausführliche Dokumentation zur Funktionalität, Syntax und dem Aufbau.
Lidloses_Auge SQL Injections, Video Tutorials