SQL Injection: Eine unsichtbare Gefahr und wie du dich davor schützen kannst
SQL-Injection (SQLi) ist eine kritische Web-Schwachstelle. Angreifer schleusen bösartigen Code in Datenbankabfragen ein, um Daten zu stehlen oder zu verändern. Es gibt verschiedene Angriffstypen (z.B. In-Band, Blind, UNION-based). Schutz bieten u.a. Prepared Statements, Eingabevalidierung und WAFs.

Stell dir vor, jemand hätte die Macht, in die Datenbanken deines Unternehmens einzudringen, vertrauliche Informationen zu stehlen oder sogar deine Systeme lahmzulegen – und das alles durch eine einzige Schwachstelle. Genau das ermöglicht eine der gefährlichsten Sicherheitslücken im Bereich der Webanwendungen: SQL Injection (SQLi).
Doch es gibt auch eine gute Nachricht: Die Bedrohung lässt sich mit einfachen Maßnahmen entschärfen. In diesem Artikel erfährst du, was SQLi genau ist, wie Angreifer diese Schwachstelle ausnutzen und – am wichtigsten – wie du dich effektiv davor schützen kannst.
Dieser Beitrag dient ausschließlich zur Aufklärung und Demonstration technischer Möglichkeiten. Der Einsatz von den beschriebenen Techniken ohne ausdrückliche Genehmigung ist illegal und verstößt gegen ethische Richtlinien. Nutzen Sie die hier beschriebenen Informationen ausschließlich für Bildungszwecke und jederzeit innerhalb des gesetzlichen Rahmens.
Was ist SQLi und wie funktioniert es?
Structured Query Language Injection, kurz SQLi, ist eine kritische Sicherheitsanfälligkeit bei Webanwendungen, die es Angreifern ermöglicht, schädlichen SQL-Code in Datenbankabfragen einzuschleusen. Hierbei gibt es verschiedene Arten von SQL Injection, darunter In-Band SQLi, Blind SQLi und Out-of-Band SQLi. Im Folgenden werden wir einige dieser Varianten näher erläutert:
Klassische (In-Band) SQL Injection
Die klassische SQL Injection ist die direkteste Form. Der Angreifer schleust bösartigen SQL-Code in eine Eingabe ein, und die Ergebnisse werden direkt in der Anwendung angezeigt.
Beispiel:
SELECT *
FROM users
WHERE username = '' OR '1'='1';
Da '1'='1'
immer wahr ist, gibt diese Abfrage alle Benutzer in der Datenbank zurück, anstatt nur den Benutzer mit dem angegebenen Benutzernamen.
Ein weiteres Beispiel:
Um das Passwort eines bestimmten Benutzers (z. B. "admin") zu erhalten, könnte der Angreifer Folgendes eingeben:
UNION SELECT password
FROM users
WHERE username = 'admin' --
Die resultierende Abfrage:
SELECT *
FROM users
WHERE username = ''
UNION SELECT password
FROM users
WHERE username = 'admin' – ';
Der Teil --
kommentiert den Rest der ursprünglichen Abfrage aus.
Auswirkungen:
Der vollständige Zugriff auf die Datenbank, einschließlich Auslesen, Ändern oder Löschen von Daten ist ermöglicht.
Boolean-based Blind SQL Injection
Bei dieser Technik sieht der Angreifer keine direkten Daten aus der Datenbank. Stattdessen beobachtet er das Verhalten der Anwendung, um Informationen zu extrahieren.
Beispiel:
Die Anwendung könnte eine Meldung wie "Benutzer existiert" oder "Benutzer existiert nicht" anzeigen. Der Angreifer kann dann Abfragen wie diese verwenden:
SELECT *
FROM users
WHERE username = 'test'
AND (
SELECT 1
FROM users
WHERE username = 'admin'
) IS NOT NULL;
Zeigt die Anwendung die Meldung "Benutzer existiert" an, weiß der Angreifer, dass ein Benutzer mit dem Namen "admin" existiert. Durch systematisches Testen kann er weitere Informationen extrahieren, etwa die Länge eines Passworts:
SELECT *
FROM users
WHERE username = 'test'
AND LENGTH((
SELECT password
FROM users
WHERE username = 'admin'
)) > 10;
Durch Anpassen der Zahl kann die genaue Länge ermittelt werden.
Auswirkungen:
Langsame, aber stetige Extraktion von Daten aus der Datenbank.
Time-based Blind SQL Injection
Ähnlich wie bei der Boolean-basierten Variante sieht der Angreifer keine direkten Daten, nutzt aber Zeitverzögerungen, um Informationen zu gewinnen.
Beispiel:
Der Angreifer verwendet IF
- oder CASE
-Anweisungen in Verbindung mit SLEEP()
(MySQL) oder WAITFOR DELAY
(SQL Server), um eine Verzögerung zu erzeugen:
SELECT *
FROM users
WHERE username = 'test'
AND IF((
SELECT SUBSTRING(password, 1, 1)
FROM users
WHERE username = 'admin'
) = 'a', SLEEP(5), 0);
Wenn das erste Zeichen des Passworts des Admins 'a' ist, verzögert sich die Antwort um 5 Sekunden.
Auswirkungen:
Ähnlich wie bei der Boolean-basierten Injection, jedoch noch langsamer.
UNION-based SQL Injection
Diese Technik nutzt den UNION
-Operator, um eine zusätzliche Abfrage an die ursprüngliche Abfrage anzuhängen und so Daten aus anderen Tabellen zu extrahieren.
Beispiel:
Die ursprüngliche Abfrage:
SELECT id, name
FROM products
WHERE category = '$category';
Der Angreifer könnte Folgendes eingeben:
UNION SELECT username, password
FROM users --;
Die resultierende Abfrage:
SELECT id, name
FROM products
WHERE category = ''
UNION SELECT username, password
FROM users – ';
Voraussetzung ist, dass die Anzahl und die Datentypen der Spalten übereinstimmen.
Auswirkungen:
Extraktion von Daten aus beliebigen Tabellen der Datenbank

