Open Source im professionellen Einsatz

© Gertie G., Photocase.com

SQL-Injection legt Newsletter lahm

Reingespritzt

Inn gewisser Weise passt der folgende Beitrag zum Schwerpunkt dieser Magazins-Ausgabe, demonstriert er doch am lebenden Webapplikations-Objekt die Verwundbarkeit einer Datenbank.

Die Sache begann sehr alltäglich: Im Zuge einer Wohnungssuche hatte ich mich irgendwann beim Immobilienmakler Immosky [1] für dessen Newsletter angemeldet. Als ich einige Zeit später eine Unterkunft gefunden hatte, wollte die nunmehr überflüssigen Empfehlungsschreiben wieder abbestellen. Ein Abmelden-Link im Newsletter führte mich zur Webseite des Schweizer Unternehmens. Die gab sich überraschend gesprächig: Offensichtlich für Debugging-Zwecke zeigte sie das SQL-Statement an, das meine Newsletter-Zusendung eben deaktiviert hatte.

Die Debugausgabe auf dem Produktivsystem lässt mich aufmerken werden: Webprogrammierer, denen so was egal ist, haben bestimmt noch Leichen im Keller. Auf mich wirkt die Debugausgabe wie eine Einladung zum Angriff. Sie hilft mir beim Einstieg, denn sie zeigt genau das SQL-Statement, das der Datenbankserver später abarbeiten wird. So sehe ich, welche Get- oder Post-Parameter wo in der Anfrage landen, ob die Webapplikation die Eingabe filtert und ob sie Sonderzeichen richtig schützt. Wer die Fehlermeldungen aus Abbildung  1 studiert, erfährt, dass Immosky einen Windows-Server mit PHP benutzt, der mehrere virtuelle Webserver anbietet und ohne Passwort per ODBC-Treiber aus PHP auf eine lokale MySQL-Datenbank zugegreift. Per Firebug [2] findet der Angreifer ferner aus den HTTP-Headern heraus, dass der Anbieter PHP  4.2.2 auf einem IIS  6.0 einsetzt – beide nicht aktuell und womöglich für bekannte Exploits empfänglich.

Abbildung 1: Die überflüssigen Fehlermeldungen verraten weitere Informationen über den Server – eine prima Einstieghilfe für Hacker.

Meine Neugier auf fremden Webseiten zu befriedigen, versuche ich sehr sorgfältig zu organisieren. Lehne ich mich zu weit aus dem Fenster, droht Strafe wegen Ausspähens von Daten (siehe Kasten "Gesetzeslage"). Zwar ist das nur dann illegal, wenn die Daten besonders gesichert sind. Doch schreiben die StGB-Kommentare, dass es mehr auf den Wunsch des Betreibers nach Sicherung als auf deren tatsächliche Güte ankommt.

Gesetzeslage

Paragraf 202a StGB: Ausspähen von Daten

(1) Wer unbefugt sich oder einem anderen Zugang zu Daten, die nicht für ihn bestimmt und die gegen unberechtigten Zugang besonders gesichert sind, unter Überwindung der Zugangssicherung verschafft, wird mit Freiheitsstrafe bis zu drei Jahren oder mit Geldstrafe bestraft.

(2) Daten im Sinne des Absatzes 1 sind nur solche, die elektronisch, magnetisch oder sonst nicht unmittelbar wahrnehmbar gespeichert sind oder übermittelt werden.

Paragraf 263a StGB: Computerbetrug

(1) Wer in der Absicht, sich oder einem Dritten einen rechtswidrigen Vermögensvorteil zu verschaffen, das Vermögen eines anderen dadurch beschädigt, daß er das Ergebnis eines Datenverarbeitungsvorgangs durch unrichtige Gestaltung des Programms, durch Verwendung unrichtiger oder unvollständiger Daten, durch unbefugte Verwendung von Daten oder sonst durch unbefugte Einwirkung auf den Ablauf beeinflußt, wird mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe bestraft.

Paragraf 303a StGB: Datenveränderung

(1) Wer rechtswidrig Daten (§ 202a Abs. 2) löscht, unterdrückt, unbrauchbar macht oder verändert, wird mit Freiheitsstrafe bis zu zwei Jahren oder mit Geldstrafe bestraft.

