Mutillidae-Lab: SQL-Injection und XSS an einer verwundbaren PHP-Webanwendung üben
OWASP Mutillidae II ist eine PHP-Website, die mit Absicht unsicher ist und in die die OWASP Top 10 und mehr eingebaut sind: SQL-Injection, Cross-Site-Scripting, Command-Injection, LDAP-Injection und viele andere, mit Hinweisen auf jeder Seite. Dieses Lab startet sie samt Datenbank und LDAP-Verzeichnis in der eigenen privaten Kopie jeder lernenden Person.
Jedes Ziel liegt in der eigenen Lab-Kopie der lernenden Person, die keine Verbindung zum Internet und keine zu anderen Lernenden hat. Das Einzige, was eine lernende Person angreifen kann, ist also die Anwendung, die das Lab für sie gestartet hat. Die Regel steht oben im Lab: Greifen Sie Ihre eigene Kopie an, nie eine Website, die Ihnen nicht gehört.
Was Lernende hier lernen
Die OWASP Top 10 in einer realistischen Website, mit vielen Schwachstellen zur Auswahl. Die Website hat eine Sicherheitsstufe, 0, 1 und 5, die sich über ihr Menü durchschalten lässt, sodass dieselbe Übung erneut gemacht werden kann, um zu sehen, was die Absicherung ändert: Ein in die Benutzersuche eingeschleuster Name findet auf Stufe 0 jedes Konto und auf Stufe 5 keines. Das Lab eignet sich für eine Einführung in Websicherheit oder sicheres Programmieren: Eingabevalidierung, Ausgabekodierung, parametrisierte Abfragen, Authentifizierung und Sitzungen.
Im Browser ausführen
Das Lab legt die Datenbank für die lernende Person an, es ist also nichts einzurichten, und es meldet erst dann, dass es läuft, wenn die Website funktioniert.
- Container-Seite öffnen. Wählen Sie in der Leiste „Entwickeln“ und dann „Einen Container ausführen“. Die Seite kann jeder öffnen, und das Git-Lab und das SQL-Lab starten ohne Konto. Jedes andere Lab braucht ein kostenloses Konto: Erstellen Sie eines, melden Sie sich an und wählen Sie dann „Starten“.
- Lab finden. Die Karte „Beispiel-Labs“ listet alle Beispiele auf. Suchen Sie OWASP Mutillidae II.
- „Starten“ wählen. „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.
- Öffnen. Wählen Sie auf der Seite des Labs „Öffnen“. Oben auf jeder Seite steht die Sicherheitsstufe, die bei 0 beginnt. Melden Sie sich für die Seiten, die ein Konto verlangen, als admin mit dem Passwort adminpass an. Toggle Hints und Toggle Security stehen im Menü. Das Stoppen und erneute Starten des Labs liefert eine frische Website, genau wie Reset DB.
Was Lernende abgeben sollten
Einen Screenshot jeder gelösten Übung, auf dem die eigene Adresse des Labs sichtbar ist, und zu jeder eine schriftliche Erklärung in eigenen Worten, was die Schwachstelle ist, welche Eingabe verwendet wurde, warum sie funktioniert hat und wie der Code hätte geschrieben werden sollen. Für anspruchsvollere Arbeiten verlangen Sie dieselbe Übung auch auf Stufe 5 und eine Erklärung, was der Code dort anders macht.
Eine Grundlagenlektion zu diesem Lab
Mutillidae Basics ist eine kleine Lektion, die in diesem Lab durchgearbeitet wird und mit der Regel beginnt, dass eine lernende Person ihre eigene Kopie angreift und sonst nichts. Vom Terminal aus meldet sie sich mit curl an, sucht ein Konto nach dem Namen, ändert den Namen so, dass die Suche jedes Konto findet, und erhöht dann die Sicherheitsstufe und sieht, dass dieselbe Eingabe nichts mehr findet.
Ein kostenloses persönliches Konto erhält sie im Modul „Basics“ auf der Startseite, jede Einrichtung kann sie aus dem Ordner „Basics“ der Bibliothek kopieren, und eine neue Einrichtung startet mit ihr in einem Modul namens Lab Basics (Sample). Sie ist bewusst klein: Sie zeigt einer Lehrkraft, was eine in einem Lab durchgearbeitete Lektion ist, und das Lab erledigt den Rest. Kopieren Sie sie in ein eigenes Modul, um sie zu ändern.
Der Code auf GitHub
Die Compose-Datei führt die drei eigenen öffentlichen Images des Mutillidae-Projekts aus, je eines für die Website, ihre MariaDB-Datenbank und ihr LDAP-Verzeichnis, jedes durch Version und Digest festgelegt und unverändert ausgeführt. Mutillidae steht unter der GPL-3.0 und gehört seinen Autorinnen und Autoren; wir verteilen es nicht. Das Lab hat keinen Weg ins Internet, sodass alles, was eine Seite von einer anderen Website abruft, nichts erreicht.
Als Arbeit stellen
Beschreiben Sie in der Aufgabe, welche Übungen zu bearbeiten sind und was abzugeben ist.
- Lab erstellen. Fügen Sie in Ihrem Modul eine Aufgabe hinzu und wählen Sie die Karte „Container-Lab“, dann „In einem GitHub-Repository“. Geben Sie https://github.com/mitsurutech/lab-mutillidae mit dem Branch main an. Die Compose-Datei ist standardmäßig compose.yaml. Forken Sie das Repository zuerst, wenn Sie sie ändern möchten.
- Veröffentlichen und ausprobieren. „Veröffentlichen“ legt den Commit fest, der Ihnen gezeigt wurde, sodass eine spätere Änderung im Repository ein bereits gestelltes Lab nicht verändert. Starten Sie zuerst Ihre eigene Kopie.
- Zuweisen. Weisen Sie es wie jede Aufgabe zu, auf Wunsch mit einem Fälligkeitsdatum, und beschreiben Sie in der Aufgabe, was zu tun ist und was abgegeben werden soll.
- Abgaben bewerten. Öffnen Sie die Kopie einer lernenden Person und ihre Abgabe, bewerten Sie sie und geben Sie sie mit einer Begründung zur Überarbeitung zurück, wenn mehr nötig ist.
Häufige Fragen
- Wie lauten die Zugangsdaten?
- admin mit dem Passwort adminpass, in jeder Kopie gleich, und jeder kann auf der Seite Login/Register ein weiteres Konto anlegen. Eine Kopie ist für die lernende Person privat, die sie gestartet hat, und von außen nicht erreichbar.
- Warum ist die Website nach einem Neustart wieder im Ausgangszustand?
- Die Datenbank wird bei jedem Start des Labs neu angelegt und nicht gespeichert. Eine durch eine Übung kaputt gemachte Website wird also behoben, indem das Lab gestoppt und wieder gestartet wird oder indem im Menü Reset DB gewählt wird.
- Warum braucht es so viel Arbeitsspeicher?
- Das Lab besteht aus drei Programmen, der Website, ihrer Datenbank und ihrem Verzeichnisdienst, begrenzt auf 512, 384 und 256 Megabyte. Alle drei zusammen brauchen im Leerlauf etwa 210 Megabyte, deutlich unter dem Kontingent einer Kopie.