DVWA-Lab: SQL-Injection und XSS in der Damn Vulnerable Web Application üben

DVWA, die Damn Vulnerable Web Application, vermittelt jeweils eine Schwachstelle: SQL-Injection, Blind-SQL-Injection, Command Injection, Cross-Site-Scripting (reflektiert und gespeichert), CSRF, Datei-Upload, Datei-Inklusion, schwache Sitzungskennungen, Brute Force und mehr. Dieses Lab startet sie samt Datenbank in der eigenen privaten Kopie jeder lernenden Person.

Jedes Ziel liegt in der eigenen Lab-Kopie der lernenden Person. Sie hat keine Verbindung ins Internet und keine zu anderen Lernenden. Angreifen lässt sich also nur die Anwendung, die das Lab für sie gestartet hat. Die Regel steht am Anfang des Labs: Greifen Sie Ihre eigene Kopie an, niemals eine Website, die Ihnen nicht gehört.

Was die Lernenden lernen

Dieselbe Übung auf vier Sicherheitsstufen, „low“, „medium“, „high“ und „impossible“, ist derselbe Code, erst unsicher und dann repariert. Die Schaltfläche „View Source“ jeder Übung zeigt den Code der geltenden Stufe, sodass die Lernenden sehen, was jede Korrektur ändert und warum die einfache Korrektur nicht reicht. Das Lab eignet sich für sicheres Programmieren und das Beheben von Schwachstellen: Eingabevalidierung, Ausgabekodierung, parametrisierte Abfragen und der Umgang mit Dateien.

Im Browser ausführen

Das Lab legt die Datenbank für die lernende Person an, es ist also nichts einzurichten. Es startet auf der Sicherheitsstufe „low“.

  1. Die Container-Seite öffnen. Öffnen Sie in der Leiste „Entwickeln“ und wählen Sie „Einen Container ausführen“. Die Seite steht jedem offen, und das Git-Lab und das SQL-Lab starten ohne Konto. Alle anderen Labs brauchen ein kostenloses Konto: Erstellen Sie eines, melden Sie sich an und klicken Sie dann auf „Starten“.
  2. Das Lab finden. Die Karte „Beispiel-Labs“ listet alle Beispiele auf. Suchen Sie DVWA.
  3. Auf „Starten“ klicken. „Starten“ führt das Lab unverändert mit einem Klick aus. „Zuerst die Datei bearbeiten“ öffnet die Compose-Datei, damit Sie sie vor dem Start ändern können.
  4. Öffnen. Klicken Sie auf der Seite des Labs auf „Öffnen“ und melden Sie sich als admin mit dem Passwort password an. Die Seite „DVWA Security“ hebt die Stufe an. Wer das Lab anhält und wieder startet, erhält ein frisches DVWA, genau wie mit „Create / Reset Database“ auf der Einrichtungsseite.

Was die Lernenden abgeben sollen

Einen Screenshot jeder Übung, gelöst auf „low“ und noch einmal auf „high“, mit der Adresse des Labs sichtbar, und zu jeder Übung eine schriftliche Erklärung in eigenen Worten: was die Schwachstelle ist, welche Eingabe sie verwendet haben, warum sie funktioniert hat und wie sich der Code auf „high“ unterscheidet. Für anspruchsvollere Arbeiten verlangen Sie neben dem Angriff auch den korrigierten Code.

Der Code auf GitHub

Die Compose-Datei führt das öffentliche Image von DVWA selbst aus, per Digest festgelegt, neben einer MariaDB-Datenbank, jeweils als Konten ohne Sonderrechte. DVWA steht unter der GPL-3.0 und wird nicht von uns verbreitet. Die CAPTCHA-Übung ist nicht verfügbar, weil sie einen Dienst im Internet braucht.

Eine Grundlagenlektion zu diesem Lab

DVWA Basics und DVWA Basics 2 sind kleine Lektionen, die in dieses Lab eingearbeitet sind. Beide beginnen mit der Regel, dass eine lernende Person ihre eigene Kopie angreift und sonst nichts. In der ersten führen sie SQL-Injection auf der Stufe „low“ durch, lesen den Code, der sie ermöglicht, und sehen dieselbe Übung auf der Stufe „impossible“ abgelehnt. In der zweiten gehen sie mit Cross-Site-Scripting genauso vor.

Ein kostenloses persönliches Konto erhält sie im Modul „Basics“, das auf der Startseite liegt. Jede Einrichtung kann sie aus dem Ordner „Basics“ der Bibliothek kopieren, und eine neue Einrichtung startet mit ihnen in einem Modul namens Lab Basics (Sample). Sie sind bewusst klein: Sie zeigen Lehrkräften, was eine in ein Lab eingearbeitete Lektion ist, und das Lab erledigt den Rest. Kopieren Sie eine in ein eigenes Modul, um sie zu ändern.

Als Aufgabe stellen

Schreiben Sie in die Aufgabe, welche Übungen zu lösen sind und was abzugeben ist.

  1. Das Lab anlegen. Fügen Sie in Ihrem Modul eine Aufgabe hinzu, wählen Sie die Karte „Container-Lab“ und dann „In einem GitHub-Repository“. Geben Sie https://github.com/mitsurutech/lab-dvwa mit dem Branch main an. Die Compose-Datei ist standardmäßig compose.yaml. Erstellen Sie zuerst einen Fork des Repositorys, wenn Sie es ändern möchten.
  2. Veröffentlichen und ausprobieren. „Veröffentlichen“ legt den Commit fest, den Ihnen die Seite angezeigt hat. Eine spätere Änderung im Repository verändert also kein Lab, das Sie bereits zugewiesen haben. Starten Sie zuerst Ihre eigene Kopie.
  3. Zuweisen. Weisen Sie es wie jede Aufgabe zu, auf Wunsch mit Fälligkeitsdatum, und schreiben Sie in die Aufgabe, was zu tun ist und was abgegeben werden soll.
  4. Abgaben bewerten. Öffnen Sie die Kopie einer lernenden Person und die abgegebene Arbeit, bewerten Sie sie und geben Sie sie mit einer Begründung zur Überarbeitung zurück, wenn mehr nötig ist.

Häufige Fragen

Warum startet das Lab auf der Stufe „low“?
Damit ein erster Versuch gelingt. Die Stufe anzuheben und die Übung zu wiederholen, ist die Lektion: Sie zeigt, was jede Schutzmaßnahme ändert.
Wie lauten die Anmeldedaten?
admin und password, in jeder Kopie gleich. Eine Kopie ist privat für die lernende Person, die sie gestartet hat, und von außen nicht erreichbar.
Was sollen die Lernenden für DVWA abgeben?
Einen Screenshot jeder Übung, gelöst auf „low“ und noch einmal auf „high“, mit sichtbarer Adresse des Labs, und zu jeder Übung eine schriftliche Erklärung zur Schwachstelle, zur verwendeten Eingabe, warum sie funktioniert hat und wie sich der Code auf „high“ unterscheidet. Für anspruchsvollere Arbeiten verlangen Sie neben dem Angriff auch den korrigierten Code.