UJCMS v9.7.3代码审计
字数 1136 2025-08-22 12:23:06
UJCMS v9.7.3 文件上传漏洞分析与利用
1. 漏洞概述
本文档详细分析 UJCMS v9.7.3 版本中存在的文件上传安全漏洞,包括漏洞原理、代码审计过程、利用方法以及防御建议。
2. 漏洞发现过程
2.1 初步测试
- 测试文件上传功能时发现系统阻止了
.jsp和.jspx文件的上传 - 文件上传处理接口为
/api/backend/core/web-file-upload/upload
2.2 代码审计关键点
2.2.1 文件上传处理流程
- 上传请求由
upload方法处理(约100行处) - 在125行调用
checkName函数进行文件名检查 - 227行对文件扩展名进行统一大小写转换后判断
2.2.2 黑名单过滤机制
- 使用
getFilesExtensionExcludes函数进行文件后缀检测 - 黑名单变量
filesExtensionBlacklist定义如下:private static final String[] filesExtensionBlacklist = {"jsp", "jspx", "php", "asp", "aspx", "exe", "sh", "bat", "cmd"}; - 明显缺失对
.html后缀的过滤
3. 漏洞利用方法
3.1 直接文件上传
- 可上传
.jspa等不在黑名单中的JSP变种后缀 - 虽然上传成功,但访问时会被下载而非执行(Spring框架特性)
3.2 存储型XSS
- 可上传恶意HTML文件实现存储型XSS攻击
- 原因:黑名单未包含HTML相关前端文件后缀
3.3 高级利用(理论)
- 通过上传
web.xml覆盖Tomcat配置文件实现Getshell(需进一步验证)
3.4 模板编辑功能
- 系统模板编辑功能同样存在存储型XSS漏洞
4. 代码设计缺陷分析
4.1 黑名单不一致问题
- 系统存在两个文件上传相关变量:
filesExtensionBlacklist- 过滤较少,未包含HTMLuploadExtensionBlacklist- 过滤更严格
- 这种不一致导致安全防护存在缺口
4.2 黑名单机制缺陷
- 使用黑名单而非白名单机制本身就不安全
- 无法防范未知或变种攻击(如
.jspa)
5. 修复建议
5.1 代码层面
- 统一使用白名单机制替代黑名单
- 确保所有上传点使用相同的过滤规则
- 添加对HTML等前端文件的过滤
- 增加内容类型检查而不仅是扩展名检查
5.2 配置层面
- 配置服务器禁止执行上传目录中的脚本
- 设置上传文件不可执行权限
5.3 其他安全措施
- 对上传文件进行病毒扫描
- 实现文件内容验证而不仅是扩展名检查
- 对模板编辑功能增加严格的输入过滤
6. 总结
UJCMS v9.7.3 的文件上传功能存在多处安全缺陷,主要源于:
- 不安全的黑名单机制
- 过滤规则不一致
- 对前端文件类型过滤不足
这些缺陷可导致存储型XSS、潜在RCE等安全风险,建议开发者参考上述修复建议进行改进。