Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
mysql-mysqldump-tab-path — MySQL Community Server 26.7.0 - 高危 - mysqldump --tab 路径残留 - 客户端文件写入 | Kitploit
工具/GitHubGitHub/abraxas/mysql-mysqldump-tab-path
漏洞分析漏洞利用Web应用程序漏洞利用信息收集渗透测试数据库安全实验室与实践
GitHubabraxas/mysql-mysqldump-tab-path

mysql-mysqldump-tab-path

MySQL Community Server 26.7.0 - 高危 - mysqldump --tab 路径残留 - 客户端文件写入

查看仓库
19天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - mysql-mysqldump-tab-path

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  mysql-mysqldump-tab-path

mysql-mysqldump-tab-path

类别: 文件写入(客户端) 可达性: 远程(UI:R)

MySQL Community Server mysqldump 26.7.0(06a5c1c)- Oracle

mysqldump --tab=DIR 使用 fn_format 为每张表写入一个 .sql 文件,且未使用 MY_REPLACE_DIR。一个带有 / 或 .. 的恶意 SHOW TABLES 名称会保留该目录。DIR 被忽略。dump UID 通过 my_fopen 打开该路径。

--tab 被文档描述为同机模式,因为 .txt 会经过服务端的 INTO OUTFILE。而 .sql 仍然是客户端写入。

ID暂无 CVE
类别文件写入(客户端 --tab .sql)
可达性远程(受害者对攻击者控制的 MySQL 运行 mysqldump --tab;UI:R)
CWECWE-22
CVSS高危: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。见证 .sql 位于 DIR 之外。

攻击者能做什么

搭建一个 MySQL 协议服务器。用 /abs/path 或 ../outside 响应 SHOW TABLES。运行了 mysqldump --tab=/backup testdb 的操作者会以 dump UID 写入 /abs/path.sql(或相对于 cwd 的路径)。

覆盖该 UID 能创建的任何文件。与信任远程文件名的备份客户端属于同一类别。.txt 的 INTO OUTFILE 路径是服务端 FILE。遗留问题在于客户端的 .sql。

真正的 mysqld 不会发出带 / 的表名。遗留问题在客户端。

我是如何发现的

与 mysqldump SHOW TABLES 溢出 同属 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。

参考资料

  • github.com/mysql/mysql-server 标签 mysql-26.7.0(06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
  • client/mysqldump.cc open_sql_file_for_table
  • mysys/mf_format.cc
  • 同类溢出包:abraxas/mysql-mysqldump-show-tables-overflow
下载工具