phpMyAdmin 4.6.x 存在多个高危SQL注入漏洞:central_columns.lib.php中$db参数未校验致注入;tbl_find_replace.php滥用preg_replace(/e)执行任意代码;DatabaseSearchController.php搜索字段未参数化。官方修复于4.6.3+,临时加固需白名单校验$db、禁用/e修饰符、对criteria值严格转义或清洗。
phpmyadmin 4.6.x 版本(特别是 4.6.2)存在多个已确认的 sql 注入点,其中 central_columns.lib.php 和 tbl_find_replace.php 是最常被利用的入口。官方已在 4.6.3+ 版本中修复,但若无法升级,必须手动加固。
central_columns.lib.php 中的 $db 参数未转义
该文件中 PMA_getCentralColumnsCount、PMA_deleteColumnsFromList 等函数直接将用户传入的 $db 变量拼入 SQL 查询,且未做任何过滤或参数化处理。
- 攻击者可通过构造恶意
db参数(如test%27%20UNION%20SELECT%201,2,3--)触发注入 - 修复方式不是简单加
mysqli_real_escape_string(),因为该变量在调用前可能已被 URL 解码多次,需在进入 SQL 构建前统一做白名单校验 - 推荐做法:在
libraries/central_columns.lib.php开头加入强制校验逻辑:if (!preg_match('/^[a-zA-Z0-9$_#@$][a-zA-Z0-9$_#@$]*$/', $db)) { die('Invalid database name.'); } - 注意:MySQL 允许数据库名含反引号和横线,但 phpMyAdmin 自身不支持这类命名,白名单应严格限制为字母、数字、下划线、美元符
tbl_find_replace.php 中 useRegex + preg_replace(/e) 执行任意代码
这不是传统 SQL 注入,而是通过正则引擎执行 PHP 代码,但其输入源(find 和 replacewith)来自用户 POST,且最终会拼进 SQL 查询上下文,常被组合利用。
- 漏洞本质是
preg_replace的/e修饰符被绕过(如0/e\0截断),导致$replacewith被当 PHP 代码执行 - 4.6.2 中该功能未禁用,且默认开启;即使关闭正则选项,
find字段仍可能被带入后续 SQL - 立即缓解:注释掉
tbl_find_replace.php中对PMA_TableSearch::getReplaceReview()的调用,或在调用前强制清空$_POST['useRegex'] - 深层修复:删除所有含
preg_replace+/e的代码块,改用preg_replace_callback;PHP 7.4+ 已移除此修饰符,但 4.6.2 运行于 PHP 5.5–7.2 环境,必须人工清理
SearchController 中的搜索字段未绑定参数
CVE-2020-26935 影响 4.9.6 之前的所有 4.x 分支,包括 4.6.x;其核心是 libraries/controllers/DatabaseSearchController.php 对 $_POST['criteria'] 直接拼接进 WHERE 子句。
- 典型 PoC:
criteria[0]=1' AND (SELECT SLEEP(5))='1,可盲注延时验证 - 该控制器未使用 PDO 或 MySQLi 的预处理机制,而是依赖老旧的
mysql_escape_string(已废弃且不兼容 UTF-8 多字节) - 修复必须重写 SQL 构建逻辑:提取搜索条件后,对每个字段值使用
mysqli_real_escape_string($link, $value),并确保$link是当前有效连接句柄 - 更稳妥的做法是替换整个搜索逻辑为基于
LIKE ?的参数化查询,但需同步修改前端传参结构,风险较高;临时方案可在 SQL 拼接前加mb_ereg_replace('[^a-zA-Z0-9_%,.\s]', '', $value)做字符清洗
真正棘手的是这些注入点往往嵌套在权限检查之后——比如 central_columns 功能仅对拥有“创建数据库”权限的用户开放,但一旦登录,攻击者就能直接触达。所以补丁之外,务必关闭对外网的 phpMyAdmin 访问,或用 Web 服务器层(如 Nginx 的 allow/deny)限制 IP 范围。别信“我只用弱口令测试环境”,历史漏洞表明,只要暴露,就会被自动扫描器盯上。
立即学习“PHP免费学习笔记(深入)”;



















