Apache Shiro 身份验证绕过漏洞 (CVE-2020-11989)

Apache Shiro 身份验证绕过漏洞 (CVE-2020-11989)

Shiro这个框架,我相信各位经常挖洞的师傅都不会陌生,因为这个框架有着臭名昭著的反序列化漏洞(CVE-2016-4437),攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。

但是,今天我们要讲的是Shiro身份验证绕过漏洞,这个漏洞已经出来大半年了,只是之前一直觉得作用并不明显(这是因为自己太菜了),最近正好遇到一次,遂之记录一下(开学前的最后一篇,开学后估计没时间更新了,大家看我名字应该知道了)。

0x00漏洞详情

Apache Shiro是一个强大且易用的Java安全框架,它可以用来执行身份验证、授权、密码和会话管理。目前常见集成于各种应用中进行身份验证,授权等。在Apache Shiro 1.5.3之前的版本,将Apache ShiroSpring控制器一起使用时,特制请求可能会导致身份验证绕过。

关键字:身份验证、Apache Shiro 1.5.3、Spring控制器

0x01漏洞影响范围

  • Apache Shiro < 1.5.3
  • Spring 框架中只使用 Shiro 鉴权

0x02漏洞分析

0x03漏洞实战复现(这是第一种方法:url开头为/;关键词)

当我们在进行渗透时,若是遇到了shiro站,但站点已经将反序列化漏洞修复的时候,不妨试一试shiro权限绕过,有时是会有惊喜的!

在这里插入图片描述

在挖洞的过程中,看到了我的burp发出警报,看了一眼,发现原来是Shiro框架

(后来瞄了一下这个页面,熟悉感扑面而来。)

在这里插入图片描述

测试了一波弱口令但没有成功之后,立马掏出我珍藏已久的Shiro反序列化利用工具梭哈一波!

在这里插入图片描述

很遗憾,Shiro反序列化漏洞已经修复了,难道我就要败在这里了吗??

突然想起了之前的Shiro权限绕过这个漏洞,于是查阅资料,复现一波

在Shiro框架的网站后面拼接/;/查看页面是否正常
这里我们拼接到刚刚的网站上
http://xxxxxx.com/;/login
查看网页是否正常

在这里插入图片描述

好家伙,页面正常回显,并且连验证码都不需要了。

这时候,一个疑问出现了,虽然Shiro权限绕过成功复现了,但是如何利用这个权限绕过打开局面呢?

一个思路突然出现了,我们可以利用fofa搜寻同样类型站点,利用弱口令进入同类型的站点后台,收集一波后台各种接口的URL,利用Shiro权限绕过的漏洞,将这些URL拼接在目标站点,达到未授权访问的目的!

说干就干,利用弱口令进入了一个同类型的站点后台,收集到了一波接口的URL

在这里插入图片描述

接下来就要拼接目标站点了。

http://xxxxxx.com/;/xxxxx/xxxx/xxxx

在这里插入图片描述

在这里插入图片描述

成功访问到这些敏感的功能点了。

下一步,找到上传功能点,上传绕过,即可Getshell。

另外一种:uri中包含%25%32%66关键词

如果请求/hello/aaa那么将会被禁止:
在这里插入图片描述

但是这里我们可以通过url双编码的方式来绕过:

/ -> %2f ->%25%32%66


GET /hello/a%25%32%66a HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Connection: close
Upgrade-Insecure-Requests: 1

在这里插入图片描述
成功绕过身份验证。

当然这个场景下需要一些限制条件,首先权限ant风格的配置需要是*而不是**,同时controller需要接收的request参数(@PathVariable)的类型需要是String,否则将会出错。

其中中间的代码分析过程请看这篇文章:https://xlab.tencent.com/cn/2020/06/30/xlab-20-002/

总结一下,当进入应用后我们的请求页面被解析成/hello/a%2fa,所以它可以进入到spring controller中的/hello/{name},但是因为shiro再次做了url解码,导致判断的uri成为了/hello/a/a 它不属于我们配置的权限判断地址/hello/*
此绕过核心原理可以归因为shiro与spring对RFC标准实现的差异。

转载http://www.0dayhack.net/index.php/554/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值