JAVA代码审计-JEECG快速开发平台(一)
字数 1487 2025-08-29 08:32:00

JEECG快速开发平台代码审计与漏洞分析

0x00 平台概述

JEECG是一款基于代码生成器的J2EE快速开发平台,被称为开源界的"小普元",具有以下特点:

  • 超越传统商业企业级开发平台
  • 提供三种开发模式:Online Coding模式(自定义表单)->代码生成器模式->手工MERGE智能开发
  • 可解决Java项目中60%的重复工作,让开发者更关注业务逻辑

0x01 环境搭建

所需工具

  • IDEA开发环境
  • Maven项目管理工具
  • MySQL数据库
  • Tomcat服务器

搭建步骤

  1. 下载源代码:https://github.com/zhangdaiscott/jeecg
  2. 使用IDEA导入项目,自动下载依赖
  3. 修改数据库配置文件,替换账号密码
  4. 手动创建jeecg数据库并导入数据
  5. 配置Tomcat并启动服务

0x02 路由分析

JEECG基于Spring MVC框架:

  • 使用@Controller声明控制器类
  • 通过@RequestMapping配置路由映射

示例控制器:/src/main/java/com/jeecg/demo/controller/JfromOrderController.java

访问方式:

  1. 访问@RequestMapping(params = "qrcode")
    http://localhost:8080/jeecgFormDemoController.do?qrcode
    
  2. 访问@RequestMapping("/filedeal")
    http://localhost:8080/jeecgFormDemoController/filedeal.do
    

0x03 漏洞分析

漏洞1:文件上传Getshell

利用步骤

  1. 访问上传接口(需要登录):
    http://localhost:8080/jeecgFormDemoController.do?commonUpload
    
  2. 直接修改文件名后缀上传恶意文件

绕过登录限制

  1. 利用未授权访问漏洞获取有效sessionid:
    http://localhost:8080/webpage/system/druid/websession.json
    
  2. 将获取的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平台还存在以下类型的安全问题:

  1. SQL注入漏洞
  2. 任意文件下载漏洞
  3. 任意文件删除漏洞
  4. EL表达式注入漏洞
  5. XSS跨站脚本漏洞
  6. SSRF服务器端请求伪造漏洞

0x05 修复建议

  1. 文件上传漏洞修复:

    • 实现严格的文件类型白名单验证
    • 对上传文件进行重命名,避免使用用户提供的扩展名
    • 限制上传目录的执行权限
  2. 信息泄露漏洞修复:

    • 限制/webpage/system/druid/websession.json的访问权限
    • 添加身份验证机制
  3. 其他建议:

    • 对所有用户输入进行严格过滤和验证
    • 实现最小权限原则
    • 定期进行安全审计和代码审查

0x06 审计技巧

  1. 重点关注文件上传功能实现
  2. 检查所有@RequestMapping注解的路由
  3. 审查数据库操作是否存在SQL注入风险
  4. 检查文件操作相关功能的安全性
  5. 验证权限控制机制的完整性

附录:常见问题

Q:SQL注入漏洞在哪个位置?
A:需要审查所有使用原生SQL查询的地方,特别是动态拼接SQL语句的部分。

Q:如何发现未授权访问漏洞?
A:通过目录扫描和审查权限控制代码,特别是@RequestMapping注解的参数验证。

Q:漏洞影响哪些版本?
A:文中提到的漏洞在JEECG 3.8版本中存在,其他版本也可能受影响。

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") : 访问 @RequestMapping("/filedeal") : 0x03 漏洞分析 漏洞1:文件上传Getshell 利用步骤 : 访问上传接口(需要登录): 直接修改文件名后缀上传恶意文件 绕过登录限制 : 利用未授权访问漏洞获取有效sessionid: 将获取的sessionid替换到请求中实现未授权上传 漏洞代码分析 : 文件: /src/main/java/org/jeecgframework/web/cgform/controller/upload/CgUploadController.java 方法: ajaxSaveFile 关键问题代码: 漏洞原因 : 获取文件扩展名后未进行任何过滤 直接拼接生成新文件名并保存 无文件类型检查机制 漏洞2:信息泄露漏洞 漏洞位置 : 影响 : 泄露所有已登录用户的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版本中存在,其他版本也可能受影响。