Apache Shiro 反序列化漏洞复现550/721(CVE-2016-4437)
Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)
0x01简介
Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。
Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。
0x01简介
Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。
Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。
0x02漏洞影响
只要rememberMe
的AES加密密钥泄露,无论shiro是什么版本都会导致反序列化漏洞。
0x03漏洞分析
先看下官网漏洞说明:https://issues.apache.org/jira/browse/SHIRO-550
Shiro提供了记住我(RememberMe)的功能,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问。
Shiro对rememberMe的cookie做了加密处理,shiro在CookieRememberMeManaer
类中将cookie中rememberMe字段内容分别进行 序列化、AES加密、Base64编码操作。
在识别身份的时候,需要对Cookie里的rememberMe字段解密。根据加密的顺序,不难知道解密的顺序为:
- 获取rememberMe cookie
- base64 decode
- 解密AES
- 反序列化
但是,AES加密的密钥Key被硬编码在代码里,意味着每个人通过源代码都能拿到AES加密的密钥。因此,攻击者构造一个恶意的对象,并且对其序列化,AES加密,base64编码后,作为cookie的rememberMe字段发送。Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。
0x03漏洞分析
先看下官网漏洞说明:https://issues.apache.org/jira/browse/SHIRO-550
Shiro提供了记住我(RememberMe)的功能,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问。
Shiro对rememberMe的cookie做了加密处理,shiro在CookieRememberMeManaer
类中将cookie中rememberMe字段内容分别进行 序列化、AES加密、Base64编码操作。
在识别身份的时候,需要对Cookie里的rememberMe字段解密。根据加密的顺序,不难知道解密的顺序为:
- 获取rememberMe cookie
- base64 decode
- 解密AES
- 反序列化
但是,AES加密的密钥Key被硬编码在代码里,意味着每个人通过源代码都能拿到AES加密的密钥。因此,攻击者构造一个恶意的对象,并且对其序列化,AES加密,base64编码后,作为cookie的rememberMe字段发送。Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。
0x04漏洞复现
实验环境
靶机 shiro1.1.24
攻击机 windows10
1.首先用docker搭建一个环境
2.勾选remenberMe选项,然后抓包,相应包中有rememberME字段,证明其为shiro框架
3.使用shiro反序列化检测工具测试
github:https://github.com/feihong-cs/ShiroExploit/releases
工具的大致原理:
1.检查是否存在默认的key。
2.然后借助ysoserial.jar生成payload,进行探测
3.探测可用的gadget
4.执行命令
4.getshell
Apache Shiro 反序列化漏洞(Shiro-721 CVE-2016-4437)
0x00 漏洞介绍
0x01 影响版本
0x02 漏洞指纹
2.URL中有shiro字样
3.有一些时候服务器不会主动返回 rememberMe=deleteMe, 直接发包即可
0x03 利用技巧
0x04 漏洞原理
0x05 环境搭建
靶机 shiro 1.2.4
攻击机 windows10
整体思路#
访问登录页面,登录
请求account页面,只需要抓包时能获取到rememberMe=xxx都可
利用exp爆破payload的加密密文
获取密文后对之前请求的页面以rememberMe=xxx的格式重放
获取到命令执行结果
1.登陆shiro,输入正确的账号密码,抓包可以看到cookie #有些版本cookie是在左边,有些是在右边
2.依然使用之间的工具,选择shiro721,输入记录到的rememberMe
3.工具会自动开始爆破,爆破时间会比较长
具体原理可以看
https://www.freebuf.com/articles/network/221838.html
https://www.freebuf.com/articles/database/151167.html
这里面涉及到密码学,我看得有点懵,有能力的小伙伴可以去研究
apache shiro命令执行流量分析
Apache Shiro 认证绕过漏洞(CVE-2020-1957)
在Apache Shiro 1.5.2以前的版本中,在使用Spring动态控制器时,攻击者通过构造`..;`这样的跳转,可以绕过Shiro中对目录的权限限制。
实验环境
Spring 2.2.2与Shiro 1.5.1的应用
这个应用中对URL权限的配置如下:
```java
@Bean
public ShiroFilterChainDefinition shiroFilterChainDefinition() {
DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
chainDefinition.addPathDefinition("/login.html", "authc"); // need to accept POSTs from the login form
chainDefinition.addPathDefinition("/logout", "logout");
chainDefinition.addPathDefinition("/admin/**", "authc");
return chainDefinition;
}
```
漏洞复现
直接请求管理页面`/admin/`,无法访问,将会被重定向到登录页面:
构造恶意请求`/xxx/..;/admin/`,即可绕过权限校验,访问到管理页面
参考: https://dyblogs.cn/dy/2308.html
https://www.cnblogs.com/qianxinggz/p/13388405.html#13%E3%80%81%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86
https://www.cnblogs.com/backlion/p/14077791.html