目录
- shiro介绍
- 框架介绍
- 判断是否使用shiro框架
- 环境搭建
- CVE-2010-3863
- 漏洞原理
- 影响版本
- 漏洞复现
- CVE-2016-4437
- 漏洞原理
- 影响版本
- 漏洞复现
- CVE-2020-1957
- 漏洞原理
- 影响版本
- 漏洞复现
- shiro-721
- 拉取环境
- 漏洞原理
- 漏洞复现
shiro介绍
框架介绍
Apache Shiro提供了认证、授权、加密和会话管理功能,将复杂的问题隐藏起
来,提供清晰直观的API使开发者可以很轻松地开发自己的程序安全代码。
Shiro将目标集中于Shiro开发团队所称的“四大安全基石”-认证
(Authentication)、授权(Authorization)、会话管理(Session
Management)和加密(Cryptography)
- 认证(Authentication):用户身份识别。有时可看作为“登录(login)”,它
是用户证明自己是谁的一个行为。 - 授权(Authorization):访问控制过程,好比决定“认证(who)”可以访问
“什么(what)”. - 会话管理(SessionManagement):管理用户的会话(sessions),甚至在
没有WEB或EJB容器的环境中。管理用户与时间相关的状态。 - 加密(Cryptography):使用加密算法保护数据更加安全,防止数据被偷
窥。
判断是否使用shiro框架
cookie中添加rememberMe字段,返回包中发现cookie信息中存在rememberMe=deleteMe
环境搭建
使用docker搭建vulhub靶场
下载vulhub文件
git clone https://github.com/vulhub/vulhub.git
下载之后,有很多的组件、cms漏洞类型
cd 到shiro 文件夹
进入要开启的环境
对靶场进行编译
docker-compose build
运行漏洞环境
docker-compose up -d
查看当前运行环境
docker ps
可以看到开放的端口号
在服务器上搭建时,记得添加一下防火墙策略
访问靶场的8080端口,搭建成功
CVE-2010-3863
漏洞原理
在Apache Shiro 1.1.0以前的版本中,shiro 进行权限验证前未对url 做标准化处
理,攻击者可以构造/、//、/./、/…/ 等绕过权限验证。
影响版本
shiro < 1.1.0和JSecurity 0.9.x
漏洞复现
直接访问/admin时,会重定向到登录页面
访问/./admin
成功登录admin页面
CVE-2016-4437
漏洞原理
属于shiro550漏洞。
Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为
remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,
触发Java反序列化漏洞,进而在目标机器上执行任意命令。
shiro默认使用CookieRememberMeManager,对rememberMe的cookie做了加密
处理,在CookieRememberMeManaer类中将cookie中rememberMe字段内容先后
进行序列化、AES加密、Base64编码操作。在识别身份的时候,需要对Cookie里
的rememberMe字段解密。根据加密的顺序可以推断出解密的顺序为获取cookiebase64解码-AES解密-反序列化。
影响版本
Apache Shiro <= 1.2.4
漏洞复现
工具:https://github.com/SummerSec/ShiroAttack2/releases
找到了key,再爆破利用链
执行命令,成功
CVE-2020-1957
漏洞原理
我们需要分析我们请求的URL在整个项目的传入传递过程。在使用了shiro的项目
中,是我们请求的URL(URL1),进过shiro权限检验(URL2),昀后到springboot项目
找到路由来处理(URL3)
漏洞的出现就在URL1,URL2和URL3 有可能不是同一个URL,这就导致我们能
绕过shiro的校验,直接访问后端需要首选的URL。本例中的漏洞就是因为这个原
因产生的。
Shiro框架通过拦截器功能来对用户访问权限进行控制,如anon, authc等拦截器。
anon为匿名拦截器,不需要登录即可访问;authc为登录拦截器,需要登录才可以
访问。
影响版本
Apache Shiro < 1.5.2
漏洞复现
点击login
访问/admin时会重定向
因为代码层面加上;就会识别成绕过 后面加个/也可以
URL改为/xxx/…;/admin/绕过了登录,直接访问成功!
shiro-721
拉取环境
文件里没有shiro-721,得自己下载一下
git clone https://github.com/3ndz/Shiro-721.git
cd Shiro-721/Docker
docker build -t shiro-721 .
docker run -p 8080:8080 -d shiro-721
漏洞原理
在用户进行登录的时候,Apache Shiro 提供 RemenberMe 功能,可以存储 cookie,期间使用的是AES-128-CBC进行加密,可以通过Padding Oracle加密生成的攻击代码来重新构造一个恶意的 rememberMe 字段,重新请求网站,进行反序列化攻击,最终导致任意代码的执行,攻击者无需知道 rememberMe 的加密密钥。
漏洞复现
直接使用工具