升级至4.9.0+是修复cve-2018-12613的最有效方式,该漏洞因index.php中target参数校验被双重url解码绕过;官方已重写checkpagevalidity()方法并移除urldecode()调用。
升级到 4.9.0 或更高版本是最直接有效的修复方式
该漏洞(cve-2018-12613)在 phpmyadmin 4.8.0–4.8.1 中存在,核心问题是 index.php 对 target 参数的校验逻辑被双重 url 解码绕过。官方已在 4.9.0 版本中彻底重写 checkpagevalidity() 方法,移除了不安全的 urldecode() 调用,并强化白名单匹配逻辑。降级或打补丁不可靠,必须升级。
若无法立即升级,需手动修补 index.php 和 core.php
临时缓解的关键是阻断二次解码路径,同时收紧白名单校验:
- 定位
index.php第 465 行左右的urldecode($page)调用,直接删除或注释掉该行(它出现在checkPageValidity()的第二次校验分支中) - 确认
$target_blacklist至少包含import.php、export.php,且所有白名单页面(如db_sql.php)必须严格匹配,不允许带查询参数 - 在
checkPageValidity()函数开头增加强制截断:$page = strtok($page, '?');,确保问号及之后内容被丢弃 - 禁止
allow_url_include = On(虽 LFI 不依赖此,但可降低后续利用风险)
配置层面可快速封堵常见利用路径
Web 服务器层的限制能有效拦截典型 payload,无需修改 phpMyAdmin 源码:
- Apache:在虚拟主机或 .htaccess 中添加
RewriteCond %{QUERY_STRING} target=.*%253f [NC]+RewriteRule ^ - [F] - Nginx:在 server 块中加入
if ($args ~* "target=.*%253f") { return 403; } - 关键路径屏蔽:禁止访问
/var/lib/php/sessions/、/tmp/、/etc/等敏感目录的 HTTP 请求(通过location或Alias配置)
修复后必须验证是否仍可触发 LFI
很多修复只改了表面逻辑,但未覆盖所有调用路径。务必用真实 payload 测试:
- 访问
index.php?target=db_sql.php%253f/../../../../etc/passwd—— 应返回 404 或白屏,不能输出文件内容 - 尝试
%25253f(三次编码)和%253f%253f(双问号)变体,确认无绕过可能 - 检查 session 文件路径是否仍可通过
sess_*名称猜解并包含(如/var/lib/php/sessions/sess_xxx) - 登录态下执行 SQL 插入 PHP 代码再包含 session 文件的链式利用,也需验证失败
实际修复中最容易被忽略的是:白名单校验逻辑分散在多个位置,仅改 index.php 中一处 urldecode 不够,core.php 中的 checkPageValidity() 必须同步更新,否则攻击者仍可从其他入口触发相同逻辑。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











