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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
mysql-mysqldump-show-tables-overflow — MySQL Community Server 26.7.0 - 高危 - mysqldump SHOW TABLES 栈溢出 - 崩溃转储 UID | Kitploit
工具/GitHubGitHub/abraxas/mysql-mysqldump-show-tables-overflow
漏洞分析漏洞利用模糊测试密码学渗透测试二进制分析
GitHubabraxas/mysql-mysqldump-show-tables-overflow

mysql-mysqldump-show-tables-overflow

MySQL Community Server 26.7.0 - 高危 - mysqldump SHOW TABLES 栈溢出 - 崩溃转储 UID

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库
5712天前尚未审核
分享

Abraxas Labs - mysql-mysqldump-show-tables-overflow

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  mysql-mysqldump-show-tables-overflow

mysql-mysqldump-show-tables-overflow

类别: 崩溃 可达性: 远程

MySQL Community Server mysqldump 26.7.0 (06a5c1c) - Oracle

默认的 mysqldump 在复制 SHOW TABLES 名称时没有 NAME_LEN 上限。getTableName 返回原始的 mysql_fetch_row。dump_all_tables_in_db 用 my_stpcpy 将该字符串复制到 hash_key[2*NAME_LEN+2],而 quote_name 将其写入一个 387 字节的栈缓冲区,没有任何边界检查。一个恶意服务器如果返回超过 192 字节的表名,就会导致 dump 进程崩溃。

真实的 mysqld 不会发出那么长的标识符。剩下的问题就是客户端盲目信任协议。

ID暂无 CVE
类别崩溃(客户端 SIGSEGV;未演示 RCE)
可达性远程(受害者在攻击者的 MySQL 上运行 mysqldump;UI:R)
CWECWE-120, CWE-121
CVSS高危:8.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
产品MySQL Community Server mysqldump
受影响版本26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
认证受害者在攻击者的 MySQL 上运行默认的 mysqldump
许可证GNU Affero GPL v3.0
实验环境仅限 127.0.0.1。崩溃见证。无 RIP 载荷。

攻击者能做什么

搭建一个 MySQL 协议服务器。完成握手。响应会话的 SET 命令。当客户端发送 show tables 时,返回一行名称长达数十 KB 的记录。

将 mysqldump testdb 指向该主机的操作员会在 dump 进程中触发栈缓冲区溢出。在 mysqldump Ver 26.7.0 上的实验结果为 SIGSEGV。可靠地控制指令指针不在本包范围内。崩溃才是。

与备份客户端指向恶意服务器相同的受害者模型。lock_tables 通过 --opt 默认启用。溢出发生在第一个 SHOW TABLES 循环中。

我是如何发现的

我对 https://github.com/mysql/mysql-server 标签 https://github.com/mysql/mysql-server/tree/mysql-26.7.0 进行了三十一次源码搜索。默认 mysqld 未发布的严重/高危漏洞搜索结果为空。2026 年 7 月的 CPU 高危服务器条目在此版本上已关闭。客户端工具是剩余类别,与 PostgreSQL pg_basebackup 跟随恶意路径的形态相同。

static char *getTableName(int reset) {
  static MYSQL_RES *res = nullptr;
  MYSQL_ROW row;
  if (!res) {
    if (!(res = mysql_list_tables(mysql, NullS))) return (nullptr);
  }
  if ((row = mysql_fetch_row(res))) return ((char *)row[0]);
static char *quote_name(char *name, char *buff, bool force) {
  char *to = buff;
  const char qtype = ansi_quotes_mode ? '"' : '`';
  if (!force && !opt_quoted && !test_if_special_chars(name)) return name;
  *to++ = qtype;
  while (*name) {
    if (*name == qtype) *to++ = qtype;
    *to++ = *name++;
  }

NAME_LEN 为 64 * 3 = 192。hash_key 为 386 字节。dump_table 中的 quote_name 写入 table_buff[NAME_LEN+3]。

已记录的弯路:将真实的 mysqld 视为预言机(它不会发出 193 字节的标识符);一个 4KiB 的名称被与 hash_key 同一栈帧上的 real_columns[MAX_FIELDS] 吸收;从完整服务器树编译 ASan;将崩溃称为指令指针控制。

实验环境

cd lab
./run.sh

镜像 mysql:26.7.0。恶意桩在 compose stub:3306(对照,表 t)和 stub:3307(溢出,64KiB 名称加见证)。发布 127.0.0.1:18600 / 18601。将其绑定到回环地址。

control-rc=2 control-signal=0
overflow-rc=139 overflow-signal=SIGSEGV
SUCCESS mysql-mysqldump-show-tables-overflow ... MYSQL-DUMP-SHOW-TABLES-OVERFLOW-WITNESS

对照组打印 26.7.0 dump 头并在 SQL 1146 时以退出码 2 退出。溢出组在 show tables 之后立即死亡。该连接上没有 LOCK TABLES。

修复方案

将 getTableName 限制在 NAME_LEN 以内。为 quote_name 提供缓冲区长度并拒绝越界写入。向 hash_key 的 my_stpcpy 应改为有界复制。恶意的 SHOW TABLES 名称不是表。

参考资料

  • https://github.com/mysql/mysql-server 标签 https://github.com/mysql/mysql-server/tree/mysql-26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
  • https://github.com/mysql/mysql-server/blob/mysql-26.7.0/client/mysqldump.cc getTableName、quote_name、dump_all_tables_in_db
  • https://github.com/mysql/mysql-server/blob/mysql-26.7.0/include/mysql_com.h NAME_LEN
  • https://github.com/mysql/mysql-server/blob/mysql-26.7.0/libmysql/libmysql.cc mysql_list_tables
下载工具