
MySQL Community Server 26.7.0 - عالي - JSON Duality DEFINER SQLi - NO_BACKSLASH_ESCAPES
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · mysql-jdv-definer-sqli
الفئة: SQLi الوصول: عن بُعد
MySQL Community Server mysqld 26.7.0 (06a5c1c) - Oracle
يقوم JSON Duality DML بربط قيم سلاسل JSON باستخدام escape_string_for_mysql (شرطة مائلة عكسية فقط)، ثم parse_sql تحت sql_mode الخاص بالمستدعي بعد التبديل إلى sctx الخاص بـ DEFINER للعرض. يجعل SET SESSION sql_mode='NO_BACKSLASH_ESCAPES' الأمر \' يُنهي النص الحرفي SQL. سلسلة JSON تحتوي على ' تحقن استعلاماً فرعياً / قائمة SET بصفتها DEFINER. المختبر: مستدعٍ لديه فقط DML على العرض يقرأ secret.s في العمود name المُسقَط.
CREATE VIEW الافتراضي هو DEFINER. X Plugin يتفرّع بالفعل على هذا النمط. JDV لا يفعل. مُقيَّد بميزة: يحتاج إلى JSON Duality View.
| ID | لا يوجد CVE بعد |
| الفئة | SQLi (DEFINER؛ ليس RCE) |
| الوصول | عن بُعد (SQL مُصادَق عليه؛ يحتاج DML على JSON Duality View) |
| 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 |
| المنتج | MySQL Community Server mysqld |
| المتأثر | 26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8) |
| المصادقة | مُصادَق عليه؛ INSERT أو UPDATE على JSON Duality View |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط. الشاهد في $.name المُسقَط. |
امتلاك DML على SQL SECURITY DEFINER JSON Duality View. SET SESSION sql_mode='NO_BACKSLASH_ESCAPES'. UPDATE (etag من SELECT) لحقل سلسلة تحتوي قيمة JSON الخاصة به على '. ينتهي النص الحرفي _utf8mb4 '...' المُولَّد. يُنفَّذ باقي الاستعلام بصفتها DEFINER. يختار المختبر secret.s.note في العمود name المُسقَط. SELECT المباشر على secret.s هو 1142.
بدون sql_mode هذا، تُخزَّن نفس JSON كاسم حرفي. تبقى علامة الاقتباس بيانات.
نفس مطاردة 26.7.0. كان الافتراضي للـ daemon غير المنشور Crit/High فارغاً. لا يزال JSON Duality DML يربط القيم.
sbuf.append("_utf8mb4 '");
escape_string_for_mysql(&my_charset_utf8mb4_bin, ...);
sbuf.append(1, '\'');
create_sctx_guard يثبّت view_sctx قبل run_substmt. sql_mode الخاص بالمستدعي هو ما يراه parse_sql.
المنعطفات الخاطئة: SQL SECURITY DEFINER بين اسم العرض وAS هو 1064 (الافتراضي هو DEFINER بالفعل). يتم تخطي نفس name كالصف الحالي (is_equal)؛ احقن ضد قيمة مختلفة. Etag مطلوب.
cd lab
./run.sh
الصورة mysql:26.7.0. منشورة على 127.0.0.1:18640. العرض app.dv DEFINER root@% فوق app.t. السر في secret.s. الضحية لديه SELECT/INSERT/UPDATE على العرض فقط.
SUCCESS mysql-jdv-definer-sqli victim-secret=denied nbe-inject=yes view-has-witness=yes default-mode-inject=no dump=26.7.0 image=mysql:26.7.0 MYSQL-JDV-DEFINER-SQLI-WITNESS
اهرب سلاسل JDV DML بنفس فرع NO_BACKSLASH_ESCAPES الذي يمتلكه X Plugin بالفعل (escape_sql_quote مقابل escape_string_for_mysql). اجعل INSERT/UPDATE المُولَّد مُعامَلاً. لا تستخدم parse_sql على القيم المربوطة تحت sctx الخاص بـ DEFINER.
06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)append_json_dom / create_sctx_guard