拿WordPress开刀——点亮代码审计技能树(二)
字数 1849 2025-08-25 22:58:40

WordPress代码审计实战:文件删除与路径穿越漏洞分析

1. CVE-2018-12895: 认证文件删除漏洞

1.1 漏洞背景

WordPress媒体功能组件在处理上传文件时存在安全缺陷,允许认证用户(如作者权限)删除服务器上的任意文件。

1.2 漏洞原理

1.2.1 WordPress媒体功能组件划分

WordPress媒体功能可分为四个关键组件:

  1. 过滤组件:负责清理上传文件及文件名
  2. 文件组件:将文件移动到上传目录
  3. Meta组件:生成并存储文件元信息
  4. 数据库组件:存储文件相关信息

1.2.2 Meta组件漏洞细节

当用户上传图片时:

  1. 文件被移动到wp-content/uploads目录
  2. WordPress在wp_postmeta表中创建元条目,包含_wp_attached_file等关键信息

漏洞存在于edit_post()函数中,该函数:

  • 直接继承$_POST数组中的变量
  • 允许用户修改任意元条目为任意值
  • 未验证修改的元条目内容

1.2.3 漏洞利用链

  1. 攻击者修改_wp_attached_file元条目为任意文件路径
  2. WordPress信任该值并直接删除指定文件
  3. 导致任意文件删除

1.3 漏洞利用

1.3.1 利用步骤

  1. 获取作者权限账户
  2. 通过修改_wp_attached_file元数据
  3. 触发文件删除操作

1.3.2 典型攻击场景

删除wp-config.php文件:

  1. WordPress检测到配置文件丢失
  2. 系统进入安装模式
  3. 攻击者可重新配置数据库连接
  4. 获取管理员权限

1.4 影响与限制

影响

  • 可删除关键系统文件
  • 导致权限提升
  • 可控制整个WordPress安装

限制

  • 删除配置文件会导致数据丢失
  • 容易被管理员察觉
  • 无法保留原有数据库内容

2. CVE-2019-8943: 认证路径穿越与本地文件包含漏洞

2.1 漏洞背景

WordPress图像裁剪功能中存在路径穿越漏洞,结合本地文件包含漏洞可实现任意代码执行。

2.2 漏洞原理

2.2.1 图像裁剪流程

  1. 文件管理组件将图像移至上传目录
  2. 创建数据库元信息索引
  3. 裁剪时获取图像ID和对应_wp_attached_file元数据
  4. 图像编辑组件处理并保存新图像

2.2.2 关键漏洞点

  1. 元数据控制:通过edit_post()漏洞控制_wp_attached_file
  2. 路径拼接缺陷
    • WordPress尝试两种方式加载图像:
      • 直接查找wp-content/uploads/[可控文件名]
      • 从URL下载https://target.com/wp-content/uploads/[可控文件名]
    • 拼接过程无路径穿越过滤
  3. 文件保存缺陷
    • 保存时仅添加cropped-前缀
    • 不验证最终路径
    • 允许路径穿越

2.2.3 漏洞利用技巧

  1. 使用evil.jpg?shell.php格式:
    • HTTP请求会忽略?后内容
    • 但保存时会附加.jpg扩展名
  2. 使用路径穿越:
    • evil.jpg?/../../evil.jpg
    • 可将文件写入任意目录

2.3 漏洞利用

2.3.1 利用步骤

  1. 控制_wp_attached_file元数据
  2. 构造恶意路径穿越payload
  3. 触发图像裁剪功能
  4. 将含恶意代码的图像写入可访问目录
  5. 结合LFI执行代码

2.3.2 高级利用技术

  1. 在图像EXIF元数据中注入PHP代码
  2. 利用路径穿越写入web可访问目录
  3. 通过LFI执行恶意代码

2.4 影响与优势

优势

  • 比文件删除更隐蔽
  • 不破坏站点数据
  • 可实现持久化访问

影响

  • 可实现任意代码执行
  • 完全控制服务器
  • 难以检测

3. 防御建议

3.1 通用防御措施

  1. 及时更新WordPress核心
  2. 最小化用户权限
  3. 实施文件完整性监控

3.2 针对Meta组件漏洞

  1. 验证所有元数据修改
  2. 实施严格的输入过滤
  3. 对敏感元数据操作进行权限检查

3.3 针对路径穿越漏洞

  1. 规范化所有文件路径
  2. 限制文件操作目录
  3. 验证文件名中的特殊字符
  4. 实施严格的文件扩展名检查

4. 总结

这两个漏洞展示了WordPress核心中复杂的安全问题:

  1. 信任边界问题:过度信任来自数据库和用户输入的数据
  2. 组件间通信缺陷:组件间缺乏充分的数据验证
  3. 安全链条断裂:单个组件的安全假设被其他组件破坏

