Zum Inhalt springen

Nächste Bootcamp-Ausgabe
4. Mai 2026

SQL-Injection

Ein Code-Injection-Angriff, der Schwachstellen in Webanwendungen ausnutzt, indem bösartige SQL-Anweisungen in Eingabefelder eingefügt werden, wodurch Angreifer Datenbanken manipulieren, auf nicht autorisierte Daten zugreifen oder administrative Operationen ausführen können.

Autor
Unihackers Team
Lesezeit
3 Min. Lesezeit
Zuletzt aktualisiert

Warum es wichtig ist

SQL-Injection gehört seit über zwei Jahrzehnten konstant zu den kritischsten Webanwendungsschwachstellen. Obwohl gut verstanden und vermeidbar, plagt SQLi weiterhin Anwendungen und ermöglicht Datenlecks, die Millionen von Datensätzen offenlegen.

Die Auswirkungen von SQL-Injection gehen weit über einfachen Datenzugriff hinaus. Erfolgreiche Angriffe können:

  • Gesamte Datenbanken einschließlich Passwörter und persönliche Informationen extrahieren
  • Daten modifizieren oder löschen und betriebliche Störungen verursachen
  • Authentifizierung umgehen und Benutzer imitieren
  • Befehle auf dem zugrundeliegenden Server ausführen
  • In interne Netzwerksysteme pivotieren

Einige der größten Datenlecks in der Geschichte resultierten aus SQL-Injection, einschließlich Vorfällen bei großen Einzelhändlern, Regierungsbehörden und Technologieunternehmen.

Für Sicherheitsexperten ist SQL-Injection ein grundlegender Kompetenzbereich. Penetrationstester müssen diese Schwachstellen identifizieren und ausnutzen; Entwickler müssen sicheren Code schreiben; und Security Engineers müssen Verteidigungskontrollen implementieren.

Wie SQL-Injection funktioniert

SQL-Injection tritt auf, wenn Benutzereingaben ohne ordnungsgemäße Validierung oder Bereinigung in Datenbankabfragen eingebaut werden:

Beispiel für anfälligen Code

anfaelliger-login.php
PHP

// ANFÄLLIGER CODE - Niemals so machen!
$username = $_POST['username'];
$password = $_POST['password'];

$query = "SELECT * FROM users
        WHERE username = '$username'
        AND password = '$password'";

$result = mysqli_query($connection, $query);

Angriffsausführung

sql-injection-angriff.txt
Text

Normale Eingabe:
username: admin
password: passwort123

Abfrage wird zu:
SELECT * FROM users WHERE username = 'admin' AND password = 'passwort123'

Bösartige Eingabe:
username: admin' --
password: beliebig

Abfrage wird zu:
SELECT * FROM users WHERE username = 'admin' --' AND password = 'beliebig'

Das -- kommentiert die Passwortprüfung aus, gewährt Zugang!

Arten von SQL-Injection

In-Band SQLi

Ergebnisse werden direkt in der Anwendungsantwort zurückgegeben.

Union-basiert: Kombiniert Angreifer-Abfrageergebnisse mit legitimer Abfrageausgabe.

union-injection.sql
SQL

-- Ursprüngliche Abfrage: SELECT name, preis FROM produkte WHERE id = '1'

-- Injection: 1' UNION SELECT username, password FROM users --
-- Kombinierte Abfrage extrahiert Benutzer-Credentials neben Produktdaten

Fehlerbasiert: Extrahiert Daten durch Datenbankfehlermeldungen.

Blind SQLi

Keine direkte Ausgabe sichtbar; Angreifer schließen Ergebnisse aus Anwendungsverhalten.

Boolean-basiert: Unterschiedliche Antworten basierend auf wahr/falsch-Bedingungen.

boolean-blind.sql
SQL

-- Wenn erstes Zeichen des Passworts 'a' ist, lädt Seite normal
1' AND SUBSTRING((SELECT password FROM users WHERE id=1),1,1)='a' --

-- Zeichen für Zeichen durchgehen, um Daten zu extrahieren

Zeitbasiert: Verwendet Datenbankverzögerungen zur Informationsextraktion.

zeitbasiert.sql
SQL

-- Wenn Bedingung wahr, verzögert Antwort 5 Sekunden
1' AND IF(SUBSTRING(password,1,1)='a', SLEEP(5), 0) --

