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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
phpmyadmin-designer-json-sqli — phpMyAdmin 5.2.3 - 高危 - 远程 - SQLi - Designer JSON 未净化标识符 | Kitploit
工具/GitHubGitHub/abraxas/phpmyadmin-designer-json-sqli
漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试数据库安全实验室与实践
GitHubabraxas/phpmyadmin-designer-json-sqli

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →

phpmyadmin-designer-json-sqli

phpMyAdmin 5.2.3 - 高危 - 远程 - SQLi - Designer JSON 未净化标识符

查看仓库
209天前尚未审核
分享

Abraxas Labs - phpmyadmin-designer-json-sqli

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  phpmyadmin-designer-json-sqli

技术分析文章:https://abraxaslabs.tech/research/phpmyadmin-designer-json-sqli

phpmyadmin-designer-json-sqli

类别: SQLi 可达性: 远程

phpMyAdmin 5.2.3(标签 RELEASE_5_2_3,提交 962857e)。Designer AJAX 的 save_setting_value 会对设置数据块执行 json_encode,并将其拼接进针对控制用户链接的单引号 UPDATE/INSERT 语句中。用户名被转义,但 JSON 没有。json_encode 不会转义单引号。

已登录用户向 index.php?route=/database/designer POST 请求,携带 operation=save_setting_value 并在 value 中包含一个引号。随后 queryAsControlUser 会以 pma 控制用户身份对 pma__designer_settings 执行该字符串。该账户是配置存储账户,而非已登录的 SQL 账户。phpMyAdmin 6.x 在 ControlUser 上对此数据块使用了 quoteString 包裹。5.2.3 仍然直接拼接。

较早的 designer CVE(2016-6616、2019-11768、2019-18622)涉及用户名 / 数据库名。本次遗留问题出在 JSON 的 settings_data 列。

ID暂无 CVE
类别SQLi(针对 pma__designer_settings 的控制用户)
可达性远程(已认证 cookie 登录;Designer 与 pma__designer_settings 已启用)
CWECWE-89
CVSS高危:8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
产品phpMyAdmin
受影响版本5.2.3 标签 RELEASE_5_2_3(962857e)
认证已认证 cookie 登录。Designer 与 pma__designer_settings 已启用。
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1:19220

攻击者能做什么

能够打开 Designer 的已登录 phpMyAdmin 用户,可以以控制用户身份对 pma__designer_settings 注入 SQL。

权限方法 / 路径实验验证或推断
破坏控制用户 UPDATE/INSERT 字符串(pmadb SQL 的完整性)POST index.php?route=/database/designer operation=save_setting_value,在 value 中包含引号实验验证。通用日志:SET settings_data = '{"snap_line":"PMA-DESIGNER-JSON-SQLI-WITNESS'#" }' 为原始拼接。缺少 quoteString
截断自身的 settings_data,使其不再是 JSON(自身行的完整性)同一 POST;# 注释掉语句剩余部分实验验证。appuser 数据块包含见证字符串且不是合法 JSON。干净的保存 grid-ok 已消失
无需堆叠查询即可覆盖其他用户的 designer 行(受害者行的完整性)同一 # 注释掉 WHERE username = '...'实验验证。预置的 victim {"keep":"safe"} 变成了被截断的见证数据块
以控制用户身份执行额外语句若控制 mysqli 链接允许多语句,则同一注入点推断。默认 mysqli::query 为单语句。此处未启用
访问其他 pmadb 表(书签、历史、pma__userconfig)仅当堆叠查询或写入式突破可行时推断。本实验中的控制用户仅拥有 phpmyadmin.* 的 DML 权限

本实验已排除:未认证访问、已登录 appuser 的 SQL 账户(仅 appdb;appuser 对 phpmyadmin 无 GRANT)、操作系统 shell 以及堆叠查询。若 pmadb / designer 设置关闭,该功能无效(这属于 FAIL,而非本遗留问题)。

我是如何发现的

对 RELEASE_5_2_3 进行了八路并行源码排查。saveSetting 将 json_encode 拼接进 '...'。用户名经过 escapeString。6.x 已对此数据块使用 quoteString。5.2.3 没有。

错误转向:在 username 上注入(它已被转义);期望出现 #1064(# 会把其余部分注释掉,因此 MySQL 会接受被截断的 UPDATE);把堆叠查询当作已证实(mysqli 默认是单语句)。

实验环境

python3 phpmyadmin-designer-json-sqli-Abraxas-Labs.py

或

cd lab
./run.sh

仅限回环地址:http://127.0.0.1:19220。镜像 phpmyadmin:5.2.3 和 mysql:8.0。Compose 项目 phpmyadmin-designer-json-sqli。见证标识 PMA-DESIGNER-JSON-SQLI-WITNESS。

SUCCESS phpmyadmin-designer-json-sqli version=5.2.3 how=live raw-concat=yes truncated=true sql-error=false quoteString=no PMA-DESIGNER-JSON-SQLI-WITNESS

修复方案

对 JSON blob 使用 quoteString(..., ControlUser) / escapeString,与 RecentFavoriteTable::saveToDb() 以及 phpMyAdmin 6.x 在此列上的做法相同。不要将 json_encode 的输出放入单引号 SQL 字面量中。

参考资料

  • github.com/phpmyadmin/phpmyadmin 标签 RELEASE_5_2_3(962857e)
  • libraries/classes/Database/Designer/Common.php 中的 saveSetting
  • Controllers/Database/DesignerController.php 中的 POST operation=save_setting_value
  • 路由 GET|POST /database/designer
  • 同一 pin 的遗留项:phpmyadmin-webauthn · phpmyadmin-pmadb-central-sqli · phpmyadmin-setup-validate · phpmyadmin-csrf-sql
  • CWE-89

许可证

GNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境。不提供任何担保。

下载工具