
PoC لـ Responsive Filemanager < 9.12.0 لتجاوز قيود الرفع يؤدي إلى RCE
إثبات المفهوم لـ 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

url/source/shell.php?c=<أمرك>
