phpMyAdmin 5.2.3 - عالي - عن بُعد - SQLi - معرّف إضافة المصادقة بدون علامات اقتباس
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-auth-plugin-unquoted
الفئة: SQLi الوصول: عن بُعد
phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin
خيار تغيير كلمة المرور مُفعَّل افتراضيًا. يقوم UserPassword.php بنسخ قيمة POST authentication_plugin إلى ALTER USER ... IDENTIFIED WITH دون قائمة سماح ودون اقتباس. يمر اسم المستخدم والمضيف وكلمة المرور في نفس العبارة عبر escapeString. في MySQL 8 تُصدَر جملة WITH عندما تختلف الإضافة المُرسَلة عن الإضافة الحالية.
يقوم مستخدم phpMyAdmin مسجَّل الدخول بحقن SQL في ALTER USER الخاص به من خلال نموذج تغيير كلمة المرور. أي SQL إضافي في حقل الإضافة هو SQL، وليس اسم إضافة.
| المعرّف | لا يوجد CVE بعد |
| الفئة | SQLi |
| الوصول | عن بُعد (تسجيل دخول عبر الكوكيز موثَّق؛ تغيير كلمة المرور مُفعَّل) |
| 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 (962857e4f63d42e38f11ff4d63f5e722018add76) |
| المصادقة | تسجيل دخول عبر الكوكيز موثَّق. $cfg['ShowChgPassword'] افتراضيًا true. نوع المصادقة ليس config |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
يمكن لمستخدم phpMyAdmin مسجَّل الدخول حقن SQL في ALTER USER الخاص به من خلال نموذج تغيير كلمة المرور.
| الصلاحية | الطريقة / نقطة الوصول | الاستطلاع / السلامة / التوافر | مُثبَت مختبريًا أو مُستنتَج |
|---|---|---|---|
إرسال SQL إضافي في IDENTIFIED WITH | POST index.php?route=/user-password مع authentication_plugin | سلامة العبارة التي يبنيها phpMyAdmin | مُثبَت مختبريًا. يظهر POST الخام sha256_password /*PMA-AUTH-PLUGIN-UNQUOTED-WITNESS*/ دون اقتباس في صندوق SQL |
| جعل MySQL تُحلِّل ذلك SQL الإضافي كـ SQL | نفس العبارة تصل إلى mysqld | سلامة اتصال المستخدم | مُثبَت مختبريًا. احتفظ السجل العام بالإضافة sha256_password وأسقط التعليق. 1227 لأن هذا المستخدم لا يملك CREATE USER |
| جمل إضافية أو حسابات إضافية إذا نجح الاختراق في التحليل | نفس نقطة الوصول؛ تعتمد الاستعلامات المتراكمة على المشغِّل | سلامة الحسابات الأخرى | مُستنتَج. لا يُشغِّل هذا المختبر عبارة ثانية ولا ينشئ حسابًا آخر |
| نفس الدمج في إضافة/تعديل المستخدم | Privileges.php IDENTIFIED WITH / MariaDB VIA | سلامة العبارات التي يبنيها المانح | نظير مُستنتَج. POST المختبر يقتصر على تغيير كلمة المرور |
مُغلَق على هذا المسار: الاستخدام غير الموثَّق (يلزم تسجيل دخول عبر الكوكيز)، مصادقة config (تغيير كلمة المرور مخفي)، RCE، نجاح تغيير الإضافة دون GRANT على MySQL 8 (1227 بدون CREATE USER). يبقى اسم المستخدم والمضيف وكلمة المرور مُهرَّبين. كلمة المرور الخاصة لا تحتاج GRANT؛ المتبقي هو حقل الإضافة غير المُقتبَس، وليس تبديل إضافة مجاني.
نفس التثبيت: WebAuthn CustomServer leftover.
ثبَّتُ phpmyadmin/phpmyadmin RELEASE_5_2_3. PMASA-2025-1/2/3 موجودة بالفعل في 5.2.2. لا يزال تغيير كلمة المرور يُبنى كالتالي:
return 'ALTER USER \'' . $dbi->escapeString($username)
. '\'@\'' . $dbi->escapeString($hostname)
. '\' IDENTIFIED WITH ' . $authPlugin . ' BY '
$authPlugin هو $_POST['authentication_plugin']. تُسقِط MySQL 5.7.37+ و8.0 جملة WITH إلا إذا تغيّرت الإضافة. أرسِل اسمًا مختلفًا عبر POST فتعود الجملة.
منعطفات خاطئة مُسجَّلة بالفعل: اعتبار MySQL 1227 فشلًا للمتبقي (بل هو الدليل على أن SQL الإضافي قد حُلِّل)؛ ادّعاء تغيير إضافة دون GRANT على MySQL 8؛ اعتبار مصادقة config ضمن النطاق؛ reverse shell. مسرحية.
python3 phpmyadmin-auth-plugin-unquoted-Abraxas-Labs.py
# or: cd lab && ./run.sh
استهدف فقط http://127.0.0.1:19260. الصورتان phpmyadmin:5.2.3 وmysql:8.0. مشروع Compose باسم phpmyadmin-auth-plugin-unquoted. تُفكَّك الحزمة بعد التشغيل.
تسجيل دخول عبر الكوكيز باسم appuser. أرسِل POST إلى /user-password مع authentication_plugin=sha256_password /*PMA-AUTH-PLUGIN-UNQUOTED-WITNESS*/. صندوق استعلام SQL في PMA: ALTER USER 'appuser'@'%' IDENTIFIED WITH sha256_password /*PMA-AUTH-PLUGIN-UNQUOTED-WITNESS*/ BY '***'. يُحلِّل السجل العام في MySQL التعليق ويخزِّن IDENTIFIED WITH 'sha256_password'. اسم المستخدم مُقتبَس.
SUCCESS phpmyadmin-auth-plugin-unquoted how=live unquoted=yes escaped-user=yes plugin=sha256_password PMA-AUTH-PLUGIN-UNQUOTED-WITNESS
اعتمد قائمة سماح لأسماء الإضافات من SHOW PLUGINS. لا تُدرِج أبدًا قيمة POST في IDENTIFIED WITH أو VIA أو plugin=.
962857e4f63d42e38f11ff4d63f5e722018add76)libraries/classes/UserPassword.phplibraries/classes/Server/Privileges.phpGNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. دون أي ضمان.