Linux|某大型CMS后台注入从分析到利用

Linux|某大型CMS后台注入从分析到利用



Linux|某大型CMS后台注入从分析到利用



Linux|某大型CMS后台注入从分析到利用



Linux|某大型CMS后台注入从分析到利用



Linux|某大型CMS后台注入从分析到利用



【Linux|某大型CMS后台注入从分析到利用】Linux|某大型CMS后台注入从分析到利用



Linux|某大型CMS后台注入从分析到利用

搭建环境Github找一下若依4.6.1版本下载到本地 , 丢到IDEA里面 , 数据库文件导入 , druid连接池配置文件中修改username和password



在application.yml文件中可更改服务默认端口 , 80端口被占用修改成其他空闲端口


完成数据库导入和配置文件一些必要信息的修改之后就可以运行整个项目了


漏洞分析若依cms这个后台SQL注入貌似还没有公开漏洞细节 , 相关的分析内容很难找 , Google到了其中一篇文章 , 获取到了关键的污点传播路径 , 整理如下:
RuoYi/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java:56\\`role\\`为污点源->RuoYi/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java:37污点源从\\`role\\`传递至\\`dataScope\\`->RuoYi/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java:19污点传入selectRoleList方法->RuoYi/ruoyi-system/src/main/resources/mapper/system/SysRoleMappper.xml:36'SQLI'类型触发注入

初看比较疑惑 , 顺着污点传播路径跟进不太明白poc是怎么整出来的 , 看到最后的xml文件也就是漏洞触发点也就清楚是怎么一回事了 , 先从污点源开始看
RuoYi/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java



查看代码可以确定利用的漏洞路径为/system/role/list , 以POST的方式进行传参 , 可以看到初始的污点源为传递给TableDataInfo的参数role , 跟进方法中调用的startPage()方法
Ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java


函数体打断点处 , 调用了TableSupport类的buildPAgeRequest()如果pageNum和PageSize两个参数值不为空的话就会进行分页处理 , 调用的是pagehelper这个第三方插件 , 跟进buildPAgeRequest()方法分析是如何进行赋值处理的
Ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java


实例化一个PageDomain类 , 并通过ServletUtils类从post传递的数据中获取对应的参数值所以这几个参数值对漏洞利用并没有太大的影响 , 让其获取到的都为空就可以 , 第一部分poc
pageSize=&pageNum=&orderByColumn=&isAsc=

顺着污点传播链 , 跟进RuoYi/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java文件



对dataScope参数的一个拼接 , 并且进行了类型的转换 , 继续跟传播链 , RuoYi/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java