
PoC для Responsive Filemanager < 9.12.0 — обход ограничений загрузки приводит к RCE
PoC для Responsive Filemanager < 9.12.0: обход ограничений загрузки приводит к RCE
При загрузке нового файла мы проходим через функцию fix_filename: https://github.com/trippo/ResponsiveFilemanager/blob/9a7411f3eab3b7d8e2c78dcf40b4325bde2c548d/filemanager/upload.php#L112
В этой функции есть функция strip_tags, которая ищет угловые скобки и удаляет их: https://github.com/trippo/ResponsiveFilemanager/blob/9a7411f3eab3b7d8e2c78dcf40b4325bde2c548d/filemanager/include/utils.php#L581
Итак, мы можем отправить файл с именем вроде shell.php<.txt, который будет переименован в shell.php благодаря функции strip_tags.
Но есть дополнительная проверка типа файла по его содержимому: https://github.com/trippo/ResponsiveFilemanager/blob/9a7411f3eab3b7d8e2c78dcf40b4325bde2c548d/filemanager/upload.php#L101
Итак, мы не можем загрузить классический PHP-шелл <?php system($_GET['c']);?>. Но мы можем применить небольшую хитрость: функция get_extension_from_mime работает на основе первых нескольких символов файла. Поэтому, если мы начнём нашу полезную нагрузку с нескольких символов 'a', она может быть определена как тип txt.
shell.php<.txt

