漏洞详情
Shiro 在路径控制的时候,未能对传入的 url 编码进行 decode 解码,导致攻击者可以绕过过滤器,访问被过滤的路径。
漏洞影响版本
Shiro 1.0.0-incubating
对应 Maven Repo 里面也有
读者福利 |
CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析
环境搭建
这个比 Shiro550、Shiro721 要增加一些东西,首先看 pom.xml 这个配置文件,因为漏洞是 shiro 1.0.0 版本的
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.0.0-incubating</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.0.0-incubating</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.0.0-incubating</version>
</dependency>
调整 ShiroConfig.java,增加代码如下
filterMap.put("/user/add","perms[user:add]");
filterMap.put("/user/update","perms[user:update]");
filterMap.put("/secret.html","authc,roles[admin]");
filterMap.put("/user/*", "authc");
filterMap.put("/**","anon")
HTML 文件 ———— static/secret.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<div>
<h1>秘密界面</h1>
</div>
</body>
</html>
这时候访问secret.html
会得到一个 302 的重定向
用 PoC 打能够打通
- 至此环境搭建完毕,当然搭建环境的时候可能会遇到如下这个报错
unable to correctly extract the initialization vector or ciphertext.
这个问题的解决方法是清除浏览器缓存即可。
漏洞复现与分析
先说 PoC,未标准化路径造成/./
越权访问
把断点下在org.apache.shiro.web.filter.mgt.PathMatchingFilterChainResolver#getChain()
处,开始调试
getChain()
方法会先将所有的 URI 保存到变量名为i$
的迭代器当中,然后逐一循环,进行pathMatches()
的匹配。在循环两次之后,我们来看处理/./secret.html
的代码。跟进pathMatches()
方法
跟进pathMatcher.matches()
,再跟进,最终是来到org.apache.shiro.util.AntPathMatcher#doMatch()
,这个方法做了具体的实现业务。
首先判断目前请求的 URL 开头与目标 URL 的开头是否都为/
,如果不是则return false
;往下,调用了StringUtils.tokenizeToStringArray()
方法,之前的/secret.html
转化成了["secret.html"]
这个数组,/./secret.html
转换成了[".","secret.html"]
继续往下,判断了patDir
中是否存在**
字符,如果存在就break
;继续往下走,判断 html 的目录与当前请求的目录是否相同,因为我们请求被拆分出来是[".","secret.html"]
,.
和secret.html
不相同,会返回 false
由于其不能与我们之前定的所有 URL 匹配,导致进入了 /**
的匹配范围,这里之前我们设定的访问方式是/**,anon
无需认证即可访问,由此造成越权
基于这个逻辑,/;/secret.html
的 bypass 方式也是合理的,可能一些其他特殊字符也是可以的,前提是对请求并不造成影响,像..
,#
这类字符就会产生问题。
报错字符报错信息如下
Invalid character found in the request target [/\/secret.html ]. The valid characters are defined in RFC 7230 and RFC 3986
漏洞分析至此结束
漏洞修复
Shiro
在 Commit更新中添加了标准化路径函数。 对 /
、//
、/./
、/../
等进行了处理。
网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取
读者福利 |
CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)
👉1.成长路线图&学习规划👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
👉2.网安入门到进阶视频教程👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程文末领取哈)
👉3.SRC&黑客文档👈
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦!(全套教程文末领取哈)
👉4.护网行动资料👈
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
👉5.黑客必读书单👈
👉6.网络安全岗面试题合集👈
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~
读者福利 |
CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)
