Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-79387-PbootCMS-SQL-Injection — إثبات المفهوم لـ CVE-2026-79387، حقن SQL مُصادق عليه في إدارة مستخدمي PbootCMS يسمح بتحديثات حقول عشوائية والاستيلاء على الحسابات. | Kitploit
أدوات/GitHubGitHub/jhli07/cve-2026-79387-pbootcms-sql-injection
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويباختبار الاختراق
GitHubjhli07/cve-2026-79387-pbootcms-sql-injection

CVE-2026-79387-PbootCMS-SQL-Injection

إثبات المفهوم لـ CVE-2026-79387، حقن SQL مُصادق عليه في إدارة مستخدمي PbootCMS يسمح بتحديثات حقول عشوائية والاستيلاء على الحسابات.

عرض المستودع
47منذ شهر واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة

CVE-2026-79387: حقن SQL في وحدة إدارة المستخدمين في PbootCMS V3.2.5

نظرة عامة

الحقلالتفاصيل
معرّف CVECVE-2026-79387
المنتجPbootCMS
الإصدارات المتأثرة3.2.0 – 3.2.5، وربما الإصدارات الأقدم
نوع الثغرةحقن SQL (CWE-89)
ناقل الهجومعن بُعد (بعد المصادقة)
خطورة CVSSعالية
المكتشفJiahaoLi
المورّدhttps://www.pbootcms.com/

وصف الثغرة

توجد ثغرة حقن SQL في وحدة إدارة المستخدمين في PbootCMS V3.2.5. تكمن الثغرة في الدالة mod() في الملف /apps/admin/controller/system/UserController.php (السطر 149) وفي الدالة modUser() في الملف /apps/admin/model/system/UserModel.php.

المعامل field يتحكم فيه المستخدم بالكامل عبر طلب GET دون أي تحقق من قائمة بيضاء. والمعامل value أيضًا يتحكم فيه المستخدم بالكامل ويُدمج مباشرةً في عبارة UPDATE الخاصة بـ SQL. يمكن لمهاجم مُصادَق عليه تحديد أي عمود في قاعدة البيانات كقيمة لـ field (مثل password أو username أو status أو role)، مما يتيح التلاعب التعسفي بالبيانات.

السبب الجذري

// UserController.php - mod() method
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
    if ($this->model->modUser($ucode, "$field='$value',update_user='" . session('username') . "'")) {
        location(- 1);
    }
}

يتم أخذ $field و $value مباشرةً من المتغير الفائق $_GET ويتم دمجهما في سلسلة SQL دون أي تعقيم، ودون قائمة بيضاء، ودون استعلام مُعامَل. ثم تُمرَّر هذه السلسلة إلى UserModel::modUser()، التي تمررها بدورها إلى طريقة Model::update() الأساسية. وبما أن الوسيط عبارة عن سلسلة (وليس مصفوفة)، فإنه يتجاوز التحقق من اسم الحقل checkKey() ويُدمَج حرفيًا في جملة SET:

UPDATE ay_user SET <user-controlled>= '<user-controlled>', update_user='admin' WHERE ucode='<ucode>'

سلسلة الاستدعاء

GET /admin.php?p=/User/mod&ucode=10002&field=password&value=<MD5>
  → UserController::mod()
    → UserModel::modUser($ucode, "password='<value>',update_user='admin'")
      → Model::table('ay_user')->where("ucode='$ucode'")->update($data_string)
        → SQL: UPDATE ay_user SET password='<value>',update_user='admin' WHERE ucode='10002'

التأثير

يمكن للمهاجم المُصادَق عليه أن:

  1. يعدّل كلمة مرور أي مستخدم — بما في ذلك المسؤول الأعلى (باستثناء المؤسس المدمج ucode=10001).
  2. يغيّر حالة الحساب — تفعيل أو تعطيل حسابات عشوائية.
  3. يحقن SQL أعمق — تتيح المعلمة value الهروب بعلامة اقتباس مفردة، مما قد يمكّن من هجمات متكدسة أو قائمة على التكرار المنطقي (tautology).

