JAVA代码审计-JEECG快速开发平台(一)
字数 1487 2025-08-29 08:32:00
JEECG快速开发平台代码审计与漏洞分析
0x00 平台概述
JEECG是一款基于代码生成器的J2EE快速开发平台,被称为开源界的"小普元",具有以下特点:
- 超越传统商业企业级开发平台
- 提供三种开发模式:Online Coding模式(自定义表单)->代码生成器模式->手工MERGE智能开发
- 可解决Java项目中60%的重复工作,让开发者更关注业务逻辑
0x01 环境搭建
所需工具
- IDEA开发环境
- Maven项目管理工具
- MySQL数据库
- Tomcat服务器
搭建步骤
- 下载源代码:https://github.com/zhangdaiscott/jeecg
- 使用IDEA导入项目,自动下载依赖
- 修改数据库配置文件,替换账号密码
- 手动创建jeecg数据库并导入数据
- 配置Tomcat并启动服务
0x02 路由分析
JEECG基于Spring MVC框架:
- 使用
@Controller声明控制器类 - 通过
@RequestMapping配置路由映射
示例控制器:/src/main/java/com/jeecg/demo/controller/JfromOrderController.java
访问方式:
- 访问
@RequestMapping(params = "qrcode"):http://localhost:8080/jeecgFormDemoController.do?qrcode - 访问
@RequestMapping("/filedeal"):http://localhost:8080/jeecgFormDemoController/filedeal.do
0x03 漏洞分析
漏洞1:文件上传Getshell
利用步骤:
- 访问上传接口(需要登录):
http://localhost:8080/jeecgFormDemoController.do?commonUpload - 直接修改文件名后缀上传恶意文件
绕过登录限制:
- 利用未授权访问漏洞获取有效sessionid:
http://localhost:8080/webpage/system/druid/websession.json - 将获取的sessionid替换到请求中实现未授权上传
漏洞代码分析:
文件:/src/main/java/org/jeecgframework/web/cgform/controller/upload/CgUploadController.java
方法:ajaxSaveFile
关键问题代码:
String fileName = mf.getOriginalFilename(); // 获取文件名
String extend = FileUtils.getExtend(fileName); // 获取文件扩展名
String noextfilename=DateUtils.getDataString(DateUtils.yyyymmddhhmmss)+StringUtil.random(8);
String myfilename=noextfilename+"."+extend; // 拼接新文件名
String savePath = realPath + myfilename; // 文件保存全路径
漏洞原因:
- 获取文件扩展名后未进行任何过滤
- 直接拼接生成新文件名并保存
- 无文件类型检查机制
漏洞2:信息泄露漏洞
漏洞位置:
http://localhost:8080/webpage/system/druid/websession.json
影响:
- 泄露所有已登录用户的sessionid
- 可导致权限绕过和未授权访问
0x04 其他潜在漏洞
JEECG平台还存在以下类型的安全问题:
- SQL注入漏洞
- 任意文件下载漏洞
- 任意文件删除漏洞
- EL表达式注入漏洞
- XSS跨站脚本漏洞
- SSRF服务器端请求伪造漏洞
0x05 修复建议
-
文件上传漏洞修复:
- 实现严格的文件类型白名单验证
- 对上传文件进行重命名,避免使用用户提供的扩展名
- 限制上传目录的执行权限
-
信息泄露漏洞修复:
- 限制
/webpage/system/druid/websession.json的访问权限 - 添加身份验证机制
- 限制
-
其他建议:
- 对所有用户输入进行严格过滤和验证
- 实现最小权限原则
- 定期进行安全审计和代码审查
0x06 审计技巧
- 重点关注文件上传功能实现
- 检查所有
@RequestMapping注解的路由 - 审查数据库操作是否存在SQL注入风险
- 检查文件操作相关功能的安全性
- 验证权限控制机制的完整性
附录:常见问题
Q:SQL注入漏洞在哪个位置?
A:需要审查所有使用原生SQL查询的地方,特别是动态拼接SQL语句的部分。
Q:如何发现未授权访问漏洞?
A:通过目录扫描和审查权限控制代码,特别是@RequestMapping注解的参数验证。
Q:漏洞影响哪些版本?
A:文中提到的漏洞在JEECG 3.8版本中存在,其他版本也可能受影响。