LFI2RCE Via temp file uploads

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

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

PHP-Datei-Uploads

Wenn ein PHP-Engine eine POST-Anfrage mit Dateien erhält, die gemäß RFC 1867 formatiert sind, generiert es temporäre Dateien, um die hochgeladenen Daten zu speichern. Diese Dateien sind entscheidend für die Verarbeitung von Datei-Uploads in PHP-Skripten. Die Funktion move_uploaded_file muss verwendet werden, um diese temporären Dateien an einen gewünschten Speicherort 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 den Speicherort der temporären Dateien kennen, könnten eine Schwachstelle für lokale Dateieinschlüsse (Local File Inclusion, LFI) ausnutzen, um Code auszuführen, indem sie während des Uploads auf die Datei zugreifen.

Die Herausforderung für unbefugten Zugriff besteht darin, den Namen der temporären Datei vorherzusagen, der absichtlich zufällig generiert wird.

Ausnutzung auf Windows-Systemen

Unter Windows generiert PHP temporäre Dateinamen mithilfe der Funktion GetTempFileName, was zu einem Muster wie <Pfad>\<Präfix><uuuu>.TMP führt. Beachten Sie insbesondere:

  • Der Standardpfad ist in der Regel C:\Windows\Temp.

  • Das Präfix ist normalerweise "php".

  • Das <uuuu> repräsentiert einen eindeutigen hexadezimalen Wert. Entscheidend ist, dass aufgrund der Einschränkung der Funktion nur die unteren 16 Bits verwendet werden, was maximal 65.535 eindeutige Namen mit konstantem Pfad und Präfix ermöglicht und Brute-Force-Angriffe möglich macht.

Darüber hinaus ist der Ausbeutungsprozess auf Windows-Systemen vereinfacht. Eine Besonderheit in der Funktion FindFirstFile ermöglicht die Verwendung von Platzhaltern in Pfaden für lokale Dateieinschlüsse (Local File Inclusion, LFI). Dadurch kann ein Include-Pfad wie der folgende erstellt werden, um die temporäre Datei zu lokalisieren:

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, sodass die Namen weder vorhersehbar noch anfällig für Brute-Force-Angriffe sind. Weitere Details finden Sie in der referenzierten Dokumentation.

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated