Drupal 远程代码执行漏洞(CVE-2019-6339)

Drupal 远程代码执行漏洞(CVE-2019-6339)

一、漏洞介绍

Drupal core是Drupal社区所维护的一套用PHP语言开发的免费、开源的内容管理系统。

Drupal core 7.62之前的7.x版本、8.6.6之前的8.6.x版本和8.5.9之前的8.5.x版本中的内置phar stream wrapper(PHP)存在远程代码执行漏洞。远程攻击者可利用该漏洞执行任意的php代码。

二、漏洞危害

远程代码执行。

三、漏洞验证

环境搭建:

实验环境 系统 IP地址
攻击机 win10 192.168.18.7
靶机 win10 192.168.18.7:8088

这里我使用Vulhub搭建环境:
执行如下命令启动drupal 8.5.0的环境: bash docker-compose up -d环境启动后,访问
http://your-ip:8088/(这里我修改了配置文件,默认是8080端口)
将会看到drupal的安装页面,一路默认配置下一步安装。因为没有mysql环境,所以安装的时候可以选择sqlite数据库。
安装成功后如图所示:
Drupal 远程代码执行漏洞(CVE-2019-6339)

如下图所示,先使用管理员用户上传头像,头像图片为构造好的 PoC,参考thezdi/PoC的PoC。
Drupal 远程代码执行漏洞(CVE-2019-6339)

Drupal 的图片默认存储位置为 /sites/default/files/pictures/<YYYY-MM>/,默认存储名称为其原来的名称,所以之后在利用漏洞时,可以知道上传后的图片的具体位置。

访问 http://127.0.0.1:8088/admin/config/media/file-system,在 Temporary directory 处输入之前上传的图片路径, phar://./sites/default/files/pictures/2020-07/blog-ZDI-CAN-7232-cat.jpg,保存后将触发该漏洞。如下图所示,触发成功。
Drupal 远程代码执行漏洞(CVE-2019-6339)
看一下POC,
Drupal 远程代码执行漏洞(CVE-2019-6339)
修改一下执行命令,比如ls -al,此时是6个字节数,要把s对应的字节数目改成6:
Drupal 远程代码执行漏洞(CVE-2019-6339)

在Drupal的机制中,设定了这样一条规则:
用户上传的图片文件名将会被保留,如果出现文件名相同的情况,那么文件名后面就会被跟上_0,_1依次递增。
Drupal 远程代码执行漏洞(CVE-2019-6339)

再次上传,在 Temporary directory 处输入新的上传的图片路径, phar://./sites/default/files/pictures/2020-07/blog-ZDI-CAN-7232-cat_0.jpg,触发成功。
Drupal 远程代码执行漏洞(CVE-2019-6339)Drupal 远程代码执行漏洞(CVE-2019-6339)

遗留问题:尝试反弹shell失败。

四、漏洞修复

目前厂商已发布升级补丁以修复漏洞,补丁获取链接:
https://www.drupal.org/sa-core-2019-002

参考链接:
https://vulhub.org/#/environments/drupal/CVE-2019-6339/
https://paper.seebug.org/897/