代码审计ruoyi_v4.6.1 | SQL注入详解

2024-12-07 272 0

1.序言

根据官网的更新日志,若依系统v4.6.1版本并没有修复存在的SQL注入漏洞问题,所以这篇文章既可以看做若依系统v4.6.1版本SQL注入漏洞的分析,也可以看做若依系统v4.6.0版本SQL注入的补充。

1)审计若依系统v4.6.0

代码审计实战之若依 RuoYi4.6.0

2)官网更新日志:

2.审计

(1)注入点1

SysDeptMapper.xml文件的params.dataScope参数

SpringBoot中的SQL注入一般都是因为使用了 $ 的原因。可以全局搜索 $ 并匹配 .xml 文件类型,快速查看是否存在SQL注入,发现前端多个位置存在这个注入点。

那就选择第一个先跟一下流程,现在是在resources中的SysDeptMapper.xml文件中。

找到 id 然后按住ctrl+左键进入到dao(mapper)层。

继续在 selectDeptList 上按住ctrl+左键往上,跟看谁调用的,会发现有四个选择,第四个肯定不是了,从那来的,另外三个都在一个文件中,随便选择一个。

来到serveice层,根据注释和代码发现,第一处是查询部门数据,就是在部门管理的功能处

继续跟 selectDeptList 进入 controller 层,发现最终前端调用处为调用列表的相关功能,比如搜索,刷新等操作,路径为/system/dept/list,请求方式为post。

验证:

(1)根据路由信息,找到系统对应的功能点,在这里我们可以定位到部门管理的编辑操作

(2)然后抓包,发送到repeater模块,构造poc,发现 POST 请求体里没有params[dataScope]字段,于是尝试将 POST 请求体替换为以下 POC:

deptName=&status=&ampparams[dataScope]=and extractvalue(1,concat(0x7e,substring((select database()),1,32),0x7e))

现在,我们开始研究注入点参数params[dataScop]

我们看到,根据上述注入过程,猜测注入点参数是params.dataScope,但是直接带入params.dataScope参数,利用burpsuite进行注入测试

看到所有报错注入语句均未成功注入,说明params.dataScope不是正确的报错参数。

但是看到IDEA后台运行语句,同时在.xml文件处发现注释,又注意到parent_id,dept_name,status为空,初步判断,框中执行的应该就是params.dataScope参数带入的SQL语句。

我们对其中的sql语句进行全局搜索,

SELECT dept_id FROM sys_role_dept WHERE role_id = 

结果在DataScopeAspect.java文件中找到了它,且看到了dataScope参数,dataScope参数是从role.getDataScope()函数中传过来的,而role又是从user.getRoles()函数中获得的,追踪user.getRoles()函数

最终只能追踪到list.java

现在我们需要通过断点来判断传值过程及在此过程中,参数的变化,参数值的变化来判断一个正确的注入参数

从注入点的路由我们找到其控制器,在从list中获取值的地方断点

在1处我们既没有发现dataScope参数,也没有发现params.dataScope参数,但是我们在2处发现了params参数,继续看传值过程(在此过程中,具体传值过程跳过)

我们发现在params参数里包含了dataScope参数,且其中的值被[]包含。我们初步判断,正确的注入参数应该是params[dataScope],利用burpsuite进行测试

该SQL注入语句已成功执行

从程序运行的控制台看到,该SQL注入语句已经注入到原SQL语句

全局搜索,排查还有哪些功能点用到selectDeptList(dept)函数

补充:参数params与参数dataScope的关系 ${params.dataScope}的意思就是入参参数.dataScope属性,即 SysDept对象.dataScope属性

具体可参考以下链接:

https://blog.csdn.net/weixin_40967156/article/details/116265306
https://blog.csdn.net/qq_52469048/article/details/127676460
https://developer.aliyun.com/article/1410226

注入点2

ysDeptMapper.xml文件的参数ancestors

同理,我们在SysDeptMapper.xml文件中找到了第二个可能拥有SQL注入点的参数ancestors

还是进行跟进,找到使用该函数的功能点

最终,我们在controller层SysDeptController.java文件中找到了该函数,

然后根据路由找到功能点

对市场部门进行编辑

在burpsuite中找到数据包

然后直接改包,构造payload

在响应中未发现注入

查看控制台

我们发现sql语句的执行过程:

① 首先进行dept_name和parent_id的查询(select)

② 其次进行dept_id的查询(select)

③ 查询 sys_dept 表中,ancestors 字段包含指定值(?)的所有记录(select)

④ 然后更新parent_id , dept_name , ancestors 等数据(update)

⑤ 最后进行对数据的插入(insert)

在整个过程中我们发现dept_id的值是101,但ancestors的范围是(0,100),显然此部门不在ancestors范围之内。

我们回头看在.xml文件中sql语句的执行

SQL 的 WHERE 子句,表示限制更新的条件。具体来说,它根据 dept_id 字段来筛选符合条件的记录,dept_id 必须在 ${ancestors} 中,简而言之,dept_id必须在100以内才能。才能执行该处的更新语句。

我们选择若依科技,然后点击修改,确定,抓包

我们发现dept_id=100,尝试注入,构造payload,进行测试

出现了报错,说明此处有注入,利用burpsuite的intruder模块FUZZ一波

然后全局搜索还有哪个地方用到了updateDeptStatus方法

注入点3

SysRoleMapper.xml文件的${params.dataScope}参数

同理,持续跟进

全局搜索

进入dao层

进入service层

在controller层,我们看到有两个地方用到了selectRoleList方法

我们首先看第一个

我们根据其路由信息找到功能点

然后直接构造payload,进行测试

pageSize=10&pageNum=1&orderByColumn=roleSort&isAsc=asc&roleName=&roleKey=&status=¶ms%5BbeginTime%5D=¶ms%5BendTime%5D=params[dataScope]=and extractvalue(1,concat(0x7e,substring((select user()),1,32),0x7e))

再看第二个

分析流程类似注入点1,这里不再赘述。

注入点4

SysUserMapper.xml文件的${params.dataScope}

全局搜索(找dao层文件)

进入dao层文件

进入service层

任选一个,进入controller层

根据路由信息找到功能点

进入用户界面操作

Burpsuite抓包

构造payload,进行测试

pageSize=10&pageNum=1&orderByColumn=createTime&isAsc=desc&deptId=&parentId=&loginName=&phonenumber=&status=¶ms%5BbeginTime%5D=¶ms%5BendTime%5D=params[dataScope]=and extractvalue(1,concat(0x7e,substring((select user()),1,32),0x7e))

存在SQL注入漏洞

故凡是调用selectUserList方法的功能点皆存在SQL注入漏洞。

3.总结

此处SQL注入漏洞的分析都是在漏洞复现后的基础上进行的,有疏漏和错误的地方请各位老师指教。


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

Shellcode加密混淆技术全解析
绕过WPS Office沙箱和Windows Defender的恶意宏攻击分析
Web源码泄露姿势 | 如何寻找泄露源码及黑灰源码
利用隐形Unicode字符的钓鱼攻击:一种新的JS混淆技术
AI比赛大杀器XGBoost结合ast抽象语法树批量识别恶意php文件
语音网络钓鱼新动向:DarkGate恶意软件入侵案例剖析

发布评论