江西九江新闻

choi baccarat:Apache Shiro 认证绕过剖析(CVE-2020-17523)

来源:九江新闻网 发布时间:2021-02-21 浏览次数:

USDT自动充值接口

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

0x01 破绽形貌

Apache Shiro是一个壮大且易用的Java平安框架,执行身份验证、授权、密码和会话治理。使用Shiro的易于明白的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

当它和 Spring 连系使用时,在一定权限匹配规则下,攻击者可通过组织特殊的 HTTP 请求包完成身份认证绕过。

影响局限:Apache Shiro < 1.7.1

作者:jweny。文章首发于平安客,https://www.anquanke.com/post/id/230935

0x02 破绽环境搭建

shiro 1.7.0

https://github.com/jweny/shiro-cve-2020-17523

0x03 poc测试

http://127.0.0.1:8080/admin/

使用空格等空字符,可绕过shiro身份验证。

0x04 破绽剖析

破绽环境中,/admin/*所匹配的url都应在shiro的鉴权局限内。shiro校验path的函数为pathMatches。pathMatches返回true时,匹配掷中的url才会进入后续的鉴权逻辑。

在org.apache.shiro.util.AntPathMatcher,doMatch方式的pathMatches处下断点。

先手工验证下破绽发生缘故原由:

,

Usdt第三方支付接口

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,

调出Evaluate,盘算一下pathMatches("/admin/*","/admin/1"),正常匹配,返回true。

盘算一下pathMatch("/admin/*","/admin/ "),正常失败了,返回false,不会鉴权,然则spring接受到的是url是/admin/ ,返回正产页面admin page。

最先追随调试:

调试最先会经由一阵无聊的F7。一直到doMatch("/admin/*","/admin/ ")

可见,tokenizeToStringArray返回的pathDirs已经没有空格了。因此会导致/admin/*/admin/不匹配。

这里简单说一下为什么不是shiro的匹配函数matchStrings()问题matchStrings()在匹配*时,只要要匹配的字符串不是空,均返回匹配乐成。因此只有空格被删的情况下,才会泛起与*匹配失败。

可见是tokenizeToStringArray造成的。跟一下tokenizeToStringArray方式,发现其挪用tokenizeToStringArray方式时的trimTokens参数为true。

tokenizeToStringArray方式,在参数trimTokens为true时,会经由trim()处置,因此导致空格等空缺字符被消灭。

总结一下:存在破绽的shiro版本,由于挪用tokenizeToStringArray方式时,trimTokens参数默以为true,导致空格等空缺字符被删,因此无法与pattern*匹配,导致该路径无法经由鉴权。然则spring接受到的接见路径为/admin/ ,根据正常逻辑返回响应,因此导致权限被绕过。

0x05 官方的修复方案

经由以上的剖析,修复方案已经很明确了,将trimTokens设置为false。

0x06关于trim

原理上来说trim()会清空字符串前后所有的whitespace,空格只是其中的一种,然则在测试中发现除了空格以外的其他whitespace,例如 ,spring处置时都市返回400。

因此除了空格,尚未发现其他好用的payload。

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片