Jeecg-boot v2.1.2-v3.0.0 后台未授权SQL注入漏洞 分析
字数 920 2025-08-24 07:48:22
Jeecg-boot v2.1.2-v3.0.0 后台未授权SQL注入漏洞分析
漏洞概述
Jeecg-boot是一款基于SpringBoot+Ant Design Vue的快速开发平台,在v2.1.2至v3.0.0版本中存在一个未授权访问的SQL注入漏洞。攻击者可以通过构造特定的请求,无需任何权限验证即可执行任意SQL查询,可能导致敏感数据泄露。
漏洞详情
漏洞位置
漏洞存在于NgAlainController.java文件中,具体路径为:
src/main/java/org/jeecg/modules/ngalain/controller/NgAlainController.java
漏洞接口
存在漏洞的接口为:
/jeecg-boot/sys/ng-alain/getDictItemsByTable/{table}/{text}/{code}
漏洞成因
- 未授权访问:该接口未经过JWT+Shiro的权限验证,可以直接访问
- SQL注入:接口参数直接拼接进SQL语句,未做任何过滤和参数化处理
漏洞利用
利用条件
- Jeecg-boot版本在v2.1.2至v3.0.0之间
- 目标系统未对接口进行额外安全防护
利用方法
-
基础利用方式:
http://[目标IP]:[端口]/jeecg-boot/sys/ng-alain/getDictItemsByTable/sys_user/username/password -
构造SQL注入Payload:
SELECT *, ' as "label",x.js as "value" from ' FROM sys_user -
实际攻击URL示例:
http://192.168.2.2:8081/jeecg-boot//sys/ng-alain/getDictItemsByTable/'%20from%20sys_user/*,%20'/x.js
漏洞分析
代码层面分析
漏洞点在于Mapper层的SQL语句构造方式,用户输入直接拼接进SQL语句中,导致SQL注入。
安全机制绕过
虽然系统整体使用了JWT+Shiro进行权限验证,但该特定接口未被纳入权限验证体系,导致可以未授权访问。
修复建议
- 参数化查询:使用预编译语句或ORM框架的参数化查询功能
- 权限验证:将该接口纳入系统的权限验证体系
- 输入过滤:对传入的表名、字段名等参数进行严格校验
- 升级版本:升级到修复了该漏洞的版本
参考链接
- 源码位置: https://github.com/jeecgboot/jeecg-boot/releases/tag/v3.0.0
- 原始分析文章: 先知社区(链接已提供)
免责声明
本文档仅用于安全研究和教育目的,未经授权对他人系统进行测试可能违反法律。请在合法授权范围内使用这些信息。