jeecg boot快速开发平台2.4SQL注入

https://github.com/zhangdaiscott/jeecg-boot

代码分析

1
src/main/java/org/jeecg/modules/api/controller/SystemAPIController.java 167行

根据注释发现这里是一处查询,且tabletextcode参数可控,这里把table、text、code传入queryTableDictItemsByCode进行进一步的参数处理

跟进看看哪里定义了sysBaseAPI

接口定义,继续跟进ISysBaseAPI

1
src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java

这里为接口,往下看queryTableDictItemsByCode方法为空实现,所以全局搜索implements ISysBaseAPI查看其实现类

1
src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java

在此处搜索刚刚SystemAPIController调用到的里的queryTableDictItemsByCode方法,也就是这里

搜索结果

寻找参数是否包含有#{,然后转到getSqlRuleValue处理table

此处不算针对注入做的安全措施,所以回到SysBaseApiImpl里继续跟进查看哪里定义了sysDictService


跟进ISysDictService

1
src/main/java/org/jeecg/modules/system/service/ISysDictService.java

是一个接口

全局搜索implements ISysDictService查看其实现类

1
src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java

在该实现类里搜索SysBaseApiImpl调用的queryTableDictItemsByCode方法,也就是这里

搜索结果

在这里把前台的table,text,code参数传入mapper进行数据查询,跟进sysDictMapper.xml

1
src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml

搜索queryTableDictItemsByCode,发现传入的参数使用了${}直接进行查询,导致了注入的产生

漏洞验证:

根据controller的路由构造url为

1
http://localhost/sys/api/queryTableDictItemsByCode?table= &text= &code=

根据mysql的特征查系统默认数据库

1
http://localhost/sys/api/queryTableDictItemsByCode?table=mysql.user&text=User&code=password


声明:
本文章用于学习交流,严禁用于非法操作,出现后果一切自行承担,阅读此文章表示你已同意本声明。

Disclaimer:
This article is for study and communication. It is strictly forbidden to use it for illegal operations. All consequences shall be borne by yourself. Reading this article means that you have agreed to this statement.