sqlmap: Der Spaß mit Datenbanken

Heute mal ein kleines Tutorial für das Datenbank Penetration-Tool: 'sqlmap' was mein persönlicher Favorit ist wenn es um Datenbank-Sicherheit geht. Es gibt noch viele andere und es gab viele Versuche meinerseits ein vergleichbares Tool zu entwickeln doch das erfordert zu viel Zeit und wie wir alle wissen Zeit ist Geld. Der Anlass hierfür ist die Peinlichkeit anderen zu ersparen, eine derart Unsichere Webapplikation zu veröffentlichen wie es ein Kollege von mir tat.
Da natürlich sein Stolz zu groß dafür war, einzugestehen (schon während der Programmierung) das diese Applikation vom ersten Bit bis zum letzten eine Spielewiese für mich ist, wurde diese dann auch so veröffentlicht.

Ich nutzte meine Chance und tobte mich aus. Ein Tag danach machte ich ihn darauf aufmerksam, jedoch ohne Erfolg. Als letztes bereitete ich eine Präsentation vor, welche genau alle Probleme auf dieser Webseite behandelten und stelle sie vor ca. 30 Leuten vor.

Wie dem auch sei, hier möchte ich mich auf das Beschreiben von SQL-Injektion befassen und erklären wie das Tool sqlmap SEHR nützlich sein kann.


Einführung:

sqlmap ist ein Tool um zu Testen ob eine mögliche SQL-Injektion vorliegt. Das Tool findet man unter folgendem Link: http://sqlmap.org/
Zum Ausführen dieses Programms benötigt man die Laufzeit-Umgebung "Python" (Python 2.x wird benötigt - Python 3.x ist damit nicht kompatibel!!).
Ich bevorzuge für derartige Programme die Linux Distribution: BackTrack (mitlerweile Kali Linux genannt), Linux Mint oder Arch Linux. Natürlich kann man dies auch auf einem Windows-Rechner ausführen, jedoch ist dies meiner Meinung nach sehr umständlich.


Schritt 1: 

Der Server-Scan:
Zunächst wollen wir wissen mit welchem System wir es zu tun haben und was wir als Attack-Surface, sprich als Angriffsfläche, nutzen können.
Hier für verwende ich das Tool nmap dieses Tool ermöglicht es einen Host auf offene Ports zu scannen und prüft nach Service-Fingerprints.
Für dieses Beispiel habe ich einen Test-Server auf meinem lokalen Rechner aufgesetzt. 
Meine lokale IP-Adresse ist: 192.168.2.104
Um nun ein Server-Scan ausführen zu können starten wir ein Terminal Fenster unter Linux und geben folgenden Befehl ein:

nmap -v -A 192.168.2.104

Dieser Befehl ermöglicht es uns einen kompletten Port-Scan zu betreiben und anschließend sehen wir dort die laufenden Services. Das Ergebnis sieht bei mir wie folgt aus:


Die wichtigen Ports habe ich im Bild in einem roten Kasten markiert. Zum einen wollen wir ja eine WebApplikation auf deren Sicherheit überprüfen. Und zum anderen wollen wir die Datenbank kopieren/manipulieren usw.
Also benötigen wir eine Schwachstelle in der WebApplikation. Eine Schwachstelle, die uns Zugriff auf die Datenbank ermöglicht nennt sich SQL-Injection, da wir dort "SQL-Code" (bzw. ein SQL-Query) ausführen können ohne das uns das System daran hindert.

Um noch weitere Informationen zu sehen welcher Webserver am laufen ist, woraus man noch mehr Sicherheitslücken entlarven kann sieht wie folgt aus:



In meinem Fall hab ich einen Apache Server in der Version 2.4.10. OpenSSL und PHP Version lassen sich ebenfalls ablesen. 
Also navigieren wir zur Test Webseite:

http://192.168.2.104

Dort suchen wir nach möglichen Schwachstellen, was im Prinzip alles sein kann was Benutzereingaben entgegen nimmt. Es geht natürlich auch, dass versteckte POST-Parameter Lücken aufweisen.

Für unser Beispiel, habe ich eine Test Webseite aufgesetzt die folgendermaßen aussieht:

Dies ist im Prinzip das häufigste, was wir im WWW antreffen nur ohne das schöne Design.
Und wenn wir uns einloggen sehen wir folgendes:



 Mich interessiert nun, kann ich die SQL Abfrage so manipulieren, dass ich Zugriff auf die Datenbank erhalte und Benutzernamen und Passwörter erlange?
Probieren wir es mit sqlmap aus:

Um es mir einfacher zu machen, fang ich den POST-Request von mir ab. Hierzu benutze ich ein Tool, welches ich mir selbst in Java geschrieben habe [TUTORIAL].
Man kann hier natürlich jeden anderen "Sniffer" verwenden hier kann ich Burpsuite empfehlen dies ist auf einem Kali Linux oder BackTrack System schon vor installiert.
Die Datei die wir benötigen, sieht wie folgt aus:
Wir sehen hier nun deutlich die Parameter: username und password welche übertragen werden. Diese können wir nun auf SQL-Injection prüfen.

Der Befehl dafür lautet wie folgt:


sqlmap -r /pfad/zur/datei -p PARAMETER


Um jetzt die verfügbaren Datenbanken herauszufinden fügen wir folgendes zum obigen Befehl hinzu: --dbs

Danach können wir mit folgendem Befehl die Datenbank auf Tabellen durch suchen:

sqlmap -r /pfad/zur/datei -p PARAMETER -D datenbank --tables

Und mit folgendem die Tabelle "dumpen":


sqlmap -r /pfad/zur/datei -p PARAMETER -D datenbank -T tabelle --dump-all

Als Ergebnis habe ich folgendes:



Falls sqlmap gehashte Werte dumpen sollte, werden diese erkannt und falls möglich auch "entschlüsselt", dies funktioniert erfahrungsgemäß sehr gut mit MD5 Summen. Dies passierte unteranderem in der Geschichte, welche ich am Anfang erzählte. Da diese Person nun vor hat, eine 2. Version dieser Webapplikation zu entwickeln werde ich natürlich auch hoffentlich um Rat gebeten :)....
Wie dem auch sei, ich hoffe euch hiermit den Einstieg in das Tool "sqlmap" erleichtert zu haben. :)

Cheers :)

Kommentare

Beliebte Posts aus diesem Blog

[ENGLISH] Capture the Flag at UCF - Write Up - Crypto - XORLY

Dr. Evil's Bombe (Binary Bomb Lab) | Teil 1