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协议,就可以触发反序列化操作,从而导致任意代码执行。

关键点在于:

  1. Drupal允许用户上传文件(如头像图片)
  2. 攻击者可以构造包含恶意序列化数据的特殊文件
  3. 通过修改临时目录设置,使Drupal以phar://协议加载该文件
  4. PHP解析phar文件时会自动反序列化其中的元数据,触发漏洞

环境搭建

准备工作

  1. 安装Docker和Docker-compose
  2. 下载Vulhub漏洞环境:
    git clone https://github.com/vulhub/vulhub.git
    

启动漏洞环境

cd vulhub/drupal/CVE-2019-6339/
docker-compose up -d

Drupal安装配置

  1. 访问 http://your-ip:8080 开始安装
  2. 选择英文安装(English)
  3. 数据库选择SQLite(简化环境配置)
  4. 配置网站信息时,务必关闭自动更新检查
  5. 完成安装后确认能正常访问后台

漏洞复现步骤

1. 构造恶意图片文件

准备一个包含PHP序列化payload的图片文件(如JPG格式)。可以使用工具生成或在现有图片中嵌入恶意代码。

2. 上传恶意文件

  1. 访问用户编辑页面:http://your-ip:8080/user/1/edit
  2. 在头像上传区域上传构造好的恶意图片
  3. 记下图片存储路径,默认格式为:/sites/default/files/pictures/<年-月>/<文件名>

3. 触发漏洞

  1. 访问文件系统设置页面:http://your-ip:8080/admin/config/media/file-system
  2. 在"Temporary directory"字段中输入phar协议路径,指向上传的图片:
    phar://./sites/default/files/pictures/2021-01/malicious-image.jpg
    
  3. 保存设置,此时漏洞将被触发

4. 执行任意命令

要执行不同命令,需要修改图片文件中的payload部分并重新上传。

漏洞修复建议

  1. 立即升级到安全版本:

    • Drupal 7.x 升级到 7.62 或更高
    • Drupal 8.6.x 升级到 8.6.6 或更高
    • Drupal 8.5.x 升级到 8.5.9 或更高
  2. 临时缓解措施:

    • 限制文件上传功能
    • 禁用不必要的PHP流包装器
    • 加强文件类型验证

技术细节

PHAR协议利用原理

PHAR (PHP Archive) 文件包含三部分:

  1. Stub - 文件头标识
  2. Manifest - 包含序列化的元数据
  3. 文件内容

当PHP通过phar://协议读取文件时,会自动解析Manifest部分并反序列化其中的数据。如果攻击者能够控制被加载的文件内容,就可以构造恶意的序列化数据实现代码执行。

Drupal特定利用路径

Drupal的漏洞触发路径特殊之处在于:

  1. 通过用户头像上传获取文件存储位置
  2. 通过系统配置界面注入phar协议路径
  3. 保存配置时Drupal会尝试读取该路径,触发反序列化

学习资源

建议在受控环境中练习此漏洞复现,可使用以下靶场:

  • 东塔攻防世界靶场:https://labs.do-ta.com
  • Vulhub提供的Docker环境

免责声明

本文档仅供安全研究和教学使用,任何未经授权的攻击行为都是非法的。在实际生产环境中发现此漏洞应立即修复,而非利用。

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漏洞环境: 启动漏洞环境 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协议路径,指向上传的图片: 保存设置,此时漏洞将被触发 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环境 免责声明 本文档仅供安全研究和教学使用,任何未经授权的攻击行为都是非法的。在实际生产环境中发现此漏洞应立即修复,而非利用。