Code Injections sind die ältesten bekannten Angriffsvektoren für Webanwendungen, wobei erfolgreiche Hacks zu einer Dienstverweigerung, einem Verlust der Datenintegrität, einem Datenverlust und der Kompromittierung ganzer Netzwerke führen. Daher rangieren auf Injektionen basierende Sicherheitsschwachstellen auf Platz eins der OWASP Top 10 Sicherheitsrisiken. Sie ermöglichen es Angreifern, über Benutzereingabe-Schnittstellen bösartigen Code in Informationssysteme einzuschleusen. Ein solcher Mechanismus ist eine SQL injection attack, bei der SQL-Abfragen in Client-Eingaben eingefügt werden, um auf Backend-Datenbanken zuzugreifen und diese zu verwalten. SQL-Injection-Angriffe werden meist auf Webanwendungen ausgeführt, die sich auf dynamische Datenbanken stützen, aber keine ausreichende Eingabevalidierung aufweisen.
Dieser Artikel befasst sich mit den auf SQL injection basierenden Sicherheitsrisiken und den verschiedenen Best Practices und Tools zur Verhinderung solcher Angriffe.

Ein tiefes Eintauchen in SQL Injection Schwachstellen
Wenn ein böswilliger Benutzer einen SQL Injection Angriff (SQLi) durchführt, beabsichtigt er in der Regel, den Datenbankserver der Webanwendung mit böswilligen SQL-Anweisungen zu kontrollieren. Dadurch können sie die Authentifizierungskontrollen umgehen, die für den Zugriff auf die Datenbank und den Abruf ihrer Inhalte erforderlich sind. Dies wird in der Regel von Hackern initiiert, die die Anwendungs-Firewall nach anfälligen Benutzereingabepunkten ausspähen.
Sobald sie identifiziert sind, erstellt der Angreifer Eingabeinhalte, die als bösartige Payload bekannt sind, und führt nicht autorisierte SQL-Injektionsbefehle in der Back-End-Datenbank aus.
Angreifer entwickeln häufig SQL Injection Befehle, um eine Vielzahl von böswilligen Handlungen durchzuführen, wie z. B:
- Abrufen von Benutzeranmeldeinformationen innerhalb der Datenbank
- Auswählen und Ausgeben wichtiger Systemdaten
- Anhängen oder Hinzufügen neuer Daten zu einer Datenbank
- Löschen von Tabellen und Datensätzen aus der Datenbank
- Verwendung des Back-End-Datenbank-Servers für den Zugriff auf das Betriebssystem
SQLi Sicherheitsbewertung

