shiro权限分析

VSole2021-10-27 15:21:57
写这个的时候昏昏沉沉的可能有些地方没说清楚,可以看一下参考链接那个老哥说的很详细。自己
就记录一下。

CVE-2020-1957

漏洞代码地址
https://github.com/threedr3am/learnjavabug/blob/master/shiro/auth-bypass(shiro%3C1.5.3)/pom.xml
参考文章
http://wjlshare.com/archives/1591
Apache Shiro <= 1.4.1
Spring 框架中只使用 Shiro 鉴权
先看一下靶场效果,直接访问bypass会调到鉴权,加一个/就绕过了鉴权

看看filter的鉴权路径咋写的。

断点先下起来再看,在这里getPathWithinApp

进入getRequestUri看看对uri的处理。在decodeAndCleanUriString中判断了有无;号,在
normalize()中对uri进行了处理。可以看第二个分析比较详细,这里就简单说说了。就是对一些字
符进行了优化处理。然后保存在requestUri中,再讲requestUri与需要鉴权的路径做比较。

getChain(),直接跟,在这里就做比较了,因为我们添加了/所以比较失败返回null,导致了权限
绕过
poc
http://localhost:8080/bypass/
http://localhost:8080/login/..;/bypass

CVE-2020-11989

漏洞代码地址
https://github.com/threedr3am/learnjavabug/blob/master/shiro/auth-bypass(shiro%3C1.5.3)/pom.xml
参考文章
http://wjlshare.com/archives/1591
漏洞产生的原因是因为 Spring 与 Shiro 之间对 url 的处理不同从而导致权限绕过
Apache Shiro <= 1.5.2
Spring 框架中只使用 Shiro 鉴权
需要后端特定的格式才可进行触发
即:Shiro权限配置必须为 /xxxx/* ,同时后端逻辑必须是 /xxx/{variable} 且 variable 的类型
必须是 String
环境搭建参考参考文章
下个断点进行调试分析
漏洞原理:利用shiro在做匹配的时候,如果是e0mlja/*格式,则只会匹配e0mlja目录下,如果再
加一层目录可绕过匹配,如e0mlja/123/123就绕过了e0mlja/*对123的匹配。也可以利用;取到;之前
的链接进行绕过。看看效果

从代码来看,我们是想要访问bypass下的目录的,但是正常访问会被拦截到登录页面。

环境是这么个环境,接下来就开始调试看看具体的内容了。在getPathWithinApplication下个断点。

进入getRequestUri,看看对url的处理。

进入decodeAndCleanUriString()

根据运行的执行结果来看,这里是对uri进行了一次url解码。利用indexof(59)来判断是否存在;号,
有的话返回;前的内容,否则就返回uri的内容。

再进入normalize()函数

从ascii对照表中看到是对\的判断。来看一下具体的处理。
(1)替换\\为/
(2)替换/.为/
(3)不是/开头的话添加/

处理完了以后,满足不存在// /./ /../ 这三种,才进行返回。
直接向下 到这里看看

简单梳理一下逻辑
(1)先看是否存在filter的设置,不存在返回null
(2)获取我们的请求地址,简单判断,然后对我们需要鉴权的路径进行一个遍历,看看在不在其中。
(3)判断完了如果都不存在,则返回null,退出函数。然后不做filter,选择默认的。能看到是没
有权限校验的。

修复
在 Shiro 1.5.3 版本中对 getPathWithinApplication 进行了修改,取消了 url 解码的函数,所
以我们这里的 uri 并不会被完全解码,绕过bypass的鉴权
poc:
http://localhost:8080/bypass/bypass/aaa%252Faaa
http://localhost:8080/;/bypass/bypass/111

CVE-2020-13933

Apache Shiro < 1.6.0
Spring 框架中只使用 Shiro 鉴权
需要后端特定的格式才可进行触发

即:Shiro权限配置必须为 /xxxx/* ,同时后端逻辑必须是 /xxx/{variable} 且 variable 的类型
必须是 String
我们知道shiro的上版本修复是省去了自动url解码。这里还是存在绕过的可能。

还是下断点来看一下,前面两个已经分析的差不多了关键函数,所以这里直接来找不同看看。这里
对;进行了处理。返回了分号之前的内容,也就是我们的两个bypass。这里通过跟踪发现,还是绕过
了鉴权的uri。感觉和之前的/绕过有点契合。对比一下,高版本少了一次url的解码。其他的就不多
说了 和前两个分析一样
poc
http://localhost:8080/bypass/bypass/%3b123

CVE-2020-17523

Apache Shiro < 1.7.1

Spring 框架中只使用 Shiro 鉴权

需要后端特定的格式才可进行触发

即:Shiro权限配置必须为 /xxxx/* ,同时后端逻辑必须是 /xxx/{variable} 且 variable 的类型
必须是 String
poc
http://localhost:8080//bypass/bypass/%20
这个就不过多重复分析了,还有一点需要注意的就是spring对uri的处理,否则传入的错误路径可能
会导致有问题。最后复现的时候需要注意java的版本,高版本可能会导致环境搭建不成功。

前面都是大同小异,来看看不同的 domatch这里,

这里自动将空格去除了。也就是说形成了/bypass/bypass/这种,而/*未匹配到东西,所以不会调到
鉴权页面

poc
http://localhost:8080/bypass/bypass/%20
shirolocalhost
本作品采用《CC 协议》,转载必须注明作者和本文链接
shiro权限分析
2021-10-27 15:21:57
写这个的时候昏昏沉沉的可能有些地方没说清楚,可以看一下参考链接那个老哥说的很详细。看看filter的鉴权路径咋写的。进入getRequestUri看看对uri的处理。符进行了优化处理。然后保存在requestUri中,再讲requestUri与需要鉴权的路径做比较。根据运行的执行结果来看,这里是对uri进行了一次url解码。这里自动将空格去除了。
前言某次小型红蓝,直接丢过来几个登陆框,定点打。环境介绍全部都是shiro框架。过程爆破用户名密码,都是加密的。查看网页源代码的时候,发现其中一个利用的DES-ECB的单层加密。果断生成大量的字段。我的超大字典,都没有爆破出一个有效的账号。一上午毫无收获,陷入沉思。用上午在A系统登陆显示没有应用权限的账号,但是不会自动解压,没有找到可以利用的点。在目标机器部署了cs。
拿到一个系统后,很多情况下只有一个登录入口。如果想进一步得到较为高危的漏洞,只能去寻找权限校验相关的漏洞,再结合后台洞,最终得到一个较为满意的漏洞。
fastjson.jar是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。除了这个fastjson以外,还有Google开发的Gson包,其他形式的如net.sf.json包,都可以实现json的转换。方法名称不同而已,最后的实现结果都是一样的。
部分getshell漏洞汇总
2022-07-20 10:12:45
即可未授权访问console后台,但是权限比较低备注:此处会出现个问题,在复现的环境中直接拼接
渗透测试Tips
2022-04-13 06:38:50
知己知彼,百战不殆1、如果提示缺少参数,如{msg:params error},可尝使用字典模糊测试构造参数,进一步攻击。
将这些指标对接到 prometheus、zabbix 等监控系统,能够对应用程序持续检测,发现异常可以及时告警并得到处理。以 Prometheus 为例,应用程序通过暴露出 HTTP 接口,让 Prometheus 周期性地通过该接口抓取指标,这就是 Pull。
细说从0开始挖掘cms-
2022-08-17 16:26:57
确立目标挖洞的第一步首先是确立一个目标,也就是找个cms来挖,这里可以通过github,gitee或者谷歌百度直接去搜cms。或者cnvd查看相应的信息,通过查看相应的信息可以提高我们挖洞的效率,我们从中可以知道该项目已经存在漏洞,我们到时候挖就可以看看相应的地方会不会还存在漏洞或者避免挖到别人挖过的漏洞。本次挖掘的漏洞是ofcms,首先先下载一下源码,然后解压丢一边,回到网页来看一下项目文档。
一次成功的Shiro Padding Oracle需要一直向服务器不断发包,判断服务器返回,攻击时间通常需要几个小时。因为这些程序没有对发包失败抛出异常的情况做出处理,从而导致工具停止工作。最终,攻击成功了,我虚拟机下花了不到1小时共计完成,但是在真实生产环境测试,攻击成功一次DNS或者JRMPClient攻击,程序需要跑大约4个小时左右,2次攻击加起来近9个小时。
VSole
网络安全专家