Public-CMS漏洞分析
字数 1266 2025-08-24 07:48:33
Public-CMS漏洞分析与利用教学文档
1. 漏洞概述
Public-CMS V4.0.202302.c版本存在多个安全漏洞,包括:
- 任意文件上传漏洞(可导致目录穿越)
- 代码执行漏洞
- 任意文件替换漏洞
这些漏洞可组合利用,最终可能导致远程代码执行(RCE)。
2. 任意文件上传漏洞
2.1 漏洞详情
系统在处理文件上传时未对上传路径进行充分校验,攻击者可通过修改文件名实现目录穿越,将文件上传到服务器任意位置。
2.2 漏洞利用方法
- 抓取文件上传请求包
- 修改文件后缀为
-site.zip - 通过此方式可实现目录穿越,上传文件到任意位置
2.3 漏洞代码分析
漏洞位于src/main/java/com/publiccms/controller/admin/sys/SysSiteAdminController.java文件中。
关键问题:
- 未对上传路径进行任何校验
- 仅要求文件名以
-size.zip结尾 - 文件路径直接拼接后写入,导致目录穿越
2.4 修复方案
新版已对目录穿越进行了限制,添加了路径校验逻辑。
3. 代码执行漏洞
3.1 漏洞详情
系统提供脚本执行功能,虽然对输入参数进行了过滤,但仍存在潜在风险。
3.2 漏洞代码分析
执行流程:
-
首先检查传入的脚本名称:
- 是否为空
- 是否为以下四个预设脚本之一:
sync.batsync.shbackupdb.batbackupdb.sh
-
如果是
backup脚本:- 获取数据库配置信息
- 将配置信息写入
cmdarray
-
如果不是
backup脚本:- 检查输入参数是否符合正则匹配要求
- 将参数写入
cmdarray的第一位
-
检查脚本是否存在:
- 存在:将脚本路径写入
cmdarray第一位 - 不存在:创建新脚本后再写入路径
- 存在:将脚本路径写入
-
最终使用
Runtime.getRuntime().exec()执行命令
3.3 限制条件
- 脚本名称固定为四个预设值之一
- 前端只能输入脚本名称和参数
- 参数内容经过过滤
- 无法直接修改脚本内容
4. 任意文件替换漏洞
4.1 漏洞详情
系统在文件替换功能中未检测../路径遍历序列,可能导致任意文件被替换。
4.2 漏洞代码分析
查看替换方法发现:
- 未对
../进行检测 - 攻击者可能通过路径遍历替换系统关键文件
5. 组合利用思路
虽然每个漏洞单独利用存在限制,但可以组合利用:
- 利用任意文件上传漏洞上传恶意脚本到特定位置
- 通过任意文件替换漏洞替换预设脚本
- 利用代码执行功能执行被替换的恶意脚本
- 最终实现远程代码执行
6. 防御建议
- 对所有文件操作进行严格的路径校验
- 禁止使用
../等路径遍历序列 - 对上传文件类型和内容进行严格限制
- 对脚本执行功能增加更严格的输入验证
- 使用白名单机制限制可执行脚本
- 及时更新到已修复漏洞的最新版本
7. 总结
Public-CMS V4.0.202302.c版本存在多个高危漏洞,攻击者可组合利用这些漏洞实现远程代码执行。建议用户及时升级到修复版本,并按照上述防御建议加强系统安全配置。