CVSS Vector: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Arten von SQL Injection Attacks
SQLi ist eine weit verbreitete und gut dokumentierte Angriffsstrategie, deren Erfolg weitreichende geschäftliche Konsequenzen hat, wie z. B. die unbefugte Einsichtnahme in Anmeldedaten und der administrative Zugriff auf die Datenbank der Anwendung. SQLi-Angriffe werden anhand der folgenden Methoden kategorisiert, die für den Zugriff auf die Datenbank verwendet werden:
In-band SQLi
Der Angreifer sammelt seine Ergebnisse über denselben Kommunikationskanal, den er auch für seine Angriffe verwendet. Diese Technik der Code Injection ist weit verbreitet, da sie einen einfachen und effizienten Weg zum Zugriff auf den Datenbankserver bietet. Es gibt mehrere Arten von In-Band-SQLi, darunter:
Error-based SQLi
Der Angreifer verlässt sich auf die vom Datenbankserver übermittelten Fehlermeldungen, um etwas über die Struktur der Datenbank zu erfahren. Manchmal können die Fehlermeldungen genügend Daten liefern, um die gesamte Datenbank durchzugehen.
Union-based SQLi
In dem UNION-SQL-Angriff Fall verwendet die Malware den SQL-Operator UNION, um die Ergebnisse mehrerer SELECT-Anweisungen zu einer Ausgabe zu kombinieren, die zusammen mit der HTTP-Antwort zurückgegeben wird.
Blind SQL Injection/Inferential SQLi
Bei einer Blind SQLi Technik sendet der Hacker bösartige Payload-Dateien und rekonstruiert dann die Struktur des Datenbankservers anhand der Antwort der Webanwendung. Bei Blind SQLi werden die Daten nicht tatsächlich von der Webanwendung abgerufen, so dass der Angreifer die Ergebnisse eines Angriffs nicht über denselben Kommunikationskanal einsehen kann, über den er diese Art von Angriff gestartet hat. Blind SQL Injection, die auch als Inferential-Methode bezeichnet wird, gibt es in verschiedenen Varianten:
Content-based SQLi
Content/Boolean-based SQLi Angriffe zwingen die Webanwendung dazu, unterschiedliche Ergebnisse zurückzugeben, je nachdem, ob die bösartige SQL-Abfrage ein TRUE- oder FALSE-Ergebnis liefert. Das Ergebnis der Abfrage bestimmt, ob der Inhalt der HTTP-Antwort gleich bleibt oder sich ändert. So kann der Angreifer feststellen, ob die bösartige Payload ein wahres oder falsches Ergebnis liefert, obwohl die Abfrage keine Daten aus der Datenbank zurückgibt.
Time-based SQLi
Der Angreifer sendet eine Abfrage, die die Anwendung zwingt, eine bestimmte Zeit zu warten, bevor sie eine Antwort zurückgibt. Der Angreifer verwendet die Antwortzeit, um festzustellen, ob das Ergebnis einer Abfrage TRUE oder FALSE ist.
Out-of-Band SQLi
Der Angreifer verwendet denselben Kanal, um den Angriff zu starten und Ergebnisse zu sammeln. Diese Attacke ist zwar ungewöhnlich, da er davon abhängt, dass bestimmte Funktionen des Datenbankservers aktiviert sind, er bietet jedoch eine Alternative für die Durchführung von Injektionsangriffen, wenn die Serverantworten instabil sind.
Wie Angreifer SQLi durchführen
Web-page SQLi
Wenn eine Webanwendung nach Benutzereingaben fragt, liefern einige Angreifer SQL-Anweisungen, die unwissentlich in der Datenbank ausgeführt werden. In diesem Abschnitt wird untersucht, wie Angreifer Payloads erstellen, die bei der Benutzereingabe gültige SQL-Anweisungen generieren.
SQLi based on 1=1 is Always True
Der Angreifer verwendet eine OR-Anweisung, um auf alle Datensätze in einer Tabelle zuzugreifen. Bei der Aufforderung zur Eingabe einer Benutzer-ID gibt der Angreifer 105 OR 1=1 ein. Wenn die Webanwendung nicht über eine ausreichende Eingabeüberprüfung verfügt, wird diese Anweisung akzeptiert und ein SQL-Befehl der folgenden Form erzeugt
SELECT * FROM Users WHERE UserId = 105 OR 1=1;
Diese Abfrage greift auf alle Datensätze in der Tabelle Users zu und zeigt sie an, da 1=1 immer TRUE ist.
SQLi based on “=” is Always True
Angreifer verwenden eine OR-Anweisung, um Kombinationen von zusammengehörigen Daten zu erhalten. Wenn sie zur Eingabe eines Benutzernamens und eines Passworts aufgefordert werden, geben sie in beiden Feldern “ oder “ „=“ ein. Der Datenbankserver führt dann einen Befehl der folgenden Form aus
SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""="
Dieser Befehl gibt jede Zeile der Tabelle Users zurück, da OR „=“ für Usernamen und Passwörter immer wahr ist.
SQLi based on Batched Statements
Moderne Datenbankserver akzeptieren Batch-Anweisungen, die Hacker ausnutzen können, um bestimmte Datensätze oder Tabellen anzugreifen. Wenn sie zum Beispiel nach ihrer Benutzer-ID gefragt werden, geben sie 105; DROP TABLE Suppliers ein. Dies führt eine gültige Anweisung der Form aus:
SELECT * FROM Users WHERE UserId = 105; DROP TABLE Suppliers;
Dies löscht die Tabelle Suppliers aus den Benutzerdatensätzen.
Beispiele für bekannte SQLi-Angriffe und -Techniken
Erfolgreiche SQLi-Angriffe können dazu verwendet werden, vorhandene Daten zu manipulieren, wichtige Informationen preiszugeben, Verwaltungsrechte für Netzwerke zu erlangen und Probleme bei der Ablehnung von Daten zu verursachen. Beispiele für SQLi-Angriffe auf Unternehmenssysteme sind:
Die Datenpanne der Bulgarischen Nationalen Steuerbehörde 2019
Am 15. Juli 2019 gab ein anonymer Hacker bekannt, dass er erfolgreich eine SQL-Injection auf den Servern der nationalen Steuerbehörde durchgeführt hat. Der Hacker extrahierte 11 GB an Daten in 57 Ordnern mit .csv-Dateien, die Namen und Identifikationsinformationen von über 6 Millionen Menschen enthielten. Die Dateien enthielten auch die Sozialversicherungszahlungen der Bürger, Steuern, Daten zu Online-Wetten, Schulden, Unternehmensaktivitäten und Einnahmen, die über 12 Jahre hinweg gesammelt wurden.
Die Datenpanne im Jahr 2020/2021 bei Accellion
Die Angreifer nutzten eine SQL-Injection-Schwachstelle, um sich Zugang zur Accellion File Transfer Appliance (FTA) zu verschaffen und einen massiven Datenverlust zu verursachen. Davon waren mehrere Unternehmen in verschiedenen Branchen und Ländern betroffen. Die Daten der Opfer begannen auf CLOP LEAKS, einem Ransomware-Forum, aufzutauchen. Die Zero-Day-Schwachstellen, die den erfolgreichen Angriff ermöglichten, müssen noch behoben werden, da immer mehr Unternehmen die Kompromittierung von Benutzerdaten melden.
Wie kann man SQL injections verhindern
SQLi-Angriffe zu verhindern ist ein komplexer und anspruchsvoller Prozess, da die Verhinderungstechniken je nach der verwendeten Programmiersprache, der SQL-Datenbank-Engine und dem angesprochenen SQLi-Subtyp variieren. In diesem Abschnitt werden die Tools und Best Practices zur Vermeidung von SQL injection vulnerabilities untersucht.
Leitfaden
Präventionsguide für JavaScript Schwachstellen
Erfahren Sie, wie Sie JavaScript Schwachstellen erkennen und verhindern können.
(Der Leitfaden ist derzeit nur auf Englisch verfügbar.)
Best Practices zur Vermeidung von SQLi-Schwachstellen
Zu den strategischen Grundsätzen und Praktiken, die Webanwendungen vor SQLi-Angriffen schützen sollen, gehören:
Training & Awareness
Jeder, der an der Entwicklung und Verwaltung der Anwendung beteiligt ist, sollte das Risiko und die Auswirkungen von SQL Injections kennen. Auch die Benutzer sollten geschult werden, damit sie verstehen, warum es wichtig ist, nur gültige Eingaben zu machen, wenn sie dazu aufgefordert werden.
Benutzereingaben filtern
Ein Datenbankadministrator sollte niemals auf Benutzereingaben vertrauen. Interne und öffentliche Benutzereingaben sollten alle gefiltert und validiert werden, bevor sie dem Datenbankserver zugänglich gemacht werden.
Whitelist-basierte Filter verwenden
Angreifer werden immer wieder raffinierte Methoden entwickeln, um Blacklists zu umgehen. Die Whitelist verhindert Angriffe mit Hilfe einer Liste, die nur bestimmten Benutzern den Zugriff auf das geschützte System erlaubt. Darüber hinaus können bösartige Payloads, die durch SQLi-Injektionen bereitgestellt werden, nicht ausgeführt werden, wenn sie nicht in der Whitelist enthalten sind.
Aktualisierte Webtechnologien verwenden
Software-Updates enthalten häufig Patches für entdeckte Sicherheitslücken. Hacker nutzen diese Schwachstellen in der Regel aus, um bösartige Nutzdaten zu verbreiten. Die Verwendung der neuesten gepatchten Versionen von Entwicklungsumgebungen und Frameworks erfüllt die Compliance-Standards und schützt die Webanwendung vor Angriffen, da die meisten Softwareunternehmen versuchen, den Hackern einen Schritt voraus zu sein.
Regelmäßig auf SQL Injections Scannen
Angreifer schleusen bösartige Eingaben über Schwachstellen ein, die sie im Systemcode entdecken. Daher sollten die Sicherheitsteams eine Bewertung der SQL-Schwachstellen mit den richtigen Tools durchführen, um mögliche Schwachstellen zu finden, bevor Angreifer sie ausnutzen können.
Praktische Tipps zur Vermeidung von SQL Injections
Um SQL-Injection-Angriffe zu verhindern, sollten Sie alle Benutzereingaben als potenziell bösartig behandeln und einige Programmierrichtlinien befolgen:
Nutzereingaben filtern
Damit ein Angreifer eine SQL Injection erfolgreich durchführen kann, muss er einen Code in die Datenbank der Webanwendung einschleusen. Daher sollten alle Benutzereingaben zunächst validiert und auf die benötigten Zeichen beschränkt werden. Sie können z. B. einen Benutzer auffordern, einen Benutzernamen, ein Passwort und eine E-Mail-Adresse in ein Registrierungsformular einzugeben. Sie können die zulässigen Zeichen für diese Eingabefelder auf Zeichen beschränken, die die Datenbank nicht beeinträchtigen. Das folgende Beispiel filtert Benutzereingaben für die drei Werte in PHP heraus:
if (preg_match("/[^A-Za-z0-9]/", $username) ||
(preg_match("/[^A-Za-z0-9\!_-]/", $password) ||
(preg_match("/[^A-Za-z0-9_-@]/", $email)) {
echo "Invalid Characters!";
} else {
# Run Database Command
}
Database Mappers
Die meisten modernen Web-Frameworks bieten eine gewisse Abstraktion der Datenbankbehandlung. Laravel bietet z. B. Eloquent-Abfragen. Erstellte Objekte werden automatisch konvertiert und in der Datenbank gespeichert oder von dort abgerufen. Im Beispiel des Benutzerregistrierungsformulars könnte man das Benutzerobjekt auf die folgende Weise erstellen:
$user = new User;
$user->username = $request->username;
$user->password = $request->password;
$user->email = $request->email;
$user->save();
Die resultierende SQL-Anweisung wird automatisch bereinigt und verhindert SQL Injections.
Benutzereingaben / vorbereitete Anweisungen bereinigen
Es ist nicht immer möglich, einen Datenbank-Mapper zu verwenden. Verwenden Sie in diesen Fällen vorbereitete Anweisungen, um Ihre SQL-Abfragen zu erstellen. Diese Art von Anweisungen validieren und bereinigen die vom Benutzer bereitgestellten Werte und verhindern so SQL Injections. In PHP können Sie z. B. eine vorbereitete Anweisung auf folgende Weise erstellen:
$stmt = $mysqli->prepare("INSERT INTO users(username, password, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $username, $password, $email) # "sss" here states, that three strings are expected.
$username = $request->username;
$password = $request->password;
$email = $request->email;
$stmt->execute();
Tools zur Verhinderung, Erkennung und Behebung von SQLi-Schwachstellen
Ein regelmäßiger Scan zur Bewertung von SQL-Schwachstellen ist die erste Maßnahme, um Webanwendungen vor SQLi-Schwachstellen zu schützen. Im Folgenden finden Sie eine Liste beliebter Schwachstellen-Scanner, die Sicherheitsteams bei der Identifizierung und Behebung von SQLi-Schwachstellen helfen können:
Crashtest Security
Crashtest Security ist eine End-to-End Security Testing Suite, die das Scannen von Schwachstellen durch schnelle Sicherheitsanalysen, Risikominderung und umfangreiche Schwachstellenberichte vereinfacht. Darüber hinaus lässt sich Crashtest in mehrere Schichten des Entwicklungsprozesses integrieren, so dass Teams einen kontinuierlichen Testprozess einrichten und Angriffsflächen auf APIs und Webanwendungen eliminieren können.
Die Sicherheitsplattform automatisiert auch das Scannen von Schwachstellen und liefert nahtlos Sicherheitsinformationen über die Webanwendung, so dass sich die Entwicklungsteams auf sauberen Code konzentrieren können.
Testen Sie unseren SQLi-Scanner kostenlos
Acunetix
Eine umfassende Lösung für Sicherheitstests, die sowohl für verteilte als auch für eigenständige Systeme verwendet werden kann. Acunetix lässt sich nahtlos in marktführende Entwicklungs-Frameworks integrieren und verfügt über integrierte Funktionen zum Scannen und Verwalten von Schwachstellen. Acunetix lässt sich auch mit Problemverfolgungsprogrammen von Drittanbietern verbinden, um das End-to-End-Schwachstellenmanagement zu unterstützen.
Burp Suite
Eine von PortSwigger entwickelte Lösung zum Testen der Sicherheit von Webanwendungen, die Unternehmen bei der Bekämpfung von Zero-Day-Bedrohungen durch automatisches Scannen unterstützt. Die Suite enthält auch Funktionen für Penetration Tests, mit denen sich die Auswirkungen von SQLi-Angriffen auf Webserver ermitteln lassen. Die Suite ist in einer Enterprise und einer Professional Edition erhältlich, die verschiedene Schwachstellenmanagement-Tools für die Sicherheit von Webanwendungen bietet.
Imperva Database Security
Imperva ist eine Datenbank-Risiko- und Compliance-Management-Plattform, die Analysen, Reaktionen und Schutz für die Datenbestände von Unternehmen bietet. Die Plattform lässt sich in jede Datenbank integrieren, sodass Unternehmen die globalen vorkonfigurierten Berichte, Richtlinien und Vorlagen nutzen können, sobald Imperva implementiert ist.
Summary
Trotz umfangreicher Bemühungen zur Behebung von Problemen sind SQLi-Schwachstellen nach wie vor weit verbreitet. Schätzungsweise 8 % der Websites und Webanwendungen weisen mindestens eine Sicherheitslücke auf. Darüber hinaus nutzen Angreifer SQLi-Schwachstellen auf vielfältige Weise aus, um eine Webanwendung durch unbefugten Datenbankzugriff zu missbrauchen.
Die Crashtest Security Suite hilft Unternehmen, ihre Webanwendungen und APIs durch kontinuierliche Schwachstellenscans und -tests vor Injektionsangriffen zu schützen. Darüber hinaus fügt sich die Sicherheitsplattform nahtlos in die DevOps-Toolchain ein und ermöglicht es Unternehmen, sicheres Javascript sowie sichere Webanwendungen und APIs zu entwickeln und einzusetzen.
Melden Sie sich hier kostenlos an, um zu erfahren, wie Crashtest Security mit einem schnellen Schwachstellen-Scan helfen kann, ein robustes Sicherheitsmodell zu erreichen.