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

admin 2022年1月9日07:47:13代码审计评论22 views3489字阅读11分37秒阅读模式

本文首发于奇安信攻防社区

社区有奖征稿


· 基础稿费、额外激励、推荐作者、连载均有奖励,年度投稿top3还有神秘大奖!

· 将稿件提交至奇安信攻防社区(点击底部 阅读原文 ,加入社区)


点击链接了解征稿详情


搭建环境

Github找一下若依4.6.1版本下载到本地,丢到IDEA里面,数据库文件导入,druid连接池配置文件中修改username和password
某大型CMS后台注入从分析到利用
在application.yml文件中可更改服务默认端口,80端口被占用修改成其他空闲端口
某大型CMS后台注入从分析到利用
完成数据库导入和配置文件一些必要信息的修改之后就可以运行整个项目了
某大型CMS后台注入从分析到利用

漏洞分析

若依cms这个后台SQL注入貌似还没有公开漏洞细节,相关的分析内容很难找,Google到了其中一篇文章,获取到了关键的污点传播路径,整理如下:

  1. RuoYi/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java:56,`role`为污点源

  2. ->RuoYi/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java:37,污点源从`role`传递至`dataScope`

  3. ->RuoYi/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java:19,污点传入selectRoleList方法

  4. ->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
某大型CMS后台注入从分析到利用
查看代码可以确定利用的漏洞路径为/system/role/list,以POST的方式进行传参,可以看到初始的污点源为传递给TableDataInfo的参数role,跟进方法中调用的startPage()方法
Ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
某大型CMS后台注入从分析到利用
函数体打断点处,调用了TableSupport类的buildPAgeRequest(),如果pageNumPageSize两个参数值不为空的话就会进行分页处理,调用的是pagehelper这个第三方插件,跟进buildPAgeRequest()方法分析是如何进行赋值处理的
Ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java
某大型CMS后台注入从分析到利用
实例化一个PageDomain类,并通过ServletUtils类从post传递的数据中获取对应的参数值,所以这几个参数值对漏洞利用并没有太大的影响,让其获取到的都为空就可以,第一部分poc

  1. pageSize=&pageNum=&orderByColumn=&isAsc=

顺着污点传播链,跟进RuoYi/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java文件
某大型CMS后台注入从分析到利用
dataScope参数的一个拼接,并且进行了类型的转换,继续跟传播链,RuoYi/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
某大型CMS后台注入从分析到利用
注释已经写明此处根据分页查询角色数据,暂时不知道污点为何会传入selectRoleList()方法,继续跟传播链
RuoYi/ruoyi-system/src/main/resources/mapper/system/SysRoleMappper.xml
某大型CMS后台注入从分析到利用
可以看到这里是SQL查询语句,具体为什么这么写可以去自行百度一下,可以看到这里直接将${params.dataScope}拼接入了SQL语句中,因此构造SQL注入语句就能够查询我们想要获取的数据,到这里也就不难理解为什么污点源会变成dataScope,现在根据公开的poc来捋一捋整个链

role为初始污点源->调用RuoYi/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java#selectRoleList方法->selectRoleList方法调用RuoYi/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java中的SysRole类,该类会对dataScope参数进行处理->dataScope传入了RuoYi/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java#selectRoleList方法->调用SQL查询时拼接dataScope参数值进行了注入

可能并不是很准确,但是自己是这么理解的,有师傅理解更到位的话请多多指教
第二部分poc

  1. roleName=&roleKey=&status=&params[beginTime]=&params[endTime]=&params[dataScope]=and extractvalue(1,concat(0x7e,substring((select database()),1,32),0x7e))

将两部分poc结合也就得到了公开的poc,其实从poc入手,再直接看到最后的漏洞注入点能够更好理解poc为什么是这么构造的,其他参数的值皆为空默认就会为null,只传入dataScope这个参数值也是可以的

  1. url/system/role/list

  2. POST:pageSize=&pageNum=&orderByColumn=&isAsc=&roleName=&roleKey=&status=&params[beginTime]=&params[endTime]=&params[dataScope]=and extractvalue(1,concat(0x7e,(select database()),0x7e))

本地复现

某大型CMS后台注入从分析到利用
可以看到通过报错注入获取到了数据库的名字,后面更改SQL语句就能够获取到详细的数据库信息了

项目测试

打开给定的地址,看到这个界面就觉得很熟悉,之前审报告的就是就看到很多回,若依没跑了,站点应该只是更改了一些静态资源。

某大型CMS后台注入从分析到利用
登录还是常规手段尝试弱口令,admin/admin123,直接进去了后台
某大型CMS后台注入从分析到利用
burp抓个包,poc打过去,获取到了数据库名
某大型CMS后台注入从分析到利用
得到如下部分数据库中的信息,详细的就不公开了

  1. exam_banner,exam_collect,exam_p 表名

  2. id,title,banner_img,is_put,cont  #exam_banner表中的列名,不完整,长度限制,可以分长度读出

总结

整个到这里就差不多结束了,漏洞分析的可能不是特别到位,师傅们轻喷,只是想知道poc的参数是怎么构造的才去扒拉源码分析的,跟着poc去分析会更好理解,也就有了这篇文章。

END



【版权说明】本作品著作权归joker所有,授权补天漏洞响应平台独家享有信息网络传播权,任何第三方未经授权,不得转载。



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

努力审计Java的萌新


敲黑板!转发≠学会,课代表给你们划重点了

复习列表





Java反序列化数据绕WAF之延时分块传输


从某开源靶场详细学习SQL注入的过程


探秘之旅:为何打开书签会导致Chrome崩溃


HTTP 2.x 协议学习与实战


施耐德充电桩漏洞挖掘之旅


解锁SQL注入新玩法和上传通用绕过

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


分享、点赞、在看,一键三连,yyds。
某大型CMS后台注入从分析到利用

点击阅读原文,加入社区,获取更多技术干货!

本文始发于微信公众号(补天平台):某大型CMS后台注入从分析到利用

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月9日07:47:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  某大型CMS后台注入从分析到利用 http://cn-sec.com/archives/475300.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: