LFI2RCE Via temp file uploads
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Überprüfe die vollständigen Details dieser Technik unter https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf
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:
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.