CVE-2019-6339 Drupal 远程代码执行漏洞
字数 1577 2025-08-15 21:33:22
Drupal CVE-2019-6339 远程代码执行漏洞分析及复现指南
漏洞概述
CVE-2019-6339是Drupal内容管理系统中的一个高危远程代码执行漏洞,影响Drupal核心的多个版本。该漏洞源于Drupal内置的phar stream wrapper(PHP)存在安全缺陷,允许远程攻击者通过精心构造的请求执行任意PHP代码。
受影响版本
- Drupal core 7.x系列:7.62之前的所有版本
- Drupal core 8.6.x系列:8.6.6之前的所有版本
- Drupal core 8.5.x系列:8.5.9之前的所有版本
漏洞原理
该漏洞利用了PHP的phar://协议包装器特性。当Drupal处理用户上传的文件时,如果攻击者能够控制文件路径并使其被解析为phar协议,就可以触发反序列化操作,从而导致任意代码执行。
关键点在于:
- Drupal允许用户上传文件(如头像图片)
- 攻击者可以构造包含恶意序列化数据的特殊文件
- 通过修改临时目录设置,使Drupal以phar://协议加载该文件
- PHP解析phar文件时会自动反序列化其中的元数据,触发漏洞
环境搭建
准备工作
- 安装Docker和Docker-compose
- 下载Vulhub漏洞环境:
git clone https://github.com/vulhub/vulhub.git
启动漏洞环境
cd vulhub/drupal/CVE-2019-6339/
docker-compose up -d
Drupal安装配置
- 访问
http://your-ip:8080开始安装 - 选择英文安装(English)
- 数据库选择SQLite(简化环境配置)
- 配置网站信息时,务必关闭自动更新检查
- 完成安装后确认能正常访问后台
漏洞复现步骤
1. 构造恶意图片文件
准备一个包含PHP序列化payload的图片文件(如JPG格式)。可以使用工具生成或在现有图片中嵌入恶意代码。
2. 上传恶意文件
- 访问用户编辑页面:
http://your-ip:8080/user/1/edit - 在头像上传区域上传构造好的恶意图片
- 记下图片存储路径,默认格式为:
/sites/default/files/pictures/<年-月>/<文件名>
3. 触发漏洞
- 访问文件系统设置页面:
http://your-ip:8080/admin/config/media/file-system - 在"Temporary directory"字段中输入phar协议路径,指向上传的图片:
phar://./sites/default/files/pictures/2021-01/malicious-image.jpg - 保存设置,此时漏洞将被触发
4. 执行任意命令
要执行不同命令,需要修改图片文件中的payload部分并重新上传。
漏洞修复建议
-
立即升级到安全版本:
- Drupal 7.x 升级到 7.62 或更高
- Drupal 8.6.x 升级到 8.6.6 或更高
- Drupal 8.5.x 升级到 8.5.9 或更高
-
临时缓解措施:
- 限制文件上传功能
- 禁用不必要的PHP流包装器
- 加强文件类型验证
技术细节
PHAR协议利用原理
PHAR (PHP Archive) 文件包含三部分:
- Stub - 文件头标识
- Manifest - 包含序列化的元数据
- 文件内容
当PHP通过phar://协议读取文件时,会自动解析Manifest部分并反序列化其中的数据。如果攻击者能够控制被加载的文件内容,就可以构造恶意的序列化数据实现代码执行。
Drupal特定利用路径
Drupal的漏洞触发路径特殊之处在于:
- 通过用户头像上传获取文件存储位置
- 通过系统配置界面注入phar协议路径
- 保存配置时Drupal会尝试读取该路径,触发反序列化
学习资源
建议在受控环境中练习此漏洞复现,可使用以下靶场:
- 东塔攻防世界靶场:https://labs.do-ta.com
- Vulhub提供的Docker环境
免责声明
本文档仅供安全研究和教学使用,任何未经授权的攻击行为都是非法的。在实际生产环境中发现此漏洞应立即修复,而非利用。