Bludit cms漏洞挖掘
字数 1228 2025-08-05 00:15:28

Bludit CMS 后台RCE漏洞分析与利用

漏洞概述

Bludit CMS存在一个后台远程代码执行(RCE)漏洞,攻击者可以通过插件下载功能实现任意文件写入,最终获取服务器控制权限。该漏洞利用链涉及多个关键点,包括插件下载、文件写入和Webhook触发机制。

环境准备

  • Bludit CMS源码:https://bludit.com/
  • 系统特点:不依赖数据库,数据以JSON形式存储在文件中

漏洞分析

初始发现

  1. 系统使用JSON文件存储数据,而非传统数据库
  2. edit-category/general路由中可以修改数据并写入文件
  3. 文件写入处理存在潜在安全问题:
    • 直接将$_POST整个数组传入
    • 对部分参数进行strip_tags处理
    • 写入时拼接defined('BLUDIT')or die('xxx')

限制因素

  1. 几乎所有PHP文件都包含defined('BLUDIT')or die('xxx')检查
  2. 此常量仅在入口文件中声明
  3. 无法直接通过文件写入实现代码执行,因为没有文件包含漏洞

插件机制分析

  1. 后台提供插件安装功能
  2. 插件存储在bl-plugins文件夹
  3. 通过activate方法加载插件
  4. admin.php文件包含插件并实例化插件类
  5. site.php会调用已激活插件的beforeall方法

漏洞利用

利用步骤

  1. 寻找可利用插件

    • 找到一个可以下载文件的插件
    • 插件中的downloadfiles方法存在漏洞
  2. 文件下载机制

    • 使用TCP::download方法从URL获取内容
    • 将内容写入目标文件
    • 自动解压到目标文件所在目录
  3. 构造恶意压缩包

    • 在VPS上放置包含WebShell的压缩包
    • 修改插件的source参数指向恶意服务器
  4. 触发漏洞

    • 调用save方法保存配置
    • 触发trywebhook将webhook写入配置文件
    • 访问对应webhook路由执行插件的beforeall方法
    • 导致恶意文件被下载并解压

具体利用过程

  1. 在后台找到有文件下载功能的插件
  2. 修改插件的source参数为攻击者控制的服务器地址
  3. 服务器上放置包含WebShell的压缩包(如包含PHP后门的zip文件)
  4. 保存插件配置,触发webhook写入
  5. 访问webhook路由,触发文件下载和解压
  6. 访问解压后的WebShell获取系统权限

防御措施

  1. 输入验证

    • 对插件下载源进行严格白名单验证
    • 禁止从不可信源下载文件
  2. 文件操作安全

    • 限制文件写入目录
    • 对解压操作进行安全检查
  3. 权限控制

    • 加强后台权限验证
    • 实现操作审计日志
  4. 代码安全

    • 避免直接使用用户输入作为文件操作参数
    • 对插件系统进行沙箱隔离

总结

该漏洞展示了CMS插件机制中常见的安全问题,通过不安全的文件下载和写入功能,攻击者可以实现远程代码执行。开发者在实现类似功能时应特别注意对外部资源的信任边界,并对所有文件操作进行严格的安全检查。

Bludit CMS 后台RCE漏洞分析与利用 漏洞概述 Bludit CMS存在一个后台远程代码执行(RCE)漏洞,攻击者可以通过插件下载功能实现任意文件写入,最终获取服务器控制权限。该漏洞利用链涉及多个关键点,包括插件下载、文件写入和Webhook触发机制。 环境准备 Bludit CMS源码:https://bludit.com/ 系统特点:不依赖数据库,数据以JSON形式存储在文件中 漏洞分析 初始发现 系统使用JSON文件存储数据,而非传统数据库 在 edit-category/general 路由中可以修改数据并写入文件 文件写入处理存在潜在安全问题: 直接将 $_POST 整个数组传入 对部分参数进行 strip_tags 处理 写入时拼接 defined('BLUDIT')or die('xxx') 头 限制因素 几乎所有PHP文件都包含 defined('BLUDIT')or die('xxx') 检查 此常量仅在入口文件中声明 无法直接通过文件写入实现代码执行,因为没有文件包含漏洞 插件机制分析 后台提供插件安装功能 插件存储在 bl-plugins 文件夹 通过 activate 方法加载插件 admin.php 文件包含插件并实例化插件类 site.php 会调用已激活插件的 beforeall 方法 漏洞利用 利用步骤 寻找可利用插件 : 找到一个可以下载文件的插件 插件中的 downloadfiles 方法存在漏洞 文件下载机制 : 使用 TCP::download 方法从URL获取内容 将内容写入目标文件 自动解压到目标文件所在目录 构造恶意压缩包 : 在VPS上放置包含WebShell的压缩包 修改插件的 source 参数指向恶意服务器 触发漏洞 : 调用 save 方法保存配置 触发 trywebhook 将webhook写入配置文件 访问对应webhook路由执行插件的 beforeall 方法 导致恶意文件被下载并解压 具体利用过程 在后台找到有文件下载功能的插件 修改插件的 source 参数为攻击者控制的服务器地址 服务器上放置包含WebShell的压缩包(如包含PHP后门的zip文件) 保存插件配置,触发webhook写入 访问webhook路由,触发文件下载和解压 访问解压后的WebShell获取系统权限 防御措施 输入验证 : 对插件下载源进行严格白名单验证 禁止从不可信源下载文件 文件操作安全 : 限制文件写入目录 对解压操作进行安全检查 权限控制 : 加强后台权限验证 实现操作审计日志 代码安全 : 避免直接使用用户输入作为文件操作参数 对插件系统进行沙箱隔离 总结 该漏洞展示了CMS插件机制中常见的安全问题,通过不安全的文件下载和写入功能,攻击者可以实现远程代码执行。开发者在实现类似功能时应特别注意对外部资源的信任边界,并对所有文件操作进行严格的安全检查。