Was sind SQL injections?

SQL injections sind Schwachstellen die bei Web Anwendungen auftreten, die mit einer Datenbank arbeiten.

Was sind SQL injections?

Einleitung

SQL injections sind Schwachstellen die bei Web Anwendungen auftreten, die mit einer Datenbank arbeiten. SQL injections tauchen meistens bei Login Forms, Suchleisten oder anderen Feldern mit User-Input und Datenbank Nutzung auf. Wenn dieser User-Input nicht genügend überprüft und/oder gefiltert wird, ist es einem Angreifer möglich SQL Querys zu übergeben die von der Datenbank im Hintergrund ausgeführt werden.

Erklärung

Damit eine SQL Injection möglich ist muss der User-Input ungenügend gefiltert und/oder überprüft werden und keine weiteren Sicherheitsmaßnahmen dürfen aktiv sein. Als Beispiel nehmen wir eine simple Suchfunktion her die als SQL Query wie folgt aussieht:

Normale Funktion der WebApp

SELECT first_name, last_name FROM users WHERE user_id = '$id';

Query der WebApp

Anhand dieses Beispiels können wir sehen, das wir einen User-Input in der Variable id haben. Dadurch das id User Controlled Input ist koennen wir die Schwachstelle ausnutzen und koennen unsere eigenen Query durch das Suchfeld ausfuehren lassen. Als simples Beispiel wollen wir uns alle Nutzer auf einmal anzeigen lassen. Um alle Nutzer als Output zu bekommen verwenden wir folgenden SQL Query:

User ID: ' or 1 = 1-- -

SQLi zeigt alle nutzer anstelle von nur einem

Wenn wir das in das Suchfeld eingeben sieht der Query in der Datenbank wie folgt aus:

SELECT * FROM products WHERE product_name = '' OR 1 = 1-- -'

mit dem ' schließen wir den SQL Query "product_name = ''", sodass alles was danach kommt von uns injiziert (injected) wurde. In diesem Fall "or 1 = 1-- -". Diese Abfrage ist immer wahr, d.h. damit werden alle Produkte ausgegeben, weil entweder der Produktname leer sein muss oder die Aussage 1 = 1 gilt. Danach folgen die Bindestriche die einen Kommentar darstellen und das letzte " ' " auskommentieren.

Das obere Beispiel ist ein sehr oberflächliches. Wenn eine SQL injection in dieser Art möglich ist, ist es auch möglich sensible Daten aus der Datenbank auszulesen und es besteht sogar die Möglichkeit den Webserver zu übernehmen.

In dem folgenden Screenshot ist ein Beispiel was mit so einer simplen Schwachstelle moeglich ist. In dem unten gezeigtem Fall war es uns moeglich alle Nutzer mit zugehoerigem Passwort auszugeben.

SQLi Nutzer + Passwoerter

Wie man sich vor SQL injections schützt

Als erste Sicherheitsmaßnahme gegen SQL injections ist es dem User-Input niemals blind zu vertrauen und den Input zu filtern um z.B Sonderzeichen zu verbieten.

Der User-Input darf in der Regel auch nicht direkt zum SQL-Interpreter weitergegeben werden. Um das Umzusetzen werden sogenannte prepared statements verwendet. Das sind Templates für Datenbank Abfragen die durch variable Parameter angepasst werden können.

Desweiteren wird es empfohlen für den potenziellen Einbruch in die Datenbank die Rechte des verwendeten Datenbank Benutzer zu limitieren und ihm nur so viel Rechte zu geben wie er auch wirklich benötigt. Es wird auch empfohlen für Passwörter eine ausreichende verschlüsselung zu wählen.

Newer post

DVWA Installation

DVWA Installation