Dich interessieren Webschwachstellen? Dann schau doch gerne bei unserem Beitrag über die OWASP Top 10 vorbei!
Allgemeine Auswirkungen
Ein solcher Angriff kann gravierende Folgen haben: Daten könnten gestohlen oder manipuliert werden, und auch Identitätsdiebstahl ist eine mögliche Konsequenz. Für Unternehmen kann dies erhebliche Schäden bedeuten, sowohl in Bezug auf die Reputation als auch auf die finanzielle Stabilität.
Relevanz
In der Vergangenheit waren Angriffe auf größere Unternehmen durch SQLi keine Seltenheit, wie das Beispiel von Heartland Payment Systems 2008 zeigt. Die Angreifer verschafften sich unautorisierten Zugriff auf die Web-Login-Seite mittels SQLi. Dieser Angriff begann bereits 2007 und wurde erst 2008 durch Cybersicherheitsexperten entdeckt.
Auch andere große Unternehmen wie Yahoo und TalkTalk fielen SQLi-Angriffen zum Opfer. Diese Vorfälle verdeutlichen, wie wichtig es ist, sich aktiv gegen solche Bedrohungen zu schützen.
Gegenmaßnahmen
Um SQLi-Angriffe zu verhindern, können folgende Maßnahmen ergriffen werden:
- Überwachung von Datenbankabfragen: Auf auffällige Muster oder ungewöhnliche Abfragen achten.
- Überprüfung von Server-Logs: Verdächtige Aktivitäten erkennen.
- Automatisierte Schwachstellenscans: SQLi frühzeitig identifizieren und beheben.
- Einsatz bewährter Sicherheitsmethoden:
- Prepared Statements: Verwendung parametrisierter Abfragen.
- Eingabevalidierung: Prüfung von Benutzereingaben auf gültige Werte.
- Stored Procedures: Vordefinierte SQL-Abfragen, die Eingaben validieren.
- Web Application Firewalls (WAF): Schutz vor schädlichem Datenverkehr.
Fazit
SQL Injection (SQLi) stellt eine erhebliche Bedrohung für Webanwendungen und sensible Daten dar. Angesichts der heutigen technologischen Möglichkeiten und der potenziell schwerwiegenden Folgen eines erfolgreichen Angriffs ist es unerlässlich, präventive Maßnahmen zu ergreifen. Entwickler müssen sichere Programmierpraktiken wie Prepared Statements und Eingabevalidierung konsequent anwenden, um SQLi von vornherein zu verhindern. Unternehmen sollten proaktive Sicherheitsmaßnahmen wie regelmäßige Sicherheitsüberprüfungen, Penetrationstests und Schulungen zum Thema sichere Softwareentwicklung implementieren, um ein Höchstmaß an Schutz zu gewährleisten.
Die Verantwortung für die Sicherheit von Anwendungen liegt sowohl bei Entwicklern als auch bei Systemadministratoren. Nur durch kontinuierliche Wachsamkeit, konsequente Umsetzung bewährter Sicherheitsstandards und fortlaufende Weiterbildung kann das Risiko von SQLi-Angriffen nachhaltig minimiert werden.
Weiterführende Informationen zu SQLi findest du hier:
Wikipedia SQLi, Crowdstrike, Enginsight, Kaspersky, Cloudflare, Barracuda
Falls du etwas mehr Praxisbezug brauchst, können wir dir diese Übungen von TryHackMe empfehlen.