LFI2RCE Via temp file uploads

Unterstütze HackTricks

Überprüfe die vollständigen Details dieser Technik unter https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf

PHP Datei-Uploads

Wenn eine PHP-Engine eine POST-Anfrage mit Dateien im Format gemäß RFC 1867 erhält, generiert sie temporäre Dateien, um die hochgeladenen Daten zu speichern. Diese Dateien sind entscheidend für die Handhabung von Datei-Uploads in PHP-Skripten. Die Funktion move_uploaded_file muss verwendet werden, um diese temporären Dateien an einen gewünschten Ort zu verschieben, wenn eine dauerhafte Speicherung über die Ausführung des Skripts hinaus erforderlich ist. Nach der Ausführung löscht PHP automatisch alle verbleibenden temporären Dateien.

Sicherheitswarnung: Angreifer, die sich der Position der temporären Dateien bewusst sind, könnten eine Local File Inclusion-Schwachstelle ausnutzen, um Code auszuführen, indem sie auf die Datei während des Uploads zugreifen.

Die Herausforderung für unbefugten Zugriff besteht darin, den Namen der temporären Datei vorherzusagen, der absichtlich randomisiert ist.

Ausnutzung auf Windows-Systemen

Auf Windows generiert PHP temporäre Dateinamen mit der Funktion GetTempFileName, was zu einem Muster wie <path>\<pre><uuuu>.TMP führt. Bemerkenswert:

  • Der Standardpfad ist typischerweise C:\Windows\Temp.

  • Das Präfix ist normalerweise "php".

  • Das <uuuu> steht für einen einzigartigen hexadezimalen Wert. Entscheidend ist, dass aufgrund der Einschränkung der Funktion nur die unteren 16 Bits verwendet werden, was maximal 65.535 einzigartige Namen mit konstantem Pfad und Präfix ermöglicht, wodurch Brute-Force-Angriffe machbar sind.

Darüber hinaus ist der Ausnutzungsprozess auf Windows-Systemen vereinfacht. Eine Besonderheit in der Funktion FindFirstFile erlaubt die Verwendung von Platzhaltern in Local File Inclusion (LFI)-Pfaden. Dies ermöglicht das Erstellen eines Include-Pfades wie folgt, um die temporäre Datei zu finden:

http://site/vuln.php?inc=c:\windows\temp\php<<

In bestimmten Situationen kann eine spezifischere Maske (wie php1<< oder phpA<<) erforderlich sein. Man kann systematisch diese Masken ausprobieren, um die hochgeladene temporäre Datei zu entdecken.

Ausnutzung auf GNU/Linux-Systemen

Für GNU/Linux-Systeme ist die Zufälligkeit bei der Benennung temporärer Dateien robust, wodurch die Namen weder vorhersehbar noch anfällig für Brute-Force-Angriffe sind. Weitere Details sind in der referenzierten Dokumentation zu finden.

Last updated