يؤدي هذا إلى الاستيلاء على الحساب والسيطرة الكاملة على الواجهة الخلفية لنظام إدارة المحتوى (CMS).

خطوات إعادة الإنتاج

المتطلبات المسبقة

  • PbootCMS V3.2.5 مثبّت محليًا (تم اختباره على 192.168.1.104، Apache/PHP 7.2.1/SQLite)
  • حساب مسؤول صالح للواجهة الخلفية

الخطوة 1: تسجيل الدخول إلى لوحة الإدارة

ادخل إلى لوحة تحكم PbootCMS وسجّل الدخول باستخدام حساب admin الافتراضي.

Admin Dashboard

الخطوة 2: إنشاء مستخدم هدف

انتقل إلى System Management → User Management → Add User. أنشئ مستخدمًا جديدًا:

  • اسم المستخدم: admin2
  • كلمة المرور: admin
  • الدور: System Administrator

Create User

الخطوة 3: التحقق من وجود المستخدم

تؤكد قائمة المستخدمين وجود admin2 مع ucode=10002:

User List

الخطوة 4: تأكيد كلمة المرور الأولية

افتح نافذة متصفح جديدة. حاول تسجيل الدخول باسم admin2 بكلمة المرور 123456 — سيفشل هذا لأن كلمة المرور الفعلية هي admin:

Login Failed

الخطوة 5: تجهيز الحمولة وتنفيذها

باستخدام متصفح المسؤول المسجّل دخوله بالفعل، انتقل إلى:

http://192.168.1.104/PbootCMS/admin.php?p=/User/mod&ucode=10002&field=password&value=14e1b600b1fd579f47433b88e8d85291

14e1b600b1fd579f47433b88e8d85291 هو تجزئة MD5 لـ 123456.

تنفّذ الدالة mod() عملية الحقن وتعيد التوجيه عبر location(-1):

Payload Executed - Not Found

الخطوة 6: التحقق من تغيير كلمة المرور

الآن حاول تسجيل الدخول باستخدام admin2 / 123456:

Login Success

تم تغيير كلمة المرور بنجاح عبر حقن SQL. المستخدم الآن مسجّل الدخول بكلمة المرور الجديدة، مما يؤكد الاستيلاء الكامل على الحساب.

تحليل الشيفرة المصدرية

الشيفرة المصابة (UserController.php، السطر ~149)

Source Code

طبقة قاعدة البيانات (Model.php - دالة update)

عندما تتلقى update() وسيطًا نصيًا، يُستخدم كما هو في جملة SET دون أي تهريب:

final public function update($data = null)
{
    if (is_array($data)) {
        // Array path: checkKey() validates field names
        ...
    } else {
        // String path: NO VALIDATION AT ALL
        $update_string = $data;
    }
    $this->sql['value'] = $update_string;
    $sql = $this->buildSql($this->updateSql);
    return $this->getDb()->amd($sql);  // Direct execution, no prepared statement
}

المعالجة

  1. التحقق من القائمة البيضاء على المعامل field — لا يُسمح إلا بأسماء الأعمدة المعروفة (status، username، realname، password).
  2. الاستعلامات المُعامَلة (Parameterized queries) — استخدم العبارات المُعدّة (prepared statements) بدلاً من تسلسل النصوص.
  3. تهريب مدخلات المستخدم (Escape) — على الأقل، نظّف $value لمنع كسر علامات الاقتباس.
  4. فرض تجزئة كلمة المرور — إذا كان field هو password، فطبّق encrypt_string() على القيمة قبل التخزين.
  5. تقييد مسار التعديل المستقل — يجب أن يتطلب فرع "تعديل حقل واحد" في mod() رمز CSRF صالحًا وفحصًا للتفويض على مستوى الدور.

المراجع

  • الموقع الرسمي لـ PbootCMS
  • مصدر PbootCMS على Gitee
  • CVE-2026-79387

إفصاح: تم الإفصاح عن هذه الثغرة بمسؤولية إلى المورّد. إذا كنت تشغّل إصدارًا متأثرًا، فحدّثه فورًا وراجع جميع حسابات لوحة التحكم.

تنزيل الأداة