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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
phpmyadmin-setup-validate — phpMyAdmin 5.2.3 - 高危 - 远程 - 遗留问题 - setup/validate 仍可访问 | Kitploit
工具/GitHubGitHub/abraxas/phpmyadmin-setup-validate
漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试实验室与实践
GitHubabraxas/phpmyadmin-setup-validate

phpmyadmin-setup-validate

phpMyAdmin 5.2.3 - 高危 - 远程 - 遗留问题 - setup/validate 仍可访问

查看仓库
67天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - phpmyadmin-setup-validate

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  phpmyadmin-setup-validate

技术分析文章:https://abraxaslabs.tech/research/phpmyadmin-setup-validate

phpmyadmin-setup-validate

类别: SSRF 可达性: 远程

phpMyAdmin 5.2.3(标签 RELEASE_5_2_3,提交 962857e)。当 config.inc.php 存在时,setup/index.php 会终止运行。但 setup/validate.php 不会。它仍会在 $isMinimumCommon 下加载,从公开登录页面获取 CSRF 令牌,并调用 Validator::testDBConnection -> mysqli_connect,连接目标为 JSON values 字段中的主机、端口、用户名和密码。

未认证的客户端先 GET / 获取会话 cookie 和令牌,然后向 setup/validate.php POST id=Server,并附带自选的 Servers/1/host 和 Servers/1/port。phpMyAdmin 主机随即向该地址发起 TCP MySQL 握手。这就是基于 MySQL 协议的 SSRF:探测内部 3306 端口、对内网服务器进行凭据填充、通过时序和 mysqli 错误构建端口预言机。除非该端口上有服务使用 MySQL 协议,否则它并非 HTTP 元数据 SSRF。hide_db 还会将用户提供的正则表达式插入 preg_match。本实验室未运行该 ReDoS 路径。

官方 phpmyadmin:5.2.3 镜像会删除 setup/。此遗留问题仅在 setup/ 目录仍位于 Web 根目录时适用,而这正是安装后常见的遗留情况。实验室从 5.2.3 tarball 恢复 setup/,以使版本与 RELEASE_5_2_3 一致。

PMASA-2016-44 / CVE-2016-6621 涵盖了一些 setup SSRF 问题。“配置存在时禁用 setup”的检查从未应用于 validate.php / config.php。

ID暂无 CVE
类别SSRF(MySQL 协议)
可达性远程(若 setup/ 仍可通过 Web 访问,则无需认证)
CWECWE-918
CVSS高危:7.2 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
产品phpMyAdmin
受影响版本5.2.3 标签 RELEASE_5_2_3(962857e),且 setup/ 仍位于文档根目录
认证无需认证。CSRF 令牌来自公开登录页面。无需 MySQL 登录。
许可证GNU Affero GPL v3.0
实验室仅 127.0.0.1:19230

攻击者可执行的操作

任何能够访问遗留 setup/ 目录树的人,都可以让 phpMyAdmin 主机向自选的主机和端口发起 MySQL 协议 TCP 连接。

权限方法 / 路径实验室验证或推断
从 PMA 主机向攻击者指定的 host:port 发起 TCP 连接(出站连接完整性;对该端口进行侦察)未认证 POST /setup/validate.php id=Server,附带 Servers/1/host + Servers/1/port,以及来自 GET / 的令牌实验室验证。oracle:13306 上的预言机记录了来自 PMA 容器的 PMA-SETUP-VALIDATE-WITNESS
确认 setup UI 已关闭而 validate 仍开启GET /setup/index.php实验室验证。响应体包含 "setup is disabled" / configuration already exists
缺少登录页 CSRF 令牌时安全失败相同 POST,无 token实验室验证。预言机零命中
通过 mysqli 错误和时序构建端口 / 凭据预言机相同 testDBConnection推断。预言机接受后关闭,实验室响应体为 mysqli_connect(): (HY000/2006): MySQL server has gone away
与内部 3306 进行 MySQL 通信并尝试提交的用户名/密码相同 mysqli_connect推断。未指向实验室 db 服务
通过 validateRegex 插入用户正则表达式触发 ReDoSid=Servers/1/hide_db推断。未实际执行

本实验已关闭:HTTP 元数据 SSRF(握手协议是 MySQL,而不是 GET /latest/meta-data)、未认证的 PMA 登录、操作系统 shell,以及安装向导本身(index.php 保持禁用)。如果 setup/ 未部署(官方镜像默认如此),则判定为 FAIL。

我是如何发现的

对 RELEASE_5_2_3 进行了八路并行源码搜寻。setup/index.php 存在配置已存在的致命错误。setup/validate.php 则没有。setup/lib/common.inc.php 设置了 $isMinimumCommon,并且不查找 CONFIG_FILE。

走过的弯路:把官方镜像当作这个遗留物(它会删除 setup/);在没有登录页令牌的情况下发送 POST 请求(零 oracle 命中);将其视为 HTTP 元数据 SSRF(握手协议是 MySQL)。

实验环境

python3 phpmyadmin-setup-validate-Abraxas-Labs.py

或

cd lab
./run.sh

仅限回环地址:http://127.0.0.1:19230。Compose 项目 phpmyadmin-setup-validate。Dockerfile 从 5.2.3 tarball 恢复 setup/,并在端口 13306 上运行 TCP oracle。见证值 PMA-SETUP-VALIDATE-WITNESS。

SUCCESS phpmyadmin-setup-validate how=live tcp=yes setup-index-disabled=yes PMA-SETUP-VALIDATE-WITNESS

修复方案

将 file_exists(CONFIG_FILE) 的致命检查放入 setup/lib/common.inc.php,使每一个 setup 脚本都会终止。限制 testDBConnection 的主机。不要用用户提供的字符串构建 preg_match 分隔符。

参考资料

  • github.com/phpmyadmin/phpmyadmin 标签 RELEASE_5_2_3(962857e)
  • setup/index.php 配置已存在的致命检查
  • setup/validate.php 缺少该检查
  • libraries/classes/Config/Validator.php 中的 testDBConnection / mysqli_connect
  • 同一固定版本的遗留项:phpmyadmin-webauthn · phpmyadmin-pmadb-central-sqli · phpmyadmin-designer-json-sqli · phpmyadmin-csrf-sql
  • CWE-918

许可证

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

下载工具