
phpMyAdmin 5.2.3 - عالي - عن بُعد - SQLi - ImportLdi TERMINATED BY leftover
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-importldi
الفئة: SQLi الوصول: عن بُعد
phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin
ImportLdi.php يبني LOAD DATA مع FIELDS/LINES TERMINATED BY من POST ldi_terminated و ldi_new_line. يتم دمج هاتين السلسلتين داخل SQL محاط بعلامات اقتباس مفردة. يمر ldi_enclosed و ldi_escaped عبر escapeString. يقوم phpMyAdmin بتعيين PMA_ENABLE_LDI على /import بحيث يكون MYSQLI_OPT_LOCAL_INFILE مفعّلًا.
يقوم مستخدم مسجّل الدخول بإرسال POST format=ldi مع علامة اقتباس في ldi_terminated. يحتوي LOAD DATA الصادر على POST الخام داخل TERMINATED BY. حقن SQL في اتصال المستخدم، وليس في مستخدم التحكم.
| ID | لا يوجد CVE بعد |
| الفئة | SQLi |
| الوصول | عن بُعد (تسجيل دخول مصادق عليه عبر الكوكيز؛ استيراد جدول، الصيغة ldi) |
| CWE | CWE-89 |
| CVSS | متوسط: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N |
| المنتج | phpMyAdmin |
| المتأثر | 5.2.3 وسم RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76) |
| المصادقة | تسجيل دخول مصادق عليه عبر الكوكيز. استيراد جدول، الصيغة ldi |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
يمكن لمستخدم phpMyAdmin مسجّل الدخول وقادر على فتح استيراد الجدول أن يحقن SQL في LOAD DATA ... TERMINATED BY على اتصال MySQL الخاص به.
| الصلاحية | الطريقة / نقطة الوصول | الاستطلاع / السلامة / التوافر | مُثبت مختبريًا أو مُستنتج |
|---|---|---|---|
كسر القيمة الحرفية FIELDS TERMINATED BY | POST index.php?route=/import format=ldi ldi_terminated مع علامة اقتباس | سلامة العبارة التي يبنيها PMA | مُثبت مختبريًا. صندوق SQL في HTML: TERMINATED BY '',PMA-IMPORTLDI-WITNESS' |
إبقاء ENCLOSED BY داخل النطاق | نفس POST، علامة اقتباس في ldi_enclosed | ضبط سلبي | مُثبت مختبريًا. ENCLOSED BY مُهرّب |
| SQL إضافي على اتصال المستخدم (INTO OUTFILE / مكدّس إذا كان مسموحًا) | نفس نقطة الوصول بمجرد إغلاق السلسلة | سلامة اتصال المستخدم | مُستنتج. يتوقف المختبر عند الفاصل المكسور. الإعداد الافتراضي mysqli::query عبارة واحدة |
| قراءة/كتابة ملفات من جهة MySQL | نفس LOAD DATA إذا كان الحساب يملك FILE أو LOCAL INFILE إلى خادم الويب | سلامة الملفات التي يمكن لـ mysqld الوصول إليها | مُستنتج. غير ممنوح هنا. غير مُدّعى |
مغلق في هذا المختبر: الوصول غير المصادق عليه، مستخدم التحكم / pmadb، LFI عبر include في نظام التشغيل، والقراءة/الكتابة المقيّدة بـ FILE. المستخدم المسجّل الدخول يملك بالفعل صندوق SQL؛ هذا المتبقي هو الفاصل غير المُهرّب داخل عبارة يبنيها PMA له.
نفس التثبيت: WebAuthn CustomServer leftover.
ثبّتت phpMyAdmin RELEASE_5_2_3. إضافات الاستيراد التي تبني LOAD DATA يدويًا هي تدقيق لعلامات الاقتباس. اثنان من أصل أربعة حقول فاصلة كانا مُهرّبين. اثنان لم يكونا كذلك:
$sql .= ' FIELDS TERMINATED BY \'' . $ldi_terminated . '\'';
...
$sql .= ' LINES TERMINATED BY \'' . $ldi_new_line . '\'';
يستدعي ldi_enclosed / ldi_escaped الدالة $dbi->escapeString. يعيّن Common.php القيمة PMA_ENABLE_LDI على /import + format=ldi. المسارات GET|POST /import و GET|POST /table/import.
المنعطفات الخاطئة المسجّلة مسبقًا: ادعاء LFI بدون منح FILE؛ اعتبار صندوق SQL هو الاكتشاف (المتبقي هو الفاصل غير المُهرّب الذي يدمجه PMA)؛ ادعاء مستخدم التحكم / pmadb؛ صدفة عكسية. مسرح.
python3 phpmyadmin-importldi-Abraxas-Labs.py
# or: cd lab && ./run.sh
الهدف فقط http://127.0.0.1:19290. الصور phpmyadmin:5.2.3 و mysql:8.0. مشروع Compose phpmyadmin-importldi. يتم تفكيك الحزمة بعد التشغيل.
تسجيل دخول بالكوكيز. POST /import مع format=ldi وعلامة اقتباس في ldi_terminated. الصادر LOAD DATA LOCAL INFILE ... INTO TABLE \ldi_target` FIELDS TERMINATED BY '',PMA-IMPORTLDI-WITNESS'. نفس علامة الاقتباس في ldi_enclosedمخزّنة كـENCLOSED BYمُهرّب. كود المصدر المثبّت على صورة 5.2.3 لا يزال يحتوي على'.$ldi_terminated.'و$dbi->escapeString($ldi_enclosed)`.
SUCCESS phpmyadmin-importldi pin=RELEASE_5_2_3 how=live TERMINATED-BY-raw ENCLOSED-escaped PMA-IMPORTLDI-WITNESS
escapeString على ldi_terminated و ldi_new_line، تمامًا كما في enclosed و escaped. تحويل skip_queries إلى int.
962857e4f63d42e38f11ff4d63f5e722018add76)libraries/classes/Plugins/Import/ImportLdi.phpGNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. بدون ضمان.