Paragraf 303b StGB: Computersabotage

(1) Wer eine Datenverarbeitung, die für einen anderen von wesentlicher Bedeutung ist, dadurch erheblich stört, dass er

1. eine Tat nach § 303a Abs. 1 begeht,

2. Daten (§ 202a Abs. 2) in der Absicht, einem anderen Nachteil zuzufügen, eingibt oder übermittelt oder

3. eine Datenverarbeitungsanlage oder einen Datenträger zerstört, beschädigt, unbrauchbar macht, beseitigt oder verändert,

wird mit Freiheitsstrafe bis zu drei Jahren oder mit Geldstrafe bestraft.

(2) Handelt es sich um eine Datenverarbeitung, die für einen fremden Betrieb, ein fremdes Unternehmen oder eine Behörde von wesentlicher Bedeutung ist, ist die Strafe Freiheitsstrafe bis zu fünf Jahren oder Geldstrafe.

Das Injizieren eigener Daten in Richtung Server passiert wie beim Cross-Site-Scripting über die HTTP-Parameter der Webseite-URL [3]. Serverseitig arbeitet ein CGI-Skript, das die Parameter entgegennimmt und zu einem Select-Statement in SQL umarbeitet. Und genau dabei lauern die Fallstricke.

Erstmal Anpiksen

Einen Schaden soll der erste Test aus juristischen, aber auch aus taktischen Gründen nicht anrichten – Hacker versuchen unterm Radar zu bleiben. Das gelingt, wenn ich die in der URL übergebenen Datenbankparameter um ein neutrales Element ergänze, also eines, dass das Ergebnis der Abfrage nicht verändert. So ergibt »A OR FALSE« wieder »A« . Der Debugcode in Abbildung  2 beweist, dass ich die Anfrage geeignet modifiziert habe.

Abbildung 2: Die SQL-Injection funktioniert offenbar. In diesem Beispiel bleibt der Angriff bewusst ohne Auswirkung auf die Datenbank.

Abbildung 2: Die SQL-Injection funktioniert offenbar. In diesem Beispiel bleibt der Angriff bewusst ohne Auswirkung auf die Datenbank.

Ein Cracker hätte die Bedingung im Parameter um »OR TRUE« ergänzt, was logisch immer »TRUE« ergibt. Praktische Folge: Die Immosky-Website hätte alle ihre Newsletterabonnements gekündigt. Den Erfolg erkennt der böswillige Angreifer an der möglicherweise höheren Laufzeit der Abfrage, wenn die Datenbank in allen Datensätzen ein Feld ändert.

Eigene Daten reinströmen lassen

Ich darf annehmen, dass die Immobiliendatenbank keinen Schaden nimmt, wenn ich versuche, mehr Datensätze zu sehen, als die aktuellen Suchkriterien eigentlich hergeben. Eine breiter angelegte, vom Anbieter vorgesehene Suche zeigt diese Daten nämlich ebenso an.

Beim Testen hilf mir der Trick mit »OR TRUE« : Akzeptiert das darunterliegende Skript die Injection, darf ich auf eine umfangreichere Ausgabe hoffen. Falls durch den Angriff ein Syntaxfehler entsteht, kommt entweder eine hilfreiche Fehlermeldung oder gar keine Ausgabe. So finde ich durch Versuch und Irrtum heraus, welche Parameter in das SQL-Statement eingehen und welche für andere Zwecke gedacht sind. Tatsächlich zeigt sich auch die Suchfunktion anfällig diesen Vorstoß, wie Abbildung  3 beweist.

Abbildung 3: Die offensichtlich unsinnigen Angebote beweisen: Auch die Suche ist angreifbar.

Abbildung 3: Die offensichtlich unsinnigen Angebote beweisen: Auch die Suche ist angreifbar.

Durch Experimente und in Kenntnis der booleschen Rechenregeln kriege ich sogar heraus, wie die einzelnen Suchparameter geklammert sind. Bei Immosky bietet sich an, zwei Suchparameter in der Suchmaske zu setzen und dann nur einen mit »OR TRUE« zu erweitern. So lassen sich SQL-Injections verfeinern.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 3 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook