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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
mysql-jdv-definer-sqli — MySQL Community Server 26.7.0 - 高危 - JSON Duality DEFINER SQLi - NO_BACKSLASH_ESCAPES | Kitploit
工具/GitHubGitHub/abraxas/mysql-jdv-definer-sqli
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试数据库安全实验室与实践
GitHubabraxas/mysql-jdv-definer-sqli

mysql-jdv-definer-sqli

MySQL Community Server 26.7.0 - 高危 - JSON Duality DEFINER SQLi - NO_BACKSLASH_ESCAPES

查看仓库
1312天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - mysql-jdv-definer-sqli

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  mysql-jdv-definer-sqli

mysql-jdv-definer-sqli

类别: SQLi 可达性: 远程

MySQL Community Server mysqld 26.7.0 (06a5c1c) - Oracle

JSON Duality DML 使用 escape_string_for_mysql(仅反斜杠)拼接 JSON 字符串值,然后在切换到视图 DEFINER sctx 后,在调用者的 sql_mode 下执行 parse_sql。SET SESSION sql_mode='NO_BACKSLASH_ESCAPES' 会使 \' 结束 SQL 字面量。包含 ' 的 JSON 字符串会以 DEFINER 身份注入子查询 / SET 列表。实验环境:仅对视图具有 DML 权限的调用者将 secret.s 读取到投影的 name 列中。

默认的 CREATE VIEW 是 DEFINER。X Plugin 已经根据该模式进行分支处理。JDV 没有。受特性门控:需要 JSON Duality View。

ID暂无 CVE
类别SQLi(DEFINER;非 RCE)
可达性远程(已认证 SQL;需要对 JSON Duality View 的 DML 权限)
CWECWE-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)
认证已认证;对 JSON Duality View 的 INSERT 或 UPDATE
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1。在投影的 $.name 中可见。

攻击者能做什么

对 SQL SECURITY DEFINER JSON Duality View 持有 DML 权限。SET SESSION sql_mode='NO_BACKSLASH_ESCAPES'。UPDATE(etag 来自 SELECT)一个字符串字段,其 JSON 值包含 '。生成的 _utf8mb4 '...' 字面量结束。语句的其余部分以 DEFINER 身份执行。实验环境将 secret.s.note 选择到投影的 name 列中。直接对 secret.s 执行 SELECT 会返回 1142。

如果没有该 sql_mode,相同的 JSON 会作为字面量名称存储。引号保持为数据。

我是如何发现的

同样是 26.7.0 的搜寻。默认守护进程未发布的 Crit/High 为空。JSON Duality DML 仍然拼接值。

sbuf.append("_utf8mb4 '");
escape_string_for_mysql(&my_charset_utf8mb4_bin, ...);
sbuf.append(1, '\'');

create_sctx_guard 在 run_substmt 之前安装 view_sctx。调用者的 sql_mode 正是 parse_sql 所看到的。

错误尝试:在视图名称和 AS 之间使用 SQL SECURITY DEFINER 会返回 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

修复方案

使用 X Plugin 已有的相同 NO_BACKSLASH_ESCAPES 分支(escape_sql_quote 对比 escape_string_for_mysql)来转义 JDV DML 字符串。对生成的 INSERT/UPDATE 进行参数化。不要在 DEFINER sctx 下对拼接的值执行 parse_sql。

参考资料

  • github.com/mysql/mysql-server 标签 mysql-26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
  • sql/json_duality_view/dml.cc append_json_dom / create_sctx_guard
  • 同系列包:abraxas/mysql-mysqldump-show-tables-overflow · abraxas/mysql-mysqldump-tab-path · abraxas/mysql-mysqlbinlog-raw-path · abraxas/mysql-set-role-leftover
下载工具