
phpMyAdmin 5.2.3 - عالي - عن بُعد - SQLi - استعلام central columns pmadb المتبقي
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-pmadb-central-sqli
التحليل المكتوب: https://abraxaslabs.tech/research/phpmyadmin-pmadb-central-sqli
الفئة: SQLi الوصول: عن بُعد
phpMyAdmin 5.2.3 (الوسم RELEASE_5_2_3، الالتزام 962857e). تكتب الأعمدة المركزية col_extra عبر دمج POST extra وattribute في نص SQL حرفي محاط بعلامة اقتباس مفردة على رابط مستخدم التحكم. تمر الحقول المجاورة عبر escapeString. هذان الحقلان لا يمرّان.
يقوم مستخدم مسجّل الدخول بإرسال POST إلى index.php?route=/database/central-columns مع multi_edit_central_column_save=1 وعلامة اقتباس في field_attribute (أو col_extra). بعد ذلك يشغّل getInsertQuery / updateOneColumn تلك السلسلة بصفة مستخدم التحكم pma مقابل pma__central_columns. ذلك الحساب هو مستخدم تخزين الإعدادات، وليس صندوق SQL المسجّل الدخول إليه.
كان CVE-2016-5703 هو اسم قاعدة البيانات في الأعمدة المركزية. لم يكن حقلا extra وattribute هما ذلك الخلل.
| المعرّف | لا يوجد CVE بعد |
| الفئة | SQLi (مستخدم التحكم على pma__central_columns) |
| الوصول | عن بُعد (تسجيل دخول مصادَق عبر الكوكيز؛ الأعمدة المركزية pmadb مفعّلة) |
| CWE | CWE-89 |
| CVSS | عالٍ: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| المنتج | phpMyAdmin |
| المتأثر | 5.2.3 الوسم RELEASE_5_2_3 (962857e) |
| المصادقة | تسجيل دخول مصادَق عبر الكوكيز. الأعمدة المركزية pmadb مفعّلة. |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:19210 فقط |
يمكن لمستخدم phpMyAdmin مسجّل الدخول يستطيع فتح الأعمدة المركزية أن يحقن SQL بصفة مستخدم التحكم على pma__central_columns.
| الصلاحية | الطريقة / المسار | مُثبت مختبريًا أو مُستنتج |
|---|---|---|
| كسر سلسلة INSERT/UPDATE الخاصة بمستخدم التحكم (سلامة SQL في pmadb) | POST index.php?route=/database/central-columns مع multi_edit_central_column_save=1 وعلامة اقتباس في field_attribute / col_extra | مُثبت مختبريًا. خطأ JSON #1064. الشاهد PMA-PMADB-CENTRAL-SQLI-WITNESS في خطأ مستخدم التحكم |
| إبقاء الحقول المجاورة ضمن النطاق | نفس POST، علامة اقتباس في field_name | مُثبت مختبريًا. يُخزَّن الصف كـ neg'col. صمد escapeString |
| قراءة أو الكتابة فوق صفوف الأعمدة المركزية لمستخدمين آخرين | نفس نقطة الحقن، بمجرد إغلاق السلسلة | مُستنتج. يتوقف المختبر عند خطأ صياغة؛ لا استعلامات متراكمة |
| استعلامات إضافية بصفة مستخدم التحكم | نفس نقطة الحقن إذا كان رابط mysqli الخاص بالتحكم يسمح بالاستعلامات المتعددة | مُستنتج. الإعداد الافتراضي لـ mysqli::query هو استعلام واحد. غير مفعّل هنا |
الوصول إلى جداول pmadb أخرى (الإشارات المرجعية، السجل، pma__userconfig) | فقط إذا كانت الاستعلامات المتراكمة أو كتابة من نوع INTO ممكنة | مُستنتج. مستخدم التحكم في هذا المختبر يملك فقط DML على phpmyadmin.* |
مغلق في هذا المختبر: الوصول غير المصادَق، وصندوق SQL الخاص بـ appuser المسجّل الدخول (appdb فقط)، وصدفة نظام التشغيل، والاستعلامات المتراكمة. الميزة لا تعمل إذا كانت pmadb / الأعمدة المركزية معطّلة (وهذا FAIL، وليس هذه الثغرة المتبقية).
ثماني عمليات بحث متوازية في المصدر لـ RELEASE_5_2_3. الحقول المجاورة في CentralColumns.php تمر عبر escapeString. أما extra وattribute فتُدمجان عبر implode في نص حرفي محاط بعلامة اقتباس مفردة. كان CVE-2016-5703 هو اسم قاعدة البيانات، وليس هذه الأعمدة.
مسارات خاطئة: اعتبار علامة اقتباس في field_name هي الثغرة المتبقية (تُخزَّن كـ neg'col؛ وهذا هو النفي)؛ توقّع أن يُظهر السجل العام الشاهد غير المُهرَّب (يموت INSERT بـ #1064 قبل كتابة ناجحة)؛ اعتبار تعطيل pmadb هو هذه الثغرة المتبقية (الميزة لا تعمل).
python3 phpmyadmin-pmadb-central-sqli-Abraxas-Labs.py
أو
cd lab
./run.sh
للاسترجاع المحلي فقط: http://127.0.0.1:19210. الصور phpmyadmin:5.2.3 و mysql:8.0. مشروع Compose phpmyadmin-pmadb-central-sqli. الشاهد PMA-PMADB-CENTRAL-SQLI-WITNESS.
SUCCESS phpmyadmin-pmadb-central-sqli how=live insert-syntax=yes field-name-escaped=yes general-log-unescaped=false error-has-witness=true PMA-PMADB-CENTRAL-SQLI-WITNESS
escapeString / quoteString(..., CONNECT_CONTROL) على extra وattribute. القائمة المسموح بها auto_increment، UNSIGNED، BINARY، UNSIGNED ZEROFILL، وon update CURRENT_TIMESTAMP. يُعدّ quoteString في phpMyAdmin 6.x على كتلة JSON الخاصة بالمصمّم الشكل المُرقّع لهذه الفئة من دمج pmadb.
962857e)libraries/classes/Database/CentralColumns.php getInsertQuery / updateOneColumnControllers/Database/CentralColumnsController.php POST multi_edit_central_column_saveGET|POST /database/central-columnsGNU Affero GPL v3.0. راجع LICENSE. للاستخدام في مختبر loopback فقط. دون أي ضمان.