Quick Navigator
© 2004-2019 by Rocketlab

hand crafted in the beautiful mountains of Switzerland

Sicherheitslücken – SQL Injection


Die meisten Webapplikationen arbeiten mit Datenbanken im Hintergrund. Hierbei gibt es Abfragen, welche direkt oder indirekt mit der Datenbank interagieren. So können Inhalte anhand von Kriterien abgerufen werden, z.B. verfügbare Hotel- oder Flugangebote, oder es findet eine Anwender Verifikation statt usw.

Ausserdem werden von Kunden bzw. Anwendern eingegebene Daten in der Datenbank gespeichert. Dies geschieht durch das Ausfüllen von Eingabemasken (z.B. Adress- und persönliche Daten) sowie weiterer für die Applikation relevanten Informationen.

Bevor Daten in die Datenbank gelangen, per Abfrage oder als zu speichernde Daten, werden diese durch die Applikation angenommen und verarbeitet. Die Eingabedaten des Kunden werden meist in verschachtelte SQL Statements umgeformt und zur Weiterverarbeitung an die Datenbank gesendet.

Hier besteht das grösste Gefahrenpotential. Wenn Usereingaben (z.B. durch Formulareingaben) nicht ausreichend vorgeprüft und entsprechend entschärft werden, kann schädlicher Code in der Applikation und Datenbank zur Ausführung gebracht werden. So ist es Pflicht, sogenannte Tags (HTML Elemente) oder SQL Abfragen umzuformen, damit diese keine Operationen auf der Datenbank auslösen können bzw. unerwünschte Ergebnisse auf der Applikationsoberfläche hervorrufen. Werden derartige Gefahren nicht erkannt und mit Vorsichtsmassnahmen ausgestattet, können bösartige Anwender gezielt SQL Befehle und weitere einschleusen. Dies wird als SQL Injection bezeichnet. Die Konsequenzen sind verheerend.

Folgendes Verhalten kann auf SQL Injection zurückzuführen sein:

  1. Ein Benutzer meldet sich an einer Applikation an und wird als anderer User oder gar Administrator erkannt.
  2. Ein Benutzer kann private Informationen anderer Kunden einsehen, z.B. Profildaten, Bestellhistorie usw.
  3. Ein Benutzer kann Einstellungen der Applikation oder Daten anderer Anwender verändern.
  4. Der Benutzer kann die Datenbank Struktur verändern, inklusive Löschen von Tabellen, Datensätzen usw.
  5. Der Benutzer kann den Datenbank Server steuern, manipulieren und uneingeschränkt SQL Statements ausführen.

 

Setzt man demnach keine Massnahmen ein, um SQL Injection zu verhindern, können die Folgen fatal sein. Dies führt dazu, dass Teil der Testsets auch die Prüfung gegen SQL Injection sein muss.

Nach der kurzen Einführung werden im Folgenden noch ein paar Beispiele und deren Auswirkungen aufgeführt.

 

Hinweis: Tests zu SQL Injection sollte nur auf der Testumgebung (nicht im Livesystem) durchgeführt werden!

Verfügt eine Applikation über eine Login Maske, kann davon ausgegangen werden, dass auch dynamische SQL Abfragen wir unten gezeigt zum Einsatz kommen. Dieses SQL Statement wird erwartungsgemäss einen Datensatz mit Benutzerdaten aus der User Tabelle liefern sofern Username und Passwort eingegeben wird.

SELECT * FROM Users WHERE User_Name = ‘” & strUserName & “‘ AND Password = ‘” & strPassword & “’;

login

Wenn der Tester nun „John“ als strUserName und „Doe“ als strPassword setzt, jeweils in der Login Maske, dann würde das SQL Statement wie folgt aussehen:

SELECT * FROM Users WHERE User_Name = ‘John‘ AND Password = ‘Doe’;

 

Wählt der Test nur den Usernamen und kein Passwort, sieht das Statement so aus:

SELECT * FROM Users WHERE User_Name = ‘John‘ - AND Password = ‘Doe’;

 

Anmerkung: Der Teil hinter dem “-“ wird als Kommentar angesehen und nicht ausgeführt.

Gibt es nun irgendeinen Anwender mit Benutzernamen „John“, dann erhält der Tester so Zugriff auf die Applikation (durch Login) als User „John“. Der Tester kann nun alle privaten Informationen und Einstellung von „John“ sehen und verändern.

Was ist aber nun, wenn der Test keinerlei Information über vorhandenen Benutzernamen hat? In so einem Fall (und das wird in nahezu allen Fällen sein) wird er übliche Benutzernamen ausprobieren wie „admin“, „administrator“, „superadmin“ usw. Exisitert keiner der Standardnamen, dann könne er folgenden Benutzernamen wählen: ‘John‘ or ‘x‘ = ‘x‘ AND Password = ‘Doe‘ or ‘x‘=‘x‘;

Dies würde die SQL Anfrage wir folgt verändern:

SELECT * FROM Users WHERE User_Name = ’John’ or ’x’=’x’ AND Password = ‘Doe’ or ’x’=’x’;

 

Da ’x’=’x’ eine immer gültige Bedingung ist, würde das SQL Ergebnis alle Datensätze der Tabelle „Users“ liefern. Die Applikation würde Erlaubnis erteilen, sich als ersten User der Tabelle an der Applikation anzumelden.

Hinweis: Vor Durchführung des zweiten Beispiels sollte der Administrator oder Entwickler beauftragt werden, die Tabelle „Users“ zu kopieren, um sie anschliessend wieder herstellen zu können.

 

Der Tester könnte nun weiter für den Usernamen folgendes verwenden: „‘John‘; DROP table users_details;‘ – as strUsername“ und irgend einen Wert als Passwort. So würde der SQL Befehl wie folgt aussehen:

SELECT * FROM Users WHERE User_Name = ’John’; DROP table users_details;’ – ‘ AND Password = ‘Doe’;

Die Durchführung des SQL Befehls führt unweigerlich zur Löschung der Tabelle “users_details” – endgültig.

Die oben aufgeführten Beispiele behandeln ausschnittsweise und nur den Teil von SQL Injection einer Login Seite. Ähnliches kann auch für weitere dialogbasierte Eingabefelder durchgeführt werden, z.B. Suchfeld, Feedback Formular, usw.

SQK Injection könnte auch bei Applikationen möglich sein, die SSL verwenden. Sogar eine Firewall kann hier nichts ausrichtigen, da sie aufgrund fehlender Erkennung nicht in der Lage ist, die SQL Injection als Angriff abzuwehren.

Die Techniken von SQL Injection können wunderbar auch als automatisierte Testfälle umgesetzt werden und als Regression Set angelegt werden.

Security und Penetration Testing


Server hacking, Hijacking, DDoS Attacken usw. sind Begriffe, die wir alle kennen. Darüber hinaus gibt es eine Unmenge an lauernden Gefahren, die durch Penetration Testing erkannt werden können. Durch unseren Penetration Tests Report erhalten Sie zahlreiche und wertvolle Informationen und Hinweise zum Schließen vorhandener Schwachstellen.


– Weiter –


Launch the rocket!


Wir freuen uns auf neue Partner, die mit uns gemeinsam
außergewöhliche Dinge erschaffen möchten.
Schreiben Sie uns, wenn Sie mit uns zusammenarbeiten möchten.