
كاشف CVE-2026-87902. فئة LFI في get_page_template الخاص بـ WordPress. للكشف فقط. مختبر مصرّح به.
كاشف CVE-2026-87902 في نواة WordPress.
يمكن توجيه get_page_template() بحيث يتضمن حل قالب الصفحة ملف .php محلي قابل للقراءة خارج القالب النشط. يقوم WPSniper ببصمة الموقع، ويختار page_id منشورًا، ويجس فئة التضمين، ولا يطبع VULN إلا عندما تكون لافتة PEAR قوية فريدة من نوعها لجسم المجس.
كشف فقط. لا webshell. لا pearcmd config-create. لا تنفيذ أوامر نظام التشغيل.
python3 WPSniper.py -u https://lab.wordpress.local --shell
خط الأنابيب:
subfinder -d lab.example -silent | httpx -silent | python3 WPSniper.py -t 8
نطاق مكتوب. مختبر خاص. هذا هو الترخيص الكامل لتشغيله.
يبني WordPress اسم قالب الصفحة من متغير الاستعلام pagename المشتق من URL والمفكوك ترميزه:
page-{$pagename}.php
ثم يقوم locate_template() بتضمين ذلك الملف. في الإصدارات المتأثرة، لا يُفرض على المسار المحلول البقاء داخل دليل قالب مسموح به. ينجو اجتياز المسار المزدوج الترميز في pagename من sanitize_title بما يكفي ليقوم get_page_template() بفك ترميزه مرة واحدة والخروج من شجرة القالب.
توجد شرطان مسبقان أمام تضمين مغلق:
page- (يوثق WordPress page-templates/ — Twenty Twelve، Twenty Fourteen، Neve، Hestia، Sydney وغيرها)..php قابل للقراءة لحساب خادم الويب. يستخدم الكاشف لافتات PEAR CLI الجاهزة كأداة تضمين. وهو لا يكتب واحدة.RCE هو متابعة محتملة عندما تصطف تلك الشروط بالإضافة إلى أداة قابلة للكتابة/التنفيذ. تلك المتابعة ليست في هذا المستودع.
فضل الاكتشاف في CVE: Robert (ressl) عبر WordPress HackerOne. الاستشارة: GHSA-7hp8-65ch-5whp.
جدول الإصدارات مدمج. 4.7.0–7.1.1 هي النافذة المتأثرة. نقاط الترقيع: 7.1.2، 7.0.6، 6.9.9، 6.8.10 … وصولاً إلى 4.7.37.
صفحة تسويقية تقول "pearcmd" في منشور مدونة ليست إصابة.
VULN فقط عندما يكون كل هذا صحيحًا:
?page_id=PEAR Version:، Usage: pear، PEAR_Config، Commands for pear، config-create، DEPRECATED: PEAR commands، pear.php)pearcmd / PEAR وحده، خاصة إذا كان موجودًا بالفعل في HTML خط الأساسINFO = إصدار متأثر و/أو دليل page-templates، التضمين غير مغلق. لا تقدم تقريرًا حرجًا على INFO.
SAFE = فرع مرقع، أو تضمين مطابق لخط الأساس.
SKIP = ليس WordPress، URL سيئ.
/etc/passwd هو الأداة الخاطئة لهذا CVE. يضيف locate_template() اللاحقة .php. أمر passwd التفاعلي موجود لترى ذلك بنفسك. ظهور مقطع root:x:0:0: غير معتاد ويجب التحقق منه يدويًا.
python3 -m pip install -r requirements.txt
python3 WPSniper.py -u https://lab.wordpress.local
يتطلب requests.
يُتجاهل --shell في خط الأنابيب. هذا مقصود.
python3 WPSniper.py -u https://lab.wordpress.local --shell
[email protected] ▶
1 fp version / theme / patched?
2 pages REST published pages
3 theme page-templates directory
4 probe PEAR include + baseline diff (no write)
5 diff same, print Δ + tokens
6 passwd try …/etc/passwd (this class includes *.php)
7 include P include a .php path without suffix
8 save last body → /tmp/wpsniper-probe.html
9 help
0 exit
يطبع كل مجس URL الكامل وcurl جاهزًا للنسخ واللصق. استخدم ذلك في التقرير. لا تخترع طلبًا ثانيًا.
7 include مخصص لملف مختبر مصرح به قمت بوضعه بالفعل. اسم المثال في نص المساعدة هو علامة شاهد، وليس أداة إسقاط.
WPSniper v1.3 CVE-2026-87902 get_page_template LFI
[radar] target https://lab.wordpress.local
[radar] generator=6.8.3 theme=twentytwelve status=affected
[radar] page_id=2
[radar] theme dir /wp-content/themes/twentytwelve/page-templates/ → 403
VULN lab.wordpress.local unique=['PEAR Version:','Usage: pear'] Δlen=+18420
patched 7.1.2 · 7.0.6 · 6.8.10 · backports to 4.7.37
المضيف في هذه الصفحة هو تسمية مختبرية. أسماء مضيفي العملاء المباشرين لا مكان لها في لقطة عامة.
قم بالترقية إلى 7.1.2 أو النسخة المدعومة لفرعك:
7.0.6 · 6.9.9 · 6.8.10 · 6.7.9 · 6.6.9 · 6.5.12 · 6.4.12 · 6.3.12 · 6.2.13 · 6.1.14 · 6.0.16 · 5.9.18 … وصولاً إلى 4.7.37.
يتطلب 7.1.2 أيضًا أن يبقى مسار القالب المحلول داخل دليل قالب مسموح به. هذا هو الإصلاح الفعلي، وليس قاعدة WAF.
pearcmd config-create، لا غلاف system()/etc/passwd خام كتأكيد أساسيإذا كنت بحاجة إلى اكتشاف: أرفق curl الذي طبعه WPSniper بالفعل، والرموز القوية الفريدة، وعدم تطابق ملخص خط الأساس.
اختبار أمني مصرح به فقط. تشغيل هذا ضد مضيف لا تملكه أو ليس لديك إذن كتابي به هو مشكلتك، وليس مشكلة الأداة.
mitsec · Yunus Emre Öztaş
| الخطوة | الإجراء | الإشارة |
|---|
| 1 | الصفحة الرئيسية + generator + /feed/ | WordPress؟ الإصدار؟ slug القالب؟ |
| 2 | REST /wp-json/wp/v2/pages أو page_id= في HTML | صفحة منشورة حتى يعمل مسار القالب فعليًا |
| 3 | GET /wp-content/themes/{slug}/page-templates/ | 200 / 401 / 403 = الدليل موجود |
| 4 | خط الأساس ?page_id=N مقابل مجس pagename= | ملخص الجسم + رموز PEAR القوية الفريدة |
| العلم | المعنى |
|---|
-u URL | هدف واحد |
-l file | قائمة URL |
| stdin | subfinder | httpx | WPSniper |
-t N | خيوط على قائمة (افتراضي 6) |
-q | صفوف هادئة + ملخص |
--shell | مجس تفاعلي على -u واحد |
--timeout | ثوانٍ (افتراضي 14) |