通过深入理解这些漏洞,安全研究人员可以:

  1. 开发更有效的代码审计方法
  2. 识别类似架构中的潜在漏洞
  3. 设计更安全的Web应用程序框架
WordPress代码审计实战:文件删除与路径穿越漏洞分析 1. CVE-2018-12895: 认证文件删除漏洞 1.1 漏洞背景 WordPress媒体功能组件在处理上传文件时存在安全缺陷,允许认证用户(如作者权限)删除服务器上的任意文件。 1.2 漏洞原理 1.2.1 WordPress媒体功能组件划分 WordPress媒体功能可分为四个关键组件: 过滤组件 :负责清理上传文件及文件名 文件组件 :将文件移动到上传目录 Meta组件 :生成并存储文件元信息 数据库组件 :存储文件相关信息 1.2.2 Meta组件漏洞细节 当用户上传图片时: 文件被移动到 wp-content/uploads 目录 WordPress在 wp_postmeta 表中创建元条目,包含 _wp_attached_file 等关键信息 漏洞存在于 edit_post() 函数中,该函数: 直接继承 $_POST 数组中的变量 允许用户修改任意元条目为任意值 未验证修改的元条目内容 1.2.3 漏洞利用链 攻击者修改 _wp_attached_file 元条目为任意文件路径 WordPress信任该值并直接删除指定文件 导致任意文件删除 1.3 漏洞利用 1.3.1 利用步骤 获取作者权限账户 通过修改 _wp_attached_file 元数据 触发文件删除操作 1.3.2 典型攻击场景 删除 wp-config.php 文件: WordPress检测到配置文件丢失 系统进入安装模式 攻击者可重新配置数据库连接 获取管理员权限 1.4 影响与限制 影响 : 可删除关键系统文件 导致权限提升 可控制整个WordPress安装 限制 : 删除配置文件会导致数据丢失 容易被管理员察觉 无法保留原有数据库内容 2. CVE-2019-8943: 认证路径穿越与本地文件包含漏洞 2.1 漏洞背景 WordPress图像裁剪功能中存在路径穿越漏洞,结合本地文件包含漏洞可实现任意代码执行。 2.2 漏洞原理 2.2.1 图像裁剪流程 文件管理组件将图像移至上传目录 创建数据库元信息索引 裁剪时获取图像ID和对应 _wp_attached_file 元数据 图像编辑组件处理并保存新图像 2.2.2 关键漏洞点 元数据控制 :通过 edit_post() 漏洞控制 _wp_attached_file 值 路径拼接缺陷 : WordPress尝试两种方式加载图像: 直接查找 wp-content/uploads/[可控文件名] 从URL下载 https://target.com/wp-content/uploads/[可控文件名] 拼接过程无路径穿越过滤 文件保存缺陷 : 保存时仅添加 cropped- 前缀 不验证最终路径 允许路径穿越 2.2.3 漏洞利用技巧 使用 evil.jpg?shell.php 格式: HTTP请求会忽略 ? 后内容 但保存时会附加 .jpg 扩展名 使用路径穿越: 如 evil.jpg?/../../evil.jpg 可将文件写入任意目录 2.3 漏洞利用 2.3.1 利用步骤 控制 _wp_attached_file 元数据 构造恶意路径穿越payload 触发图像裁剪功能 将含恶意代码的图像写入可访问目录 结合LFI执行代码 2.3.2 高级利用技术 在图像EXIF元数据中注入PHP代码 利用路径穿越写入web可访问目录 通过LFI执行恶意代码 2.4 影响与优势 优势 : 比文件删除更隐蔽 不破坏站点数据 可实现持久化访问 影响 : 可实现任意代码执行 完全控制服务器 难以检测 3. 防御建议 3.1 通用防御措施 及时更新WordPress核心 最小化用户权限 实施文件完整性监控 3.2 针对Meta组件漏洞 验证所有元数据修改 实施严格的输入过滤 对敏感元数据操作进行权限检查 3.3 针对路径穿越漏洞 规范化所有文件路径 限制文件操作目录 验证文件名中的特殊字符 实施严格的文件扩展名检查 4. 总结 这两个漏洞展示了WordPress核心中复杂的安全问题: 信任边界问题 :过度信任来自数据库和用户输入的数据 组件间通信缺陷 :组件间缺乏充分的数据验证 安全链条断裂 :单个组件的安全假设被其他组件破坏 通过深入理解这些漏洞,安全研究人员可以: 开发更有效的代码审计方法 识别类似架构中的潜在漏洞 设计更安全的Web应用程序框架