若依管理系统代码审计
该项目使用Mybatis作为数据库持久化框架。全局搜索 ${ 、关注 xxxmapper.xml 文件寻找SQL注入。
1)后台角色管理处SQL注入漏洞
点“SysRoleMapper.xml”文件进去看看。
在通过“SysRole”进行“selectRoleList”角色查找时使用了“${params.dataScope}”进行拼接,如下图所示:
点击上图左侧“小绿箭头”跟踪到DAO层,如下图所示:
发现是一个“List”的构造方法,点击“selectRoleList”,同时按住CTRL进行追踪,如下图所示:
跟踪到了“SysRoleServiceLmpl.java”服务层,如下图所示:
发现只是调用了“roleMapper”的“selectRoleList”方法,再对该方法进行跟踪,如下图所示:
发现有三个地方都调用用了该函数,点进第一个,如下图所示:
进入了“SysRoleController”控制层,看到对应后台的接口是“system/role/list”,还有“system/role/export”接口处的“export”方法也调用了该方法,如下图所示:
第57行:查看startPage():得知是查询的数据进行分页操作;
跟进“SysRole”,如下图所示:
知道“SysRole”是用户表,往下拉可看到拼接的“dataScope”参数,如下图所示:
全程没有发现对拼接的参数进行过滤处理,所以存在SQL注入漏洞。
在后台找到对应功能点,如下图所示:
点击“搜索”的同时,进行抓包,如下图所示:
把抓到的包放进ruoyi.txt文件中,然后用sqlmap跑 python sqlmap.py -r “ruoyi.txt” -v 3 -level=5,注入点存在的漏洞类型结果如下图所示:
2)部门管理处SQL注入漏洞
3)系统用户管理处SQL漏洞
4)垂直越权
管理员账号下添加“test5”用户,如下所示:
填写完用户信息后,保存时抓包,如下所示:
关掉代理,并退出管理员帐户,forward一下,再次登陆管理员帐户,查看用户管理,没有“test5”用户,如下所示:
退出管理员用户,登陆“tt”普通用户,如下所示:
登陆时抓包,如下所示:
把管理员添加“test5”用户的JESSIONID换成“tt”普通用户的,点击“go”发送,如下所示:
登录管理员帐户查看“用户管理”功能出,可看到“test5”用户已经添加成功,如下图所示:
使用了“tt”普通用户的JESSIONID添加了“test5”用户,所以存在垂直越权漏洞。
全局搜索“add”接口,如下图所示:
进入对应功能的代码块,如下图所示:
发现“SysUser”处有“Validated”参数校验,跟进去看一下,如下图所示:
发现只对用户数据的长度做了控制,没有对用户身份验证做校验,所以存在垂直越权。
5)CSRF(跨站点请求伪造)漏洞