网址:
摘要
文件包含和远程执行代码攻击
描述
发现了一个漏洞,攻击者可以在该漏洞中包含(查看并可能执行)服务器上的文件。
该漏洞来自代码的一部分,其中页面在phpMyAdmin中重定向和加载,以及对白名单页面的不正确测试。
除以下情况外,必须对攻击者进行身份验证:
- $ cfg [‘AllowArbitraryServer’] = true:攻击者可以指定他/她已控制的任何主机,并在phpMyAdmin上执行任意代码
- $ cfg [‘ServerDefault’] = 0:这绕过登录并运行易受攻击的代码,而无需任何身份验证
漏洞分析
查找字符串在另一个字符串中首次出现的位置mb_strpos
的解读
1 | // If we have a valid target, let's load that script instead |
- 其中blacklist:
1
2$target_blacklist = array (
'import.php', 'export.php');
不要让target等于这两个值就可以
- Core::checkPageValidity($_REQUEST[‘target’]):
代码在libraries\classes\Core.php的443~476:
1 | public static function checkPageValidity(&$page, array $whitelist = []) |
- 验证白名单(goto_whitelist):
1 | public static $goto_whitelist = array( |
故可以构造target=db_datadict.php%253f/../../../../../../../../etc/passwd(%253f可换为%3f,区别在在第几个判断中return true)
来满足所有判断条件,并进行文件读取
- %253f两次url解码后为?,此时
$_page
为db_datadict.php,在白名单中. - 此时将db_datadict.php看作一个目录,所以要多加一个../回到上一级目录.