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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
phpmyadmin-config-set-2fa — phpMyAdmin 5.2.3 - 高危 - 远程 - 2FA - config/set 清除双因素认证 | Kitploit
工具/GitHubGitHub/abraxas/phpmyadmin-config-set-2fa
漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试身份验证实验室与实践
GitHubabraxas/phpmyadmin-config-set-2fa

phpmyadmin-config-set-2fa

phpMyAdmin 5.2.3 - 高危 - 远程 - 2FA - config/set 清除双因素认证

查看仓库
94天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - phpmyadmin-config-set-2fa

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  phpmyadmin-config-set-2fa

phpmyadmin-config-set-2fa

类别: 权限残留 / 缺少二次验证 可达性: 远程

phpMyAdmin 5.2.3(RELEASE_5_2_3 / 962857e)- phpMyAdmin

POST index.php?route=/config/set 会写入任何允许列表中的偏好设置,包括 2fa。UserPreferences::persistOption 不做任何验证。设置 -> 两步验证在移除该因素之前仍会调用 TwoFactor::check(true)。而 /config/set 不会。

一个已登录的会话,或者能够 POST 页面令牌的 XSS/CSRF,可以发送 key=2fa 和 value=null。下一次密码登录将没有 TOTP、WebAuthn 或 Simple 提示。这是持久性剥离,而非单次请求跳过。

ID暂无 CVE
类别权限残留 / 缺少二次验证
可达性远程(已认证的 cookie 登录;需要 CSRF 令牌)
CWECWE-620
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(962857e4f63d42e38f11ff4d63f5e722018add76)
认证cookie 登录。需要 CSRF 令牌。可将 XSS 或 CSRF 升级为持久的 2FA 剥离
许可证GNU Affero GPL v3.0
实验环境仅限 127.0.0.1

攻击者能做什么

在未提供 TOTP、WebAuthn 或 Simple 确认字段的情况下,从 phpMyAdmin 账户中剥离 2FA。下一次密码登录仅需密码。以该 MySQL 用户身份获得完整 PMA 权限(SQL、用户、导出)。

权限方法 / 路径侦察 / 完整性 / 可用性实验验证或推断
将 2fa 持久化为 null 并从 pmadb 中移除第二因素已认证的 POST index.php?route=/config/set key=2fa value=null 加上有效的 token偏好存储的完整性实验验证。success:true,pmadb config_data 变为 []
在该写入后仅用密码登录新的 cookie 会话,同一 MySQL 用户登录路径的完整性实验验证。无 2fa_confirm,进入正常 UI
在当前会话保持的同时,后续登录的 2FA 消失同一处理器;persistOption 写入存储,而非实时的 two_factor_check 标志后续会话的完整性实验验证。会话 A 保持登录。会话 B 曾看到 2FA。会话 C 没有
从能够使用页面令牌进行 POST 的存储型 XSS 或 CSRF 进行链式利用同次审查中的其他残留,非本实验同源 POST 后 2FA 的完整性推断
通过设置移除 2FAPOST /preferences/two-factor 2fa_remove=1通过文档化 UI 操作 2FA 的完整性实验验证为已关闭。没有该因素时,PMA 显示确认页面,且 pmadb 中仍有 backend=simple

本残留已关闭的路径:未认证访问、跳过 MySQL 密码、操作系统 RCE、读取其他用户的 pmadb 行。我不需要残留 #1(CustomServer 签名)。我没有跳过 MySQL 密码。

同一版本固定点:WebAuthn CustomServer 残留。

我是如何发现的

在 PMASA-2025-1/2/3 之后,我固定了 5.2.3 版本。Cookie 认证,pmadb pma__userconfig。实验环境仅开启 $cfg['DBG']['simple2fa'],以便设置页面能够在没有硬件密钥的情况下注册 Simple 后端。TOTP 和 WebAuthn 位于同一个 2fa 偏好键中。

SetConfigController 接收 key 和 JSON value,并调用 Config::setUserValue。UserPreferences::persistOption 的文档说明是“不进行任何验证!”apply() 将 2fa 加入允许列表,因此该键不会作为未知偏好被丢弃。

$result = $this->config->setUserValue(null, $key, json_decode($value));

json_decode('null') 是 PHP null。随后 persistOption('2fa', null, $default) 会取消设置 config_data['2fa'],因为该路径的默认值也是 null。

设置 -> 两步验证是对照组。TwoFactorController 在 TwoFactor::check(true) 返回 true 之前不会执行 configure('')。

已记录的弯路:将设置中的 2fa_remove 视为漏洞(它仍然要求该因素);声称存在未认证访问;声称跳过了 MySQL 密码;将其视为残留 #1(CustomServer);反向 shell。都是表演。

实验环境

python3 phpmyadmin-config-set-2fa-Abraxas-Labs.py
# or: cd lab && ./run.sh

目标仅限 http://127.0.0.1:19280。Compose 项目 phpmyadmin-config-set-2fa。固定 RELEASE_5_2_3。run.sh 将该标签复制或克隆到 lab/src/ 以供镜像使用。运行后堆栈会拆除。

设置页面注册了 Simple 2FA。第二个浏览器访问了 2fa_confirm 页面。在没有该因素的情况下 POST 2fa_remove 仍停留在确认 UI,并在 pmadb 中留下 backend=simple。随后 POST /config/set 返回 success:true,pmadb 变为 [],下一次登录进入正常 UI。

SUCCESS phpmyadmin-config-set-2fa enroll=simple ui-remove-blocked=yes config-set-cleared=yes next-login-password-only=yes PMA-CONFIG-SET-2FA-WITNESS

修复方案

在 /config/set 上拒绝 2fa(以及其他认证键)。在任何 2FA 变更之前要求 TwoFactor::check(true)。保持设置路径为唯一写入者。

参考资料

  • github.com/phpmyadmin/phpmyadmin 标签 RELEASE_5_2_3(962857e4f63d42e38f11ff4d63f5e722018add76)
  • libraries/classes/Controllers/Config/SetConfigController.php
  • libraries/classes/Config/UserPreferences.php
  • 同一版本固定点:PMA-5.2.3-WebAuthn-2FA
  • CWE-620

许可证

GNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境。无担保。

下载工具