Worum es hier geht
SQL-Injection ist seit 25 Jahren der Klassiker im Web-Pentesting, und sie ist nicht weg. OWASP Top 10 listet sie 2026 immer noch unter "Injection" auf Platz 3. Sie taucht bis heute in Bug-Bounty-Reports auf. Wer das nicht selbst geübt hat, übersieht die meisten Vektoren.
Dieser Artikel zeigt, wie du in 10 Minuten ein eigenes Lab aufsetzt (DVWA + WebGoat in Docker), und wie Claude Code als Pair-Partner dabei wirklich hilft — bzw. wo er nervt. Alles im eigenen Lab, ohne externe Systeme zu berühren.
Lab-Setup in 10 Minuten
Zwei Docker-Container, ein eigenes Netz, fertig.
# Eigenes Bridge-Netz, keine Verbindung nach außen
docker network create --internal lab-net
# DVWA (Damn Vulnerable Web Application)
docker run -d --name dvwa --network lab-net \
-p 127.0.0.1:8080:80 vulnerables/web-dvwa
# WebGoat (Tutorial-orientiert, OWASP-Projekt)
docker run -d --name webgoat --network lab-net \
-p 127.0.0.1:8081:8080 webgoat/goatandwolf
DVWA braucht noch das initiale Setup: http://127.0.0.1:8080/setup.php öffnen, "Create / Reset Database" klicken, einloggen mit admin/password, Security-Level auf low stellen für den Anfang.
WebGoat: http://127.0.0.1:8081/WebGoat öffnen, Account anlegen (rein lokal), und du landest in einer geführten Tutorial-Suite mit ~20 SQL-Injection-Lessons.
Wichtig: --internal bei docker network create verhindert, dass die Container-Ports nach außen erreichbar werden. 127.0.0.1:8080:80 bindet sie nur an localhost. Das ist Lab-Hygiene — DVWA hat absichtlich kaputte Configs, das willst du nicht öffentlich.
Stufe 1 — DVWA "Low": Der Klassiker
Ziel auf der DVWA-Seite "SQL Injection": Eingabefeld "User ID", normaler Output ist "First Name: admin, Surname: admin".
Was funktioniert sofort:
1' OR '1'='1
Output: alle User der Tabelle. Das ist der UNION-loose Bypass aus 2003.
Was Claude Code dazu beiträgt:
Gibt man Claude den HTML-Source des Formulars und fragt: "Was ist die offensichtlichste SQL-Injection-Payload für dieses Feld? Erklär mir warum, ich will lernen." — kommt eine korrekte Erklärung, plus drei Varianten mit unterschiedlichen Quote-Escapes (', ", \').
Das ist eigentlich Wikipedia-Wissen — Claude beschleunigt den Erinnerungsprozess, wenn man seit Jahren keine SQL-Injection mehr manuell gemacht hat.
Wo Claude irrt auf Stufe Low:
Bei der Frage "kannst du eine Payload schreiben, die mir das Schema zeigt?" schlägt Claude gern zuerst MS-SQL-Syntax vor (SELECT name FROM sys.tables), obwohl DVWA MySQL ist. Erst nach explizitem Hinweis "DVWA nutzt MySQL" kommt die korrekte INFORMATION_SCHEMA.TABLES-Variante. Lehre: Claude immer die Tech-Stack-Annahmen explizit machen.
Stufe 2 — DVWA "Medium": Erstmal Reverse Engineering
Auf "Medium" filtert DVWA Quotes raus, das einfache ' OR '1'='1 funktioniert nicht mehr.
Hier wird Claude wertvoll: Man gibt Claude den PHP-Source der Medium-Seite (DVWA zeigt den Source unter "View Source"):
$id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id);
$query = "SELECT first_name, last_name FROM users WHERE user_id = $id";
Claude erkennt: "Das Filter macht nichts gegen Integer-basierte Injection — der Wert wird nicht in Quotes eingebettet. Probier 1 UNION SELECT user, password FROM users-- ohne Anführungszeichen."
Funktioniert. Das ist der Punkt, wo Claude Code wirklich Zeit spart — Source-Code-Audit-Mode mit gerichteten Hypothesen.
Stufe 3 — DVWA "High": Blind Time-Based
"High" zeigt keinen Output mehr — der Server gibt immer "User exists" oder "User does not exist" zurück. Klassiker für Blind SQL Injection.
Manuelle Payload für MySQL:
1 AND IF(SUBSTRING((SELECT password FROM users LIMIT 0,1),1,1)='5', SLEEP(3), 0)
Wenn die Response 3+ Sekunden braucht, ist das erste Zeichen ein "5". Sonst weiter zum nächsten Zeichen.
Hier ist eine lehrreiche Falle: Bittet man Claude "Schreib mir ein Python-Skript, das diese Blind-Extraction automatisiert", liefert es ein funktionierendes Skript — aber im Wesentlichen sqlmap mit anderem Logo. Lessons:
- Claude Code generiert lauffähigen Blind-SQL-Extractor-Code in 2 Minuten
- Aber das ist genau, was sqlmap auch tut, und sqlmap ist getestet, gewartet und Standard
- So ein generiertes Skript braucht typischerweise ~4 Minuten für einen 32-Zeichen-Hash; sqlmap-Default: ~1 Minute
Konkrete Empfehlung: Für Blind-SQLi nutze sqlmap. Claude ist gut für die Erklärung, nicht für die Automation.
sqlmap -u "http://127.0.0.1:8080/vulnerabilities/sqli/?id=1" \
--cookie="security=high; PHPSESSID=xxxxx" \
--dbs --batch
WebGoat: Wo Claude wirklich glänzt
WebGoat hat 12 SQL-Injection-Lessons mit Hinweisen, Lösungen und Erklärungen. Das ist der bessere Ort zum Lernen.
Bei Lesson 9 ("String SQL Injection") gibt WebGoat das SQL-Statement im Hint:
SELECT * FROM employees WHERE last_name = '[INPUT]'
Fragt man Claude: "Hier ist das Template. Schreib mir 5 unterschiedliche Payloads, die alle Mitarbeiter zurückgeben — von simpel zu komplex. Für jede: Erklär den Mechanismus." — kommt in Sekunden:
' OR '1'='1— klassisch' OR 1=1--— comment-bypass' UNION SELECT NULL, NULL, NULL FROM employees--— UNIONSmith' OR last_name LIKE '%' OR last_name='— kreativ' OR EXISTS(SELECT * FROM employees)='1— exotisch
Plus eine kleine Tabelle, wie sich die Payloads je DB-Engine unterscheiden. Genau das, was ein Lerner braucht. Das ist Pair-Tutoring auf hohem Niveau.
Wo Claude Code Blödsinn produziert
Drei typische Anti-Pattern:
Erstens: NoSQL-Injection für SQL-Datenbanken vorgeschlagen. Fragt man bei einer DVWA-Variante "wie injecte ich das?" ohne Tech-Stack zu nennen, bietet Claude schon mal MongoDB-Operator-Syntax an ({"$ne": null}). Blind copy-pasted verliert man 20 Minuten.
Zweitens: Python-sqlmap-Reimplementierung. Wie oben — Claude erfindet das Rad neu, wenn man es nicht stoppt. Bei Standard-Tools (sqlmap, ffuf, gobuster, sqlninja) immer fragen: "Gibt's das schon als Tool? Welches?"
Drittens: Falsche CVE-Referenzen. Bei einer WebGoat-XML-Injection-Lesson nennt Claude schon mal eine CVE (CVE-2018-irgendwas), die es nicht gibt. Nachschauen — keine Spur. Das ist die klassische LLM-Halluzination. Bei sicherheitsrelevanten Aussagen immer mit searchsploit oder NIST NVD Database verifizieren.
Ein bewährtes Setup für SQL-Injection-Üben
- DVWA + WebGoat in Docker auf einem internen Bridge-Netz, port-bound auf localhost
- Claude Code in einem isolierten Verzeichnis pro Lesson,
defaultpermission mode - BurpSuite Community parallel offen für Repeater und Comparer
- sqlmap für Blind-SQLi und Mass-Extraction (keine Claude-Reimplementierung)
~/labs/sqli/.claude/settings.jsonmitBash(sqlmap *),Bash(curl *)allowed
Plus eine LESSONS.md im Verzeichnis, in der du pro Lesson notierst: Was war die Lücke, welche Payload, was hättest du nicht ohne Claude gefunden. Das ist dein Notizbuch und gleichzeitig Kontext, den Claude in der nächsten Session lesen kann.
Fazit
Claude Code ist auf SQL-Injection ein Tutor, kein Tool. Es erklärt brillant, generiert Payloads in Sekunden, hilft beim Source-Code-Audit. Es ist NICHT der bessere sqlmap, und für echte Bug-Bounty-Hunts bleibt das Standard-Toolset (sqlmap, BurpSuite, ffuf) überlegen.
Wenn du SQL-Injection lernen willst: Lab aufsetzen, WebGoat parallel zu Claude öffnen, jede Lesson erst manuell versuchen, dann Claude nach Erklärung fragen. So baust du die Intuition auf, die später die richtigen Lookups in den Tools triggert.
Rechtlicher Hinweis
Die hier gezeigten Techniken dürfen ausschließlich in einem der folgenden Kontexte angewendet werden:
- Eigenes Lab / eigene Hardware (DVWA + WebGoat in Docker, internes Netz)
- Capture-The-Flag-Umgebung (HackTheBox, TryHackMe, OverTheWire)
- Schulungsumgebung (DVWA, Juice Shop, WebGoat, HackerLab)
- Autorisierter Pentest mit schriftlichem Auftrag
- Bug-Bounty-Programm im dokumentierten Scope (HackerOne, Intigriti, YesWeHack)
Die Anwendung dieser Techniken gegen Systeme Dritter ohne ausdrückliche schriftliche Erlaubnis ist in Deutschland nach §§ 202a, 202b, 202c, 303a, 303b StGB strafbar. Wir übernehmen keine Haftung für Missbrauch.
Du bist Pentester, Bug-Bounty-Hunter oder CTF-Spieler? Komm in die Zone "Hacking & Security" im Discord — da diskutieren wir Techniken und teilen Lab-Setups.





