SQL-Injection reloaded: Zugriff auf das Betriebssystem

Mit SQL-Injection können Angreifer nicht nur die Datenbank manipulieren, sondern gleich den kompletten Server samt Betriebssystem unter ihre Kontrolle bringen. Das Tool sqlmap macht dies vollautomatisch.

In Pocket speichern vorlesen Druckansicht 123 Kommentare lesen
Lesezeit: 4 Min.
Von
  • Uli Ries
  • Daniel Bachfeld

Mit SQL-Injection können Angreifer nicht nur die Datenbank manipulieren, sondern vollautomatisch gleich den kompletten Server samt Betriebssystem unter ihre Kontrolle bringen. (Infos dazu auch im heise-Security-Artikel "Giftspritze - SQL-Injection"). Das demonstrierte der IT-Sicherheitsspezialist Bernardo Damele Assumpcao Guimaraes während der Hackerkonferenz Black Hat mit seinem Tool sqlmap. Das von Guimaraes entwickelte Tool beherrscht diverse Angriffsarten für drei gängige SQL-Server – und das sowohl unter Windows als auch unter Linux.

Sqlmap erkennt, ob es sich um einen MySQL, PostgreSQL oder Microsoft SQL Server handelt und wählt automatisch den jeweils passenden Angriffsweg. Laut Guimaraes unterscheiden sich die Methoden fundamental je nach Server, um die diversen Ziele eines Angriffs zu erreichen. Auch sind je nach Ziel verschiedene Nutzerrechte nötig. Laut Guimaraes sind jedoch die meisten Datenbankinstallationen von Haus aus so konfiguriert, dass die sqlmap-Angriffe auch in der Praxis klappen.

Im Unterschied zu bisher bekannten SQL-Injections beschränkt sich sqlmap nicht darauf, Werte aus der Datenbank auszulesen, Tabellen zu verändern oder Inhalte an Tabellen anzuhängen. Das Tool ist vielmehr darauf ausgelegt, weitaus komplexere Angriffe durch sogenannte Stacked Queries zu automatisieren. Die bisher bekannten SQL-Injections sind nur Vorstufe und Grundlage für das, was sqlmap eigentlich beherrscht.

So bringt das Open-Source-Tool Funktionen zum Lesen und Schreiben des Datei-Systems mit. Der Angreifer soll damit beliebige Binär- oder Textdateien vom Angriffsziel auf seinen Rechner übertragen können – vorausgesetzt, er kennt den exakten Dateinamen und Pfad. Sqlmap nutzt hierzu je nach Servertyp unterschiedliche, aber standardisierte SQL-Kommandos, um die Files zu lesen. Anschließend wird die Datei auf dem Datenbankserver in eine vom Tool automatisch angelegte Tabelle kopiert, deren Inhalt dann wieder auf die Maschine des Angreifers geschrieben wird.

Der Schreibzugriff gestaltet sich indes etwas komplexer: Hierzu konvertiert sqlmap das betreffende File erst in eine hexadezimale Zeichenkette, teilt die Kette im Fall von MySQL in maximal 1024 Byte große Teilstücke und kopiert die Teilstücke dann in zwei Schwüngen erst 1024 Byte, dann den Rest in eine Tabelle. Der Tabelleninhalt wird dann in eine Datei ins Temp-Verzeichnis des Datenbankservers kopiert. Das Zerstückeln des Files erklärt der Programmierer damit, dass so eventuell vorhandene Beschränkungen des zum Datenbankserver gehörenden Web-Frontends unterlaufen werden. Erkennt sqlmap einen Microsoft SQL Server, wird das hochzuladende File in 64 Kilobyte große Happen zerteilt – genau die Größe, die das auf Windows-Maschinen vorhandene debug.exe verarbeitet. Denn sqlmap weist debug.exe an, aus den 64-KByte-Files eine einzelne, ausführbare Datei zu bauen.

Diese Funktionen, insbesondere natürlich der Schreibzugriff, sind die Grundlage für den eigentlichen Clou von sqlmap: Vollständiger Remotezugriff per SQL-Injection. Dazu hat Bernardo Damele Assumpcao Guimaraes seinem Werk die Funktion -os-pwn mit auf den Weg gegeben. Wird der Parameter verwendet, versieht sqlmap den zum bekannten Metasploit Framework gehörenden Client meterpreter automatisch mit den vom Angreifer gewünschten Parametern und kopiert den Client über eine Abwandlung des File-Uploads auf den Server. Sqlmap kodiert meterpreter zuerst mit dem Metasploit-eigenen Encoder msfencode, um beim Upload eventuell vorhandene Virenscanner ins Leere laufen zu lassen.

Laut Guimaraes erkennt keiner der gängigen 42 Virenscanner ein File, dass mit einem der 13 Metasploit-Encoder bearbeitet wurde. Dabei sind diese Encoder seit langem hinlänglich bekannt. Nach erfolgtem Upload nutzt sqlmap je nach vorhandenem Betriebssystem entweder sys_exe() oder xp_cmdshell() (MS SQL), um meterpreter zu starten. Schutzmaßnahmen gegen solche Attacken sind hinlänglich bekannt: Der Entwickler der Webanwendung muss sicherstellen, dass keine SQL-Kommandos zum Datenbankserver weitergereicht werden. Es gilt, die betreffenden Kommandos direkt nach der Eingabe ins Webfrontend zu filtern. (Uli Ries) / (dab)