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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
phpmyadmin-webauthn — phpMyAdmin 5.2.3 - 高危 - 远程 - 2FA 跳过 - WebAuthn 验证流程可被跳过 | Kitploit
工具/GitHubGitHub/abraxas/phpmyadmin-webauthn
漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试身份验证实验室与实践
GitHubabraxas/phpmyadmin-webauthn

phpmyadmin-webauthn

phpMyAdmin 5.2.3 - 高危 - 远程 - 2FA 跳过 - WebAuthn 验证流程可被跳过

查看仓库
229天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - phpmyadmin-webauthn

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

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

phpmyadmin-webauthn

类别: 2FA 绕过 影响范围: 远程

phpMyAdmin 5.2.3(标签 RELEASE_5_2_3)。默认 tarball。web-auth/webauthn-lib 属于 suggest / require-dev。composer install --no-dev 不会安装它。因此 createServer 使用 CustomServer。该类会解析 response.signature(该字段必须存在且能解码),但从不进行 COSE 验证。它从不使用已存储的 credentialPublicKey。产品自带的 CustomServerTest 接受一个没有公钥的断言。

结构性检查是真实有效的:凭据 id 在 allowCredentials 中、clientData.type == webauthn.get、challenge 与会话匹配、origin 主机、rpIdHash、user-present。签名被解析后即被忽略。在通过 MySQL 密码之后,一个仍然匹配上述字段的垃圾 WebAuthn 签名即可获得完整的 phpMyAdmin 会话。那就是数据库。如果你确实安装了 web-auth/webauthn-lib,你使用的是 WebauthnLibServer,则不存在此漏洞。

ID暂无 CVE
类别2FA 绕过 / 缺少签名验证
影响范围远程(cookie 登录,随后 WebAuthn 被跳过)
CWECWE-347、CWE-287
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。默认 tarball / composer install --no-dev
认证Cookie 登录(MySQL 密码),随后 WebAuthn 被跳过
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1:18080

攻击者能做什么

他们仍然需要 MySQL 密码(cookie 登录)。在获得该密码后,他们 POST webauthn_request_response,携带匹配的 challenge、origin 主机、rpIdHash、user-present、已注册的凭据 id,以及一个垃圾签名。他们便进入正常 UI。2FA 被绕过。那就是数据库(SQL、用户、导出),而不是主机上的 PHP shell。

如果你确实安装了 web-auth/webauthn-lib,你使用的是 WebauthnLibServer,则不存在此漏洞。

权限方法 / 路径实验验证或推断
在没有认证器的情况下完成 WebAuthn 2FA(第二因素完整性)密码后 POST webauthn_request_response,垃圾签名实验验证。still_2fa=False landed=True
以该 MySQL 用户身份获得完整 PMA(SQL 主机的完整性与侦察)同一会话实验验证。存在主页 UI 标记
跳过 MySQL 密码未认证 POST实验验证已关闭。停留在登录页
在安装了 web-auth/webauthn-lib 的情况下进行同样的绕过WebauthnLibServer已关闭。不是此遗留问题
操作系统 RCE / 反弹 shell此遗留问题已关闭

此遗留问题已关闭的方面:未认证 PMA、主机上的 PHP shell,以及将实际安装了 web-auth/webauthn-lib 的 tarball 视为本漏洞。

我是如何发现的

我阅读了 createServer,然后阅读了 parseAndValidateAssertionResponse,接着阅读了那个不传入公钥的单元测试。结构性检查是真实有效的。签名被解析后即被忽略。

走过的弯路:在没有先前密码会话的情况下 POST WebAuthn JSON;签名未通过结构性检查;Webauthn\Server 仍然存在(服务器类错误);challenge 不来自此会话;origin 主机不匹配;user-present 标志未设置;凭据 id 不在 allowCredentials 中。

实验室 Dockerfile 复制 5.2.3,执行 composer install --no-dev,然后删除 vendor/web-auth,以便让 CustomServer 生效。如果 Webauthn\Server 存在,最后的 php -r 会以 1 退出。init.sql 为 appuser 注册 WebAuthn 2FA,且无需硬件密钥。PoC 会 POST 签名 not-a-real-signature-PMA-WEBAUTHN-BYPASS。

实验环境

将固定版本克隆到 Dockerfile 旁边,然后运行:

cd lab
git clone --depth 1 --branch RELEASE_5_2_3 https://github.com/phpmyadmin/phpmyadmin.git src
./run.sh

或在该克隆之后从包根目录执行:

python3 phpmyadmin-webauthn-Abraxas-Labs.py

仅限回环地址:http://127.0.0.1:18080。Compose 项目 pma-webauthn-lab。固定 RELEASE_5_2_3。不要发布 src/。见证 PMA-WEBAUTHN-BYPASS。

SUCCESS PMA-WEBAUTHN-BYPASS WebAuthn 2FA accepted with garbage signature

修复方案

使用存储的 COSE 公钥验证 authenticatorData || SHA-256(clientDataJSON);绑定 userHandle;强制执行 signCount。将 web-auth/webauthn-lib 设为真实依赖并删除 CustomServer,或在库缺失时采用失败关闭(fail closed)策略。在此之前,请禁用 WebAuthn 双因素认证,或不要暴露此 phpMyAdmin 实例。

参考资料

  • github.com/phpmyadmin/phpmyadmin 标签 RELEASE_5_2_3
  • Plugins\TwoFactor\WebAuthn::createServer
  • CustomServer::parseAndValidateAssertionResponse
  • 同一版本遗留问题:phpmyadmin-pmadb-central-sqli · phpmyadmin-designer-json-sqli · phpmyadmin-setup-validate · phpmyadmin-csrf-sql
  • CWE-347 · CWE-287

许可证

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

下载工具