[JavaWeb]Shiro漏洞集合——代码审计

Shiro漏洞集合

Shiro其实就是一组Filter,他会进行验证,鉴权,会话 Management,再把请求转到web过滤器。所以最好先去对Shiro有个整体性的了解。

复现环境:https://github.com/ttestoo/java-sec-study/tree/main/sec-shiro/java-shiro-bypass
全部的基于这个项目改下shiro的版本就好啦

Shiro682

这个漏洞感觉更像是springweb的漏洞,我也不知道为啥叫shiro的洞。请求路径为 /x/s/ ,正常情况下,不就应该是访问不到该文件嘛,我的shiro没匹配到也是很正常啊,结果spring直接允许 /x/s/===/x/s,导致了这个漏洞,最后还让shiro背锅。虽然说吧Shiro确实就是起防护的作用的,但我还是心不甘。。。

image
这里直接访问/admin/index是会重定向到/login的

image
但是访问/admin/index/后却会成功绕过验证

漏洞分析

image

在这里主要是拿着url路径去匹配过滤器的路径规则,用以判断是否需要进入验证\鉴权等Filters

image

直接跟到AntPathMatcher#doMatch操作,进行路径分析

说一下简要的匹配规则:就是先以/分隔符将匹配串和路径串切割成数组,然后将每个数组里的字符串进行比较,知道匹配完或者出现不一致,然后进入结果判定,对于因为**而产生不一致,导致比较结束的,都返回匹配成功,如果是完全一样也会匹配成功,而完全成功匹配的就会进入对于的FilterChain,例如LoginFilter进行验证。看下图中可以发现,它还会对最后是否有/进行判断,当我们使用/admin/index/时,匹配到/admin/index时,由于最后没有/所以显示不匹配,既然不匹配,那就不会进入FilterChain。但可恶的是/admin/index/到了web中却会被fix下,变为/admin/index,Shiro确实做到了严格匹配,但web却瞎搞,所以我才觉得这个洞属于Shiro有点。。

image

所以最终就可以利用/admin/index/进行绕过了

漏洞修复

image

官方就直接加了一种判断,会把路径后面多的/给删了;但是个人觉得可以将原来代码的判定是否都有/ 删除就好,只要/中间的字符不匹配,就返回false,反之则返回true,应该就可以解决问题

CVE-2020-1957

漏洞简介

  • 当使用http://127.0.0.1:9091/;admin/index 会跳转到/index界面;而当使用http://127.0.0.1:9091/;/admin/index,又可以直接跳到/admin/index界面从而造成未授权访问漏洞
    image
    image

漏洞分析

image

  • 直接访问/;/admin/index
    image

  • 可以看到,到FilterChain时的字符串还是传进入的/;/admin/index,但经过getPathWithinApplication()处理后的却只有/,说明是无法识别分号。而/肯定是无法满足需要进行过滤的匹配串,所以就不会进入指定的登陆验证
    image
    可以看到其中以分号进行了截断

在对getPathWithinApplication()进行跟入分析的时候,直接发现了另外一个二次URL解码+用原数据验证的漏洞。也就是后续的CVE-2020-11989。
image

image

  • 等判断链结束后,却发现传入的是原来的/;/admin/index,这也就导致了后续的解析漏洞

Shiro的验证绕过原理已经搞清楚了,接下来是弄清楚,为什么像 /;/admin/index这种路径,在后端会被成功解析为/admin/index,并进行了拼接(测试盲猜又是对其进行了分号截断,但截取的是后面的部分)

漏洞修复

image

由原来直接获取,到后来利用上下文获取。 统一了request.getServletPath()来处理路径再进行比较,这里是Shiro主动去兼容Spring和tomcat

image

CVE-2020-11989

在上面的过程中已经发掘了,就不再分析了

漏洞修复

image

image

下面是1.5.2版本之前的,又给改了回来。

image

修改后采用的和tomcat后端获取的方式一样,这样就统一了。

本来先想着不研究为什么恶意payload的到了web端可以被解析为正常的资源路径,因为那是后面的事,我们的目标就是绕过Shiro。但转头一想绕过Shiro不简单,直接/;;;??一通,这样Shiro不就可以绕过了。畸形路径好弄,解释不了的是为什么服务器可以处理畸形路径到正确的路径资源???,否则上面讲的都是无意义的。(其实我就不喜欢那种说一半的文章,总是让人琢磨不清,很多细节的东西都不讲明白,不过我也是菜鸟,我只是尽量解释清盲点)

这里可以另外一篇文章进行分析:Tomcat URL解析差异性导致的安全问题(本来想自己写,后面发现这篇文章讲的很详细,已经可以把上述的问题解释清楚了)

posted @ 2022-01-24 23:43  Aur0ra*  阅读(476)  评论(0编辑  收藏  举报