Out-of-Band SQLi

Daten werden über externe Kanäle exfiltriert (DNS, HTTP-Anfragen).

Auswirkungen von SQL-Injection

Datenexfiltration

  • Benutzerzugangsdaten, persönliche Informationen, Finanzdaten extrahieren
  • Gesamte Datenbankinhalte dumpen
  • Auf Daten über mehrere Tabellen und Datenbanken zugreifen

Authentifizierungsumgehung

auth-bypass.sql
SQL

-- Klassische Umgehung: immer-wahre Bedingung
' OR '1'='1' --
' OR 1=1 --
admin' --

Datenmanipulation

  • Kontostände oder Berechtigungen modifizieren
  • Datensätze löschen oder Tabellen droppen
  • Bösartige Daten einfügen

Systemkompromittierung

  • Betriebssystembefehle ausführen (über xp_cmdshell usw.)
  • Dateien auf dem Server lesen/schreiben
  • In internes Netzwerk pivotieren

Präventionstechniken

Parametrisierte Abfragen (Prepared Statements)

Die primäre Verteidigung – trennt SQL-Code von Benutzerdaten.

sicheres-python.py
Python

# SICHER - Verwendung parametrisierter Abfrage
cursor.execute(
  "SELECT * FROM users WHERE username = %s AND password = %s",
  (username, password)
)
sicheres-java.java
JAVA

// SICHER - Verwendung von PreparedStatement
String query = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement stmt = connection.prepareStatement(query);
stmt.setString(1, username);
stmt.setString(2, password);
ResultSet rs = stmt.executeQuery();

Eingabevalidierung

  • Datentypen validieren (Integer erwartet, Strings ablehnen)
  • Erlaubte Zeichen whitelisten
  • Bekannte bösartige Muster ablehnen
  • Längenbeschränkungen validieren

Gespeicherte Prozeduren

stored-procedure.sql
SQL

-- SICHER wenn richtig implementiert
CREATE PROCEDURE AuthenticateUser
  @Username NVARCHAR(50),
  @Password NVARCHAR(50)
AS
BEGIN
  SELECT * FROM Users
  WHERE Username = @Username AND Password = @Password
END

Verteidigung in der Tiefe

  • Web Application Firewall (WAF) zur Erkennung von Angriffsmustern
  • Prinzip der minimalen Rechte für Datenbankkonten
  • Unnötige Datenbankfunktionen deaktivieren
  • Sensible Daten im Ruhezustand verschlüsseln
  • Regelmäßige Sicherheitstests und Code-Reviews

Testen auf SQL-Injection

Manuelle Tests

test-payloads.txt
Text

Grundlegende Test-Payloads:
'
"
1' OR '1'='1
1' AND '1'='2
1; DROP TABLE users --
' UNION SELECT NULL --

Automatisierte Werkzeuge

  • SQLMap: Automatisierte SQL-Injection-Erkennung und -Ausnutzung
  • Burp Suite: Webanwendungssicherheitstest-Plattform
  • OWASP ZAP: Open-Source Web-Scanner

Karriereverbindung

SQL-Injection-Expertise ist über Sicherheitsrollen hinweg wertvoll. Web-Anwendungs-Penetrationstester testen regelmäßig auf SQLi und nutzen es aus; Secure-Code-Reviewer identifizieren anfällige Muster; und Application Security Engineers implementieren Präventionskontrollen.

Application Security Rollen (US-Markt)

RoleEntry LevelMid LevelSenior
Application Security Analyst75 $100 $135 $
Web Application Pen Tester80 $110 $145 $
Application Security Engineer95 $125 $165 $

Source: CyberSeek

Im Bootcamp

Wie wir SQL-Injection unterrichten

In unserem Cybersecurity-Bootcamp lernen Sie nicht nur SQL-Injection in der Theorie, sondern üben mit echten Tools in praktischen Labs, angeleitet von Branchenfachleuten, die diese Konzepte täglich anwenden.

Behandelt in:

Modul 10: Penetrationstests und Ethisches Hacking

Verwandte Themen, die Sie beherrschen werden:MetasploitNmapBurp SuitePrivilege Escalation
Sehen Sie, wie wir das unterrichten

360+ Stunden von Experten geleitete Ausbildung • 94% Beschäftigungsquote