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 漏洞介绍

    Apache Shiro 存在高危代码执行漏洞。该漏洞是由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。
 

0x01 影响版本

Apache Shiro < 1.42
 

0x02 漏洞指纹

1.set-Cookie: rememberMe=deleteMe
2.URL中有shiro字样
3.有一些时候服务器不会主动返回 rememberMe=deleteMe, 直接发包即可
 

0x03  利用技巧

1.该漏洞需要登录后获取到合法的Cookie: rememberMe=XXX后才可以进行利用, 看起来不是很好利用 但实际上有一些网站是开放注册的, 而且这个洞不需要知道服务端密钥 所以后续的利用还是可以同Shiro-550一样利用, 而且这里是AES加密的, 自带过WAF属性 ;
2.如果攻击没有生效, 可以试一下删除Cookie中的JSESSIONID 字段, 很多时候这个字段存在的话, 服务端不会去处理 rememberMe。
 

0x04 漏洞原理

由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。
 

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

 

 

 

 

 

 

 

 

posted @ 2021-05-11 11:40  paku  阅读(1338)  评论(0编辑  收藏  举报