CVE-2017-6920 Drupal远程代码执行漏洞

一.Drupal介绍:

Drupal 是一个由Dries Buytaert创立的自由开源的内容管理系统,用PHP语言写成。在业界Drupal常被视为内容管理框架(CMF),而非一般意义上的内容管理系统(CMS)。

二.漏洞分析:

CVE-2017-6920是Drupal Core的YAML解析器处理不当所导致的一个远程代码执行漏洞,影响8.x的Drupal Core

在yaml.php中存在以下decode函数的调用

CVE-2017-6920 Drupal远程代码执行漏洞_第1张图片

所以需要在yaml类所在的文件中找decode函数,此decode函数中调用了静态方法getSerializer()函数

CVE-2017-6920 Drupal远程代码执行漏洞_第2张图片

此方法说明此时应用会判断用什么类来解析yaml数据,如果存在yaml扩展,就调用yamlpecl来处理,否则就使用yamlsymfony类来处理,此时要寻找的漏洞点

需要满足调用了yaml类的decode函数并且传给decode函数的入口参数必须是我们可以控制的,所以需要去找这样的函数

在core/modules/config/src/Form/ConfigSingleImportForm.php中存在decode函数的调用

CVE-2017-6920 Drupal远程代码执行漏洞_第3张图片

 这里调用了$form_stare的getValue()方法,这里要求我们必须熟悉drupal这个框架,知识储备:

在处理表单时,有3个变量非常重要。

第一个就是$form_id,它包含了一个标识表单的字符串。

第二个就是$form,它是一个描述表单的结构化数组。

第三个就是$form_state,它包含了表单的相关信息,比如表单的值以及当表单处理完成时应该发生什么。

drupal_get_form()在开始时,首先会初始化$form_state。

说明$form_state变量将会存储我们在表单中提交的值,那么getValue是干啥的,我们继续跟进一下,在FormStateInterface.php中声明了getvalue函数的定义,具体的方法体在FormStateInterface.php中

CVE-2017-6920 Drupal远程代码执行漏洞_第4张图片

此文件继承了FormStateInterface接口,并且使用了FormStateValuesTrait,此时又需要了解需要学trait

Trait是为类似PHP 的单继承语言而准备的一种代码复用机制。Trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用method。

CVE-2017-6920 Drupal远程代码执行漏洞_第5张图片

在FormStateValuesTrait.php中实现了getvalue()函数的方法体,在getvalue()函数中,将会调用NestedArray的getvalue函数,将会把我们之前"import"键所对应的值返回,即此时yaml::decode就接收到我们传递过去的payload了

CVE-2017-6920 Drupal远程代码执行漏洞_第6张图片

三:Drupal 环境搭建教程:

https://jingyan.baidu.com/album/c843ea0ba5080977921e4a65.html?picindex=5

https://vulhub.org/#/environments/drupal/CVE-2017-6920/


四:漏洞复现:

1.登录一个管理员账号

2.访问http://127.0.0.1:8080/admin/config/development/configuration/single/import

3.如下图所示,Configuration type选择Simple configuration,Configuration name任意填写,Paste your configuration here中填写PoC如下:

!php/object "O:24:\"GuzzleHttp\\Psr7\\FnStream\":2:{s:33:\"\0GuzzleHttp\\Psr7\\FnStream\0methods\";a:1:{s:5:\"close\";s:7:\"phpinfo\";}s:9:\"_fn_close\";s:7:\"phpinfo\";}"


CVE-2017-6920 Drupal远程代码执行漏洞_第7张图片


CVE-2017-6920 Drupal远程代码执行漏洞_第8张图片

4.点击Import后可以看到漏洞触发成功,弹出phpinfo页面。


CVE-2017-6920 Drupal远程代码执行漏洞_第9张图片


参考:https://www.520mwx.com/view/43584

https://vulhub.org/#/environments/drupal/CVE-2017-6920/

你可能感兴趣的:(CVE-2017-6920 Drupal远程代码执行漏洞)