
SQL-Injection-Ausnutzungstool
#BBQSQL# Ein Tool zur Ausnutzung von Blind-SQL-Injection
Blind-SQL-Injection kann eine lästige Sache sein. Wenn die verfügbaren Tools funktionieren, funktionieren sie gut, aber wenn nicht, muss man etwas Eigenes schreiben. Das ist zeitaufwändig und mühsam. BBQSQL kann Ihnen helfen, diese Probleme zu lösen.
BBQSQL ist ein Blind-SQL-Injection-Framework, das in Python geschrieben ist. Es ist äußerst nützlich, wenn man knifflige SQL-Injection-Schwachstellen angreift. BBQSQL ist auch ein halbautomatisches Tool, das eine ziemlich umfangreiche Anpassung für schwer auslösbare SQL-Injection-Befunde ermöglicht. Das Tool ist datenbankunabhängig konzipiert und extrem vielseitig. Es verfügt außerdem über eine intuitive Benutzeroberfläche, die die Einrichtung von Angriffen wesentlich erleichtert. Python gevent wird ebenfalls implementiert, was BBQSQL extrem schnell macht.
Wir haben versucht, das Tool so zu schreiben, dass es bei der Einrichtung eines Angriffs in der Benutzeroberfläche sehr selbsterklärend ist. Der Vollständigkeit halber haben wir jedoch eine detaillierte Readme beigefügt, die Ihnen zusätzliche Einblicke in die Einzelheiten der einzelnen Konfigurationsoptionen geben soll. Beachtenswert ist, dass jede Konfigurationsoption in der Benutzeroberfläche eine zugehörige Beschreibung hat. Wenn Sie sich also entscheiden, das Tool ohne das Lesen dieser Seite zu starten, sollten Sie in der Lage sein, sich durch einen Angriff zu hacken.
Ähnlich wie bei anderen SQL-Injection-Tools stellen Sie bestimmte Anforderungsinformationen bereit.
Folgende übliche Informationen müssen bereitgestellt werden:
Dann geben Sie an, wo die Injection erfolgt und welche Syntax wir injizieren. Lesen Sie weiter für Details.
Dies sollte unkompliziert sein, aber was auch immer. Versuchen Sie, Folgendes auszuführen:
sudo pip install bbqsql
Wenn das nicht funktioniert, können Sie es aus dem Quellcode installieren. Das Tool benötigt gevent, requests.
Im Menü sehen Sie einen Platz für BBQSQL-Optionen. Hier geben Sie die folgenden Optionen an:
Dies wird unten im Abfragesyntax-Überblick ausführlicher beschrieben.
Der Name einer Datei, in die die Ergebnisse ausgegeben werden sollen. Lassen Sie dies leer, wenn Sie keine Ausgabe in eine Datei wünschen.
BBQSQL verwendet zwei Techniken bei der Durchführung eines Blind-SQL-Injection-Angriffs. Die erste und standardmäßig verwendete Technik ist binary_search. Siehe Wikipedia für weitere Informationen.
Die zweite Technik, die Sie verwenden können, ist frequency_search. Die Häufigkeitssuche basiert auf einer Analyse der englischen Sprache, um die Häufigkeit zu bestimmen, mit der ein Buchstabe vorkommt. Diese Suchmethode ist bei nicht-entropischen Daten sehr schnell, kann aber bei nicht-englischen oder verschleierten Daten langsam sein.
Sie können entweder binary_search oder frequency_search als Wert für diesen Parameter angeben.
Dies gibt die Art der SQL-Injection an, die Sie entdeckt haben. Hier können Sie festlegen, welches Attribut der HTTP-Antwort BBQSQL untersuchen soll, um wahr/falsch zu bestimmen.
Sie können angeben: status_code, url, time, size, text, content, encoding, cookies, headers oder history
Wenn Sie eine SQL-Injection identifiziert haben, die zu einem anderen Server-Statuscode führt, setzen Sie hier 'status_code'. Wenn das Cookie anders ist, setzen Sie 'cookie'. Wenn die Antwortgröße unterschiedlich ist, setzen Sie 'size'. Sie verstehen das Prinzip.
Die Nebenläufigkeit basiert auf der gevent-Bibliothek in Python. Funktional erscheint sie wie Threading, aber die Einzelheiten ihrer Funktionsweise können in unserem DefCon-Vortrag hier [Link einfügen] eingesehen werden. Diese Einstellung steuert den Grad der Nebenläufigkeit, mit dem der Angriff ausgeführt wird. Dies ist nützlich, um die Anzahl der Anfragen zu drosseln und die Angriffszeiten zu beschleunigen. Bei wirklich leistungsstarken Webservern wie nginx konnten wir die Nebenläufigkeit auf 75 einstellen. Standardmäßig ist dies auf '30' gesetzt.
Wenn Sie auf eine SQL-Injection-Schwachstelle mit seltsamen Eigenheiten stoßen (z. B. bestimmte Zeichen können nicht enthalten sein oder Funktionen wie ASCII/CHAR funktionieren nicht), haben Sie sich wahrscheinlich dabei ertappt, ein Skript mit Ihrer benutzerdefinierten Injektionssyntax zu schreiben. BBQSQL nimmt den Skriptteil ab und bietet eine Möglichkeit, Ihre benutzerdefinierte Abfragesyntax einzufügen und mit Leichtigkeit auszunutzen.
Der Abfrageeingabebereich ist der Ort, an dem Sie Ihre Abfrage konstruieren, die zum Extrahieren von Informationen aus der Datenbank verwendet wird. Es wird davon ausgegangen, dass Sie bereits eine SQL-Injection an einem anfälligen Parameter identifiziert und eine erfolgreiche Abfrage getestet haben.
Unten finden Sie ein Beispiel für eine Abfrage, die Sie verwenden können, um Ihre Abfrage zu erstellen.
In diesem Beispiel möchte der Angreifer die Datenbankversion auswählen:
vulnerable_parameter'; if(ASCII(SUBSTRING((SELECT @@version LIMIT 1 OFFSET ${row_index}) , ${char_index} ,1))) ${comparator:>}ASCII(${char_val}) WAITFOR DELAY '0\:0\:0${sleep}'; --
Die Abfragesyntax basiert auf Platzhaltern, die BBQSQL mitteilen, wie der Angriff ausgeführt werden soll.
Sie müssen die folgenden Platzhalterinformationen bereitstellen, damit der Angriff funktioniert. Sobald Sie diese in Ihre Abfrage eingefügt haben, erledigt BBQSQL den Rest:
${row_index}: Dies teilt BBQSQL mit, hier Zeilen zu iterieren. Da wir LIMIT verwenden, können wir je nach ${row_index}-Wert n Zeilen anzeigen.
${char_index}: Dies teilt BBQSQL mit, welches Zeichen aus der Unterabfrage abgefragt werden soll.
${char_val}: Dies teilt BBQSQL mit, wo die Ergebnisse aus der Unterabfrage verglichen werden sollen, um das Ergebnis zu validieren.
${comparator}: Hiermit teilen Sie BBQSQL mit, wie die Antworten verglichen werden sollen, um festzustellen, ob das Ergebnis wahr oder falsch ist. Standardmäßig wird das Symbol > verwendet.
${sleep}: Dies ist optional, teilt BBQSQL aber mit, wo die Anzahl der Sekunden eingefügt werden soll, die bei zeitbasierter SQL-Injection gewartet werden soll.
Nicht alle dieser Platzhalter sind erforderlich. Wenn Sie beispielsweise eine halbblinde boolesche SQL-Injection entdeckt haben, können Sie den Parameter ${sleep} weglassen.
BBQSQL hat viele HTTP-Parameter, die Sie konfigurieren können, wenn Sie Ihren Angriff einrichten. Mindestens müssen Sie die URL, den Ort, an dem die Injektionsabfrage ausgeführt werden soll, und die Methode angeben. Die folgenden Optionen können gesetzt werden:
Sie geben an, wo die Injektionsabfrage eingefügt werden soll, indem Sie die Vorlage ${injection} verwenden. Ohne die Injektionsvorlage weiß das Tool nicht, wo die Abfrage eingefügt werden soll.