一、漏洞背景
phpMyAdmin是一套开源的、基于Web的MySQL数据库管理工具,它能够帮助用户通过Web界面进行数据库的创建、删除、修改以及执行SQL脚本命令等操作。然而,在phpMyAdmin 4.8.1版本中,存在一个远程文件包含漏洞,使得攻击者能够利用该漏洞包含并执行服务器上的任意文件。
二、漏洞原理
-
文件包含逻辑:
-
phpMyAdmin的index.php中存在一处文件包含逻辑,通常用于加载不同的脚本或页面。
-
在正常情况下,该逻辑会对传入的参数进行严格的检查,以防止恶意文件的包含
-
// If we have a valid target, let's load that script instead
if (! empty($_REQUEST['target'])
&& is_string($_REQUEST['target'])
&& ! preg_match('/^index/', $_REQUEST['target'])
&& ! in_array($_REQUEST['target'], $target_blacklist)
&& Core::checkPageValidity($_REQUEST['target'])
) {
include $_REQUEST['target'];
exit;
}
-
二次编码绕过检查:
-
攻击者通过二次编码的方式,将恶意参数绕过检查。
-
具体来说,攻击者会对目标文件路径中的特定字符(如问号“?”)通过urldeco
-