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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
phpmyadmin-csrf-sql — phpMyAdmin 5.2.3 - 高危 - 远程 - CSRF - /sql 上的 token 剥离 | Kitploit
工具/GitHubGitHub/abraxas/phpmyadmin-csrf-sql
漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试实验室与实践
GitHubabraxas/phpmyadmin-csrf-sql

phpmyadmin-csrf-sql

phpMyAdmin 5.2.3 - 高危 - 远程 - CSRF - /sql 上的 token 剥离

查看仓库
18天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - phpmyadmin-csrf-sql

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

技术分析文章:https://abraxaslabs.tech/research/phpmyadmin-csrf-sql

phpmyadmin-csrf-sql

类别: CSRF 影响范围: 远程

phpMyAdmin 5.2.3(标签 RELEASE_5_2_3,提交 962857e)。Common.php 在 checkTokenRequestParam 之前从全局变量构建 PSR-7 请求。当令牌不匹配时,Sanitize::removeRequestVars 会清除 $_POST 和 $_GET,但不会清除该快照。随后 $sql_query 会从 $request->getParsedBodyParam('sql_query') 复制而来。AJAX POST 在令牌不匹配时会中止。非 AJAX POST 则会继续执行。SqlController 优先使用已被剥离的 $_POST['sql_query'],否则保留全局变量。

只需受害者持有 phpMyAdmin 会话 cookie 即可。向 index.php?route=/sql 发送 POST 请求,携带 sql_query 且不带有效令牌,同时不带 ajax_request。该 SELECT 会以该 MySQL 用户身份执行。5.2.3 中默认的 CookieSameSite=Strict 会阻止许多跨站浏览器。同站、Lax、None 或 HTTP 认证场景仍会触发该漏洞。无论哪种情况,这都是一处失效的 CSRF 防护。

ID暂无 CVE
类别CSRF
影响范围远程。默认的 CookieSameSite=Strict 会阻止许多跨站浏览器。同站 / Lax / None / HTTP 认证场景仍然存在。
CWECWE-352
CVSS高危:8.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N
产品phpMyAdmin
受影响版本5.2.3 标签 RELEASE_5_2_3(962857e)
认证受害者 phpMyAdmin 会话 cookie(或 HTTP 认证)。无需有效 CSRF 令牌。
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1:19240

攻击者能做什么

任何能让受害者浏览器在不带 ajax_request 的情况下向 phpMyAdmin 发送 POST 请求的人,都能以该 MySQL 用户身份执行 SQL。

权限方法 / 路径实验验证或推断
以受害者 MySQL 账户身份执行攻击者 SQL(对该 SQL 主机造成完整性影响并进行侦察)POST index.php?route=/sql sql_query=... db=... 不带 token,不带 ajax_request实验验证。响应体包含 PMA-CSRF-SQL-WITNESS。通用日志显示该 SELECT 以 appuser 身份执行
在 AJAX 场景下中止同一处理器同一 POST 请求携带 ajax_request=1实验验证。Token mismatch。INSERT 标记行不存在。通用日志未执行该 INSERT
跳过仅读取已剥离 $_POST 的处理器POST /database/structure/drop-table 不带令牌实验验证。keepme 仍然存在
导出(SaveDir)、分区 DROP/TRUNCATE、账户锁定、/config/set、pmadb 创建等场景存在相同缺口任何在剥离后读取 PSR-7 请求体的处理器推断。未实际测试

本实验环境已排除:未认证的 PMA(需先通过 cookie 登录)、AJAX 路由(令牌不匹配时会退出)、不带令牌的 drop-table、操作系统 shell。默认的 Strict SameSite 意味着经典的跨站表单通常不会发送 cookie;但在同站以及 Lax/None 部署中,遗留问题仍然是一次失败的 CSRF 检查。

我是如何发现的

对 RELEASE_5_2_3 进行了八路并行源码排查。Common.php 在 checkTokenRequestParam() 之前创建 $request = createFromGlobals()。当令牌不匹配时,Sanitize::removeRequestVars() 仅清除 $_POST/$_GET。非 AJAX 请求继续执行。当 $_POST 为空时,SqlController 使用全局 $sql_query。路由为 GET|POST /sql。

错误方向:把 AJAX /sql 当作遗留问题(它会因 Token mismatch 而中止);把 drop-table 当作遗留问题(该处理程序只读取经过剥离的 $_POST);把默认的 Strict SameSite 当作“CSRF 已关闭”(该控制仍然失效;same-site / Lax / None 仍然存在)。

实验环境

python3 phpmyadmin-csrf-sql-Abraxas-Labs.py

或

cd lab
./run.sh

仅限回环地址:http://127.0.0.1:19240。镜像 phpmyadmin:5.2.3 和 mysql:8.0。Compose 项目 phpmyadmin-csrf-sql。PoC 是同站回环 POST(Strict SameSite 仍会发送 cookie)。见证标识 PMA-CSRF-SQL-WITNESS。

SUCCESS phpmyadmin-csrf-sql sql-ran=yes ajax-abort=yes drop-held=yes PMA-CSRF-SQL-WITNESS

修复方案

当出现不匹配时,将请求替换为空正文,或者拒绝所有 POST 请求,而不仅仅是 AJAX 请求。不要从过期的请求中复制 sql_query。像登出一样采用失败关闭(fail closed)策略。

参考资料

  • github.com/phpmyadmin/phpmyadmin 标签 RELEASE_5_2_3(962857e)
  • libraries/classes/Common.php 在令牌剥离之前的请求快照
  • Sanitize::removeRequestVars 仅清除 $_POST/$_GET
  • SqlController 全局 $sql_query
  • 同一固定版本的遗留项:phpmyadmin-webauthn · phpmyadmin-pmadb-central-sqli · phpmyadmin-designer-json-sqli · phpmyadmin-setup-validate
  • CWE-352

许可证

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

下载工具