
PoC für Responsive Filemanager < 9.12.0: Umgehung der Upload-Beschränkungen führt zu RCE
PoC für Responsive Filemanager < 9.12.0: Umgehung der Upload-Beschränkungen führt zu RCE
Beim Hochladen einer neuen Datei durchlaufen wir die Funktion fix_filename: https://github.com/trippo/ResponsiveFilemanager/blob/9a7411f3eab3b7d8e2c78dcf40b4325bde2c548d/filemanager/upload.php#L112
In dieser Funktion gibt es die Funktion strip_tags, die Winkelklammern sucht und entfernt: https://github.com/trippo/ResponsiveFilemanager/blob/9a7411f3eab3b7d8e2c78dcf40b4325bde2c548d/filemanager/include/utils.php#L581
Wir können also eine Datei mit einem Dateinamen wie shell.php<.txt senden, die durch die Funktion strip_tags in shell.php umbenannt wird.
Aber es gibt eine zusätzliche Prüfung des Dateityps anhand seines Inhalts: https://github.com/trippo/ResponsiveFilemanager/blob/9a7411f3eab3b7d8e2c78dcf40b4325bde2c548d/filemanager/upload.php#L101
Wir können also keine klassische PHP-Shell <?php system($_GET['c']);?> hochladen. Aber wir können einen kleinen Trick anwenden: Die Funktion get_extension_from_mime arbeitet anhand der ersten Zeichen der Datei. Wenn wir unseren Payload also mit mehreren 'a'-Zeichen beginnen, kann er als Typ txt erkannt werden.
shell.php<.txt

