
MySQL Community Server 26.7.0 - उच्च - mysqldump --tab पथ अवशेष - क्लाइंट फ़ाइल लेखन
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · mysql-mysqldump-tab-path
वर्ग: फ़ाइल राइट (क्लाइंट) पहुँच: रिमोट (UI:R)
MySQL Community Server mysqldump 26.7.0 (06a5c1c) - Oracle
mysqldump --tab=DIR प्रत्येक टेबल के लिए एक .sql लिखता है, fn_format का उपयोग करते हुए MY_REPLACE_DIR के बिना। / या .. वाला एक शत्रुतापूर्ण SHOW TABLES नाम उस डायरेक्टरी को बनाए रखता है। DIR को अनदेखा किया जाता है। डंप UID उस पथ को my_fopen करता है।
--tab को समान-मशीन मोड के रूप में प्रलेखित किया गया है क्योंकि .txt सर्वर INTO OUTFILE के माध्यम से जाता है। .sql अभी भी एक क्लाइंट राइट है।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | फ़ाइल राइट (क्लाइंट --tab .sql) |
| पहुँच | रिमोट (पीड़ित हमलावर MySQL के विरुद्ध mysqldump --tab चलाता है; UI:R) |
| CWE | CWE-22 |
| CVSS | High: 8.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N |
| उत्पाद | MySQL Community Server mysqldump |
| प्रभावित | 26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8) |
| प्रमाणीकरण | पीड़ित हमलावर MySQL के विरुद्ध mysqldump --tab=DIR चलाता है |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1। DIR के बाहर .sql का साक्षी। |
एक MySQL-प्रोटोकॉल सर्वर खड़ा करें। SHOW TABLES का उत्तर /abs/path या ../outside से दें। जिस ऑपरेटर ने mysqldump --tab=/backup testdb चलाया, वह डंप UID के रूप में /abs/path.sql (या cwd के सापेक्ष एक पथ) लिखता है।
उस UID द्वारा बनाई जा सकने वाली किसी भी फ़ाइल को अधिलेखित करें। यह उस बैकअप क्लाइंट के समान वर्ग है जो रिमोट फ़ाइलनाम पर भरोसा करता है। .txt INTO OUTFILE पथ सर्वर-साइड FILE है। शेष बचा हुआ क्लाइंट .sql है।
एक वास्तविक mysqld / वाला टेबल नाम नहीं देगा। शेष बचा हुआ क्लाइंट है।
mysqldump SHOW TABLES overflow की तरह ही 26.7.0 की खोज। डिफ़ॉल्ट डेमन खाली था। क्लाइंट टूल्स अभी भी SHOW TABLES पर भरोसा करते थे। ओवरफ़्लो एक शेष बचा हुआ था। --tab अगला था।
static FILE *open_sql_file_for_table(const char *table, int flags) {
FILE *res;
char filename[FN_REFLEN], tmp_path[FN_REFLEN];
convert_dirname(tmp_path, path, NullS);
res = my_fopen(fn_format(filename, table, tmp_path, ".sql",
MYF(MY_UNPACK_FILENAME | MY_APPEND_EXT)),
flags, MYF(MY_WME));
return res;
}
mysys/mf_format.cc: यदि dirname_part(name) गैर-रिक्त है और MY_REPLACE_DIR बंद है, तो दी गई dir का उपयोग नहीं किया जाता।
पहले से दर्ज गलत रास्ते: एक वास्तविक mysqld को ओरेकल मानना; SHOW CREATE TABLE से पहले SHOW TABLE STATUS पर मर जाना (.sql केवल CREATE सफल होने के बाद खुलता है); INTO OUTFILE .txt को शेष बचा हुआ कहना; एक 64KiB नाम जो G1 ओवरफ़्लो को फिर से हिट करता है।
MariaDB CVE-2025-13699 (mariadb-dump व्यू-नाम ट्रैवर्सल) नहीं। समान वर्ग, MySQL Community प्रति।
cd lab
./run.sh
इमेज mysql:26.7.0। --tab=/work/tabdir। कंट्रोल स्टब टेबल t work/tabdir/t.sql लिखता है। ट्रैवर्सल स्टब टेबल /work/oracle/MYSQL-DUMP-TAB-TRAVERSAL-WITNESS work/oracle/MYSQL-DUMP-TAB-TRAVERSAL-WITNESS.sql लिखता है। प्रकाशित 127.0.0.1:18610 / 18611। इसे लूपबैक पर बाइंड करें।
control-sql=yes
traversal-outside=yes
SUCCESS mysql-mysqldump-tab-path ... MYSQL-DUMP-TAB-TRAVERSAL-WITNESS
--tab क्लाइंट फ़ाइलों के लिए fn_format में MY_REPLACE_DIR पास करें, या पहले टेबल नाम का basename लें। --tab=DIR का अर्थ DIR होना चाहिए।
06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)client/mysqldump.cc open_sql_file_for_tablemysys/mf_format.cc