Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Die klassischen Arten von Web-Schwachstellen erkennen

Nach dieser Lektion: Ich kann eine verwundbare Seite der Fehlerklasse zuordnen, die sie zeigt.

Lektion, 55 Min.3 BefehleMutillidae-Lab: SQL-Injection und XSS an einer verwundbaren PHP-Webanwendung üben

Zwölf Befunde, sechs Namen

Eine Firma prüft die Website eines Kunden und schreibt zwölf Befunde auf. Sie wirken unverbunden: eine Fehlerseite, ein seltsamer Link, ein Dateiname in einer Adresse.

Eine gute Prüferin liest die Liste und sieht sechs Familien. Jede Familie hat eine Ursache und eine Lösung. Diese Lektion lehrt Sie, Befunde in Familien einzuordnen.

Die eine Regel

Warnung

Dieses Lab ist eine Website, die absichtlich unsicher ist. Greifen Sie nur Ihre eigene, private Kopie an und nichts sonst. Sie hat keine Verbindung ins Internet. Dieselben Versuche bei einem fremden System sind eine Straftat. Das gilt auch dann, wenn Sie nichts beschädigen wollen.

Am Ende dieser Lektion

Notiz

Ich kann eine verwundbare Seite der Fehlerklasse zuordnen, die sie zeigt.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Fehlerklasseeine Familie von Schwächen mit gemeinsamer Ursache
Injectiongetippter Text, der als Teil eines Befehls oder einer Abfrage gelesen wird
Path Traversalein Dateiname, der aus dem vorgesehenen Ordner herausklettert../
Offene Weiterleitungein Link, der Besucher an jede Adresse schickt, die man ihm gibt
Eingabealles, was ein Besucher an eine Seite tippt oder sendet
Senkedie Stelle im Programm, an der ein Wert zuletzt verwendet wird; auf Englisch Sink

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Folgen Sie der Eingabe bis zur Senke

Die meisten Fehler folgen einem Muster. Ein Wert kommt von einem Besucher. Er wandert durch das Programm. Er erreicht eine Senke, wo er verwendet wird.

Die Klasse des Fehlers hängt von der Senke ab. Stellen Sie jeder Seite eine Frage: Wo landet das, was ich tippe?

Beispiel: Senke und Klasse

Wo der Wert landetFehlerklasseDie Lösung in einer Zeile
In einer DatenbankabfrageSQL-InjectionAls Parameter senden
In der Seite, die der Browser zeichnetCross-Site-ScriptingBei der Ausgabe maskieren
In einem Dateinamen, den der Server öffnetPath TraversalNur Namen aus einer Liste erlauben
In einem Befehl, den der Server ausführtBefehls-InjectionNie Befehle aus Text bauen
In einer Adresse, zu der der Besucher geschickt wirdOffene WeiterleitungNur eigene Adressen erlauben
Als Kennung ohne Prüfung des BesitzersFehlende ZugriffskontrolleJedes Mal den Besitzer prüfen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Jede Klasse hinterlässt ein Zeichen in der Anfrage

Oft erkennen Sie die Klasse an einer einzigen Anfrage. Ein Dateiname mit ../ deutet auf Path Traversal. Ein Tag in einem Wert deutet auf XSS. Ein weiter=-Wert mit vollständiger Adresse deutet auf eine offene Weiterleitung.

Zum Einordnen müssen Sie nichts ausführen. Sie lesen die Anfrage und fragen, wofür der Wert gedacht ist.

Beispiel: fünf erfundene Anfragen

AnfrageKlasse
/ansicht?datei=../../etc/hostsPath Traversal
/gruss?name=<i>Bo</i>Cross-Site-Scripting
/weiter?ziel=http://andere.exampleOffene Weiterleitung
/suche?id=5 UNION SELECT 1SQL-Injection
/werkzeug?host=a.example; cat notizenBefehls-Injection

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Die Website in Ihrem Lab

Ihr Lab betreibt Mutillidae, eine Website mit absichtlich vielen Fehlern. Starten Sie sie und führen Sie diese drei Befehle der Reihe nach aus. Der erste meldet mit dem eigenen Konto des Labs an und legt die Anmeldung in einer Datei ab. Der zweite schlägt genau dieses Konto über Namen und Passwort nach. Der dritte fragt nach einem Namen, den die Seite nicht kennt. Alles drei ist normale Benutzung.

Mit dem Konto des Labs anmelden

Befehl
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.

Ein Konto nachschlagen

Befehl
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.

Einen unbekannten Namen nachschlagen

Befehl
curl -s -b jar -c jar -G "http://www/index.php" --data-urlencode "page=user-info.php" --data-urlencode "username=niemand" --data-urlencode "password=nichts" --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.

Was die drei Ausgaben sagen

Die erste gibt 302 und eine Adresse aus, die auf AU1 endet: Die Seite hat die Anmeldung angenommen. Die zweite gibt 1 records found aus, die dritte 0 records found.

Die Seite zählt also die Zeilen, die ihre Abfrage liefert. Damit ist sie eine Senke: Der Name, den Sie tippen, gelangt in eine Datenbankabfrage. Auf welche Klasse würden Sie sie testen? Prüfen Sie Ihre Antwort an der Tabelle oben.

Ein häufiger Fehler

Warnung

Viele glauben, eine Liste verbotener Wörter könne jede Klasse stoppen. Das stimmt nicht. Jede Klasse hat eine andere Senke und braucht die passende Lösung an ihrer eigenen Senke. Ein Filter für Script-Tags hilft bei einem Dateinamen nicht. Sichern Sie jede Senke so, wie ihre Klasse es verlangt.

Unter den meisten Klassen liegt eine Ursache

Injection, XSS, Traversal und die übrigen teilen eine Ursache. Ein Programm mischt Daten mit Anweisungen, und die nächste Schicht kann sie nicht unterscheiden.

Die Abhilfe ist jedes Mal derselbe Gedanke. Halten Sie Daten in ihrer eigenen Spur: Parameter, Maskieren, Listen erlaubter Werte. Mutillidae hat die Sicherheitsstufen 0, 1 und 5, damit Sie dieselbe Seite mit und ohne Abhilfe sehen.

Weiterführend: ein getarntes Traversal

Ein Angreifer kann jeden Punkt als %2e schreiben, aus ../ wird dann %2e%2e/. Die Regeln der Aufgabe übersehen /ansicht?datei=%2e%2e/geheim und nennen es normal.

Wenn Ihre Aufgabe besteht, kopieren Sie klassifiziere in einen eigenen Codeblock. Fügen Sie die eine Ersetzung hinzu, die es erkennt. Erklären Sie dann, warum ein echter Server die ganze Adresse einmal dekodiert, vor jeder Prüfung.

Über dieses Lab und seinen Quellcode: Mutillidae-Lab: SQL-Injection und XSS an einer verwundbaren PHP-Webanwendung üben

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.