
نصوص برمجية لإثبات المفهوم ومختبر Docker لإعادة إنتاج CVE-2023-41892، وهي ثغرة تنفيذ تعليمات برمجية عن بُعد دون مصادقة في Craft CMS. تتضمن استغلال تسميم السجلات وكتابة ملفات Imagick MSL.
يحتوي هذا المستودع على نصوص برمجية لإثبات المفهوم ومختبر محلي قائم على Vulhub لإعادة إنتاج CVE-2023-41892، وهي ثغرة تنفيذ تعليمات برمجية عن بُعد بدون مصادقة مسبقة في Craft CMS.
استخدم هذا المشروع فقط في مختبر محلي مصرح به أو في أنظمة أخرى لديك إذن صريح لاختبارها.
CVE-2323-41892_PoC/
+-- README.md
+-- LFI_to_RCE.py
+-- Imagick_PoC.py
+-- Vulnhub_env/
+-- docker-compose.yml
+-- README.md
+-- README.zh-cn.md
+-- 1.png ... 5.png
| المسار | الغرض |
|---|
LFI_to_RCE.py | إثبات مفهوم لتسميم السجلات متبوعًا بتضمين ملفات محلي عبر أداة Psy\Configuration. |
Imagick_PoC.py | إثبات مفهوم لكتابة ملفات عشوائية عبر أداة Imagick MSL. |
Vulnhub_env/docker-compose.yml | مختبر Docker Compose يشغّل Craft CMS 4.4.14 المعرّضة للثغرة وMySQL 5.7. |
Vulnhub_env/README.md | ملاحظات إعادة إنتاج أصلية بأسلوب Vulhub مع أمثلة على الطلبات ولقطات شاشة. |
Vulnhub_env/README.zh-cn.md | النسخة الصينية من ملاحظات إعادة إنتاج Vulhub. |
Vulnhub_env/*.png | لقطات شاشة مستخدمة في توثيق بيئة Vulhub. |
تؤثر CVE-2023-41892 على إصدارات Craft CMS من 4.0.0-RC1 حتى 4.4.14. تم إصلاح المشكلة في Craft CMS 4.4.15.
نقطة النهاية المعرّضة للثغرة التي يستخدمها كلا النصين البرمجيين هي:
/index.php?action=conditions/render
تستهدف نصوص إثبات المفهوم عنوان المختبر المحلي الافتراضي:
http://localhost:8088
إذا كان مختبرك يعمل على مضيف أو منفذ آخر، فحدّث قيمة URL بالتقرب من أعلى LFI_to_RCE.py وImagick_PoC.py.
requestsثبّت تبعية Python:
pip install requests
شغّل بيئة Craft CMS المعرّضة للثغرة:
cd Vulnhub_env
docker compose up -d
افتح مثبّت Craft CMS:
http://localhost:8088/admin/install
استخدم إعدادات قاعدة البيانات الافتراضية التالية أثناء التثبيت:
| الإعداد | القيمة |
|---|---|
| مضيف قاعدة البيانات | db |
| اسم قاعدة البيانات | craftcms |
| مستخدم قاعدة البيانات | root |
| كلمة مرور قاعدة البيانات | root |
بعد التثبيت، تأكد من إمكانية الوصول إلى الموقع على:
http://localhost:8088
شغّل الأوامر من جذر المستودع:
cd CVE-2323-41892_PoC
شغّل:
python LFI_to_RCE.py
ماذا يفعل:
يرسل JSON غير صالح يحتوي على كود PHP إلى سجل Craft CMS.
ينشئ مسار ملف السجل باستخدام التاريخ المحلي الحالي:
../storage/logs/web-YYYY-MM-DD.log
يستخدم craft\elements\conditions\users\UserCondition مع \Psy\Configuration لتضمين ملف السجل المسموم.
يتحقق مما إذا كان ناتج phpinfo() يظهر في الاستجابة.
الناتج المتوقع عند النجاح:
[*] Starting Log Poisoning...
[+] Payload sent successfully!
[*] Starting LFI to RCE...
[+] phpinfo() executed successfully!
شغّل:
python Imagick_PoC.py
ماذا يفعل:
Imagick.webshell.php في جذر الويب.http://localhost:8088/webshell.php ويتحقق من وجود phpinfo().الناتج المتوقع عند النجاح:
[*] Sending multipart/form-data payload to trigger Imagick gadget...
[+] Success: phpinfo() output found.
قد يؤدي مسار Imagick إلى تعطّل عامل PHP بعد تشغيل الحمولة. في مختبر Vulhub، قد يكون هذا أمرًا طبيعيًا إذا تمت كتابة webshell.php قبل حدوث التعطّل.
يحدد كلا النصين البرمجيين عنوان الهدف في أعلى الملف:
URL = "http://localhost:8088"
غيّر هذه القيمة إذا كان المختبر المعرّض للثغرة متاحًا على عنوان آخر.
يتحقق Imagick_PoC.py من الملف المُنشأ في:
OUTPUT_FILE = "/webshell.php"
تأكد من أن الحاويات تعمل:
cd Vulnhub_env
docker compose ps
تأكد من إمكانية الوصول إلى الموقع على http://localhost:8088.
تحقق مما إذا كانت خدمة أخرى تستخدم المنفذ 8088 بالفعل.
حدّث قيمة URL في نصوص Python البرمجية إذا غيّرت المنفذ المعرّض.
LFI_to_RCE.py لا يُظهر PHP Versionstorage/logs/.web-YYYY-MM-DD.log المُنشأ في LFI_to_RCE.py.Imagick_PoC.py خطأ 404 لـ /webshell.php/tmp/php*.أوقف المختبر:
cd Vulnhub_env
docker compose down
أزل الحاويات وحجم قاعدة البيانات إذا كنت تريد إعادة تثبيت نظيفة:
docker compose down -v
قم بترقية Craft CMS إلى الإصدار 4.4.15 أو أحدث.
إذا كان هناك اشتباه في حدوث استغلال، فقم بتدوير مفتاح أمان Craft CMS وبيانات اعتماد قاعدة البيانات وأسرار التطبيق وأي بيانات اعتماد مخزنة في البيئة.