Bludit cms漏洞挖掘
字数 1228 2025-08-05 00:15:28
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插件机制中常见的安全问题,通过不安全的文件下载和写入功能,攻击者可以实现远程代码执行。开发者在实现类似功能时应特别注意对外部资源的信任边界,并对所有文件操作进行严格的安全检查。