Shiro未授权漏洞解析环境搭建
Shiro未授权漏洞解析环境搭建
为了深入了解一下这个漏洞的原理花了我好多时间, 又是麻麻的一次学习, 在这里先说一下怎么把环境搭起来吧, 网上很多漏洞解析文章但是搭建环境总是出现这样那样的问题, 先说一下, 完全照着操作也不一定能成功跑起来。我也是按照别人的指南部署项目之后还是运行失败, 最后自己修改了一些配置才跑起来的。
环境搭建
之前直接在 https://codeload.github.com/l3yx/springboot-shiro/ 下载的项目文件我直接打开运行有一些依赖加载不了, 所以我就替换和取消了一部分依赖, 如果出现问题的可以下载我下面这个修改过的项目: 传送门
完全不懂得建议可以参考一下我之前的Shiro1.2.4环境搭建的文章 : [穿越入口](http://h0cksr.xyz/archives/486)
需要注意的是我们这里如果是想验证Shiro的;
导致的未授权访问漏洞的话需要修改一下LoginController.java
文件,否则使用;
绕过不会生效。
这是原本默认的LoginController.java
文件:
admin函数修改为:
@GetMapping("/admin/{name}")
public String admin() {
return "admin page";
}
修改后运行环境配置(我直接用应用程序的方式启动了,另外也可以选用Spring项目启动):
实际上对JDK版本应该是没限制的, 我跑了七八个版本的JDK全跑起来了,我调试的时候使用的项目结构SDK为1.8.0.311
项目运行我直接选了默认的1.8(其实哪个版本都没关系)
然后我们Run一下将org.syclover.srpingbootshiro.SrpingbootShiroApplication运行起来即可,运行成功出现下图显示:
运行起来之后的项目结构:
变化比较
我这里默认是1.5.2, 可以自己手动修改一下复制文件夹另外再开一个项目修改Shiro版本为1.5.3然后在pom.xml文件下重新加载一下Maven项目就可以看到1.5.3的Shiro源码了:
我们来看一下解析URL的org.apache.shiro.web.util.WebUtils#getPathWithinApplication函数:
环境说明:
在未登录的情况下访问admin目录下的资源会被服务器重定向到登录页面
想要访问admin下面的资源需要先通过/doLogin?username=java&password=123登录:
进行登录操作
使用返回的session访问/admin/page
漏洞利用
当我们使用的session没有经过身份验证的时候访问任何/admin
下的任何资源都是非法请求的, 在这里我们将此次访问的目标定为/admin/page
(也可以是其他的/admin/aaa之类的也行)
当我们直接访问/admin/page失败
但是访问/admin/%3bpage就会成功访问到/admin/page资源
漏洞修复
官方已发布漏洞修复版本,更新 Apache Shiro >= 1.6.0