一、Apache Shiro
Apache Shiro 是一个强大且易用的Java安全框架,能够用于身份验证、授权、加密和会话管理。
二、Shiro漏洞指纹(部分)
1、在请求包的cookie中有remember字段赋任意值
2、返回包中存在set-Cookie:remeberMe=deleteMe
三、受影响版本
Apache Shiro <1.5.2
四、漏洞原理
Shiro框架通过拦截器功能来实现对用户访问权限的控制和拦截。Shiro中常见的拦截器有anon,authc等拦截器。
1.anon为匿名拦截器,不需要登录就能访问,一般用于静态资源,或者移动端接口
2.authc为登录拦截器,需要登录认证才能访问的资源。
用户可以在Shiro.ini编写匹配URL配置,将会拦截匹配的URL,并执行响应的拦截器。从而实现对URL的访问控制,URL路径表达式通常为ANT格式。如下配置,访问 /index.html主页的时候,Shiro将不会对其进行登录判断,anon拦截器不需要登录就能进行访问。而对于/user/xiaoming 等 /user/xiaogang等接口,authc拦截器将会对其进行登录判断,有登录认证才能访问资源。
[urls] /index.html = anon /user/** = authc
Shiro的URL路径表达式为Ant 格式,路径通配符支持 ?
*
**
。
? :
匹配一个字符
*:
匹配零个或多个字符串
** :
匹配路径中的零个或多个路径
其中*
表示匹配零个或多个字符串,/*
可以匹配/hello
,但匹配不到/hello/
,因为*
通配符无法匹配路径。假设/hello
接口设置了authc拦截器,访问/hello
将会被进行权限判断,如果请求的URI为/hello/
呢,/*
URL路径表达式将无法正确匹配,放行。然后进入到spring(Servlet)拦截器,spring中/hello
形式和/hello/
形式的URL访问的资源是一样的。(从大佬那搬运过来的)
五、漏洞复现
vulhub靶场
命令:docker-compose up -d (打开靶机)
命令:docker-compose down(关闭靶机)
命令:docker ps (查看镜像)
命令:docker stop ID (关闭镜像)
点击login需要填写账号密码
而在url中直接添加路径:/xxx/…;/admin/,即可绕过验证
六、url请求绕过过程
CVE-2020-1957
客户端请求URL: /xxx/..;/admin/
Shrio 内部处理得到校验URL为 /xxxx/..
,校验通过
SpringBoot 处理 /xxx/..;/admin/
, 最终请求 /admin/
, 成功访问了后台请求。
CVE-2020-11989
客户端请求URL: /;/test/admin/page
Shrio 内部处理得到校验URL为/
,校验通过
SpringBoot最终请求 /admin/page
, 成功访问了后台请求。
CVE-2020-13933
客户端请求URL:/admin/;page
Shrio 内部处理得到校验URL为/admin/
,校验通过
SpringBoot最终请求 /admin/;page
, 成功访问了后台请求。
七、修复建议
升级到最新版本