Loading

Apache Shiro 反序列化漏洞 CVE-2016-4437 漏洞复现

什么是Shiro

Apache Shiro(简称 Shiro)是一个功能强大且易于使用的 Java 安全框架,用于身份验证、授权和加密等安全功能。它提供了一套统一的安全API,可以轻松地集成到Java应用程序中。
Shiro 的主要功能包括:

  1. 身份验证:Shiro 可以处理用户身份验证,支持各种常见的认证方式,如用户名/密码、LDAP、OAuth 等。它还提供了许多可插拔的身份验证 Realm,可以根据自己的需求进行定制。
  2. 授权:Shiro 提供了基于角色和权限的授权机制。您可以定义角色和权限,并在代码中进行简单的注解或编程式授权。Shiro 还支持细粒度的权限控制,可以对单个资源进行授权。
  3. 会话管理:Shiro 可以管理用户会话,支持不同的会话存储方式,如内存、数据库、Redis 等。它提供了会话管理和集群环境下的会话共享功能。
  4. 密码加密:Shiro 提供了对密码进行加密和散列的功能,可以确保用户密码的安全性。
    Web集成:Shiro 提供了与 Java Web 技术的无缝集成,支持常见的 Web 框架,如Spring MVC、Struts等。

工作原理

Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会将用户信息加密,
加密过程:用户信息 -> 序列化 -> AES加密 -> base64编码 -> Cookie中RememberMe。
如果用户勾选记住密码,那么在请求中会携带cookie,并且将加密信息存放在cookie的rememberMe字段里面,在服务端收到请求后,
解密过程:rememberMe -> base64解码 -> AES解密 -> 反序列化。
这个加密过程如果我们知道AES加密的密钥,那么我们把用户信息替换成恶意命令,就导致了反序列化RCE漏洞。
在shiro版本<=1.2.4中使用了默认密钥kPH+bIxk5D2deZiIxcaaaA==,这就更容易触发RCE漏洞。所以我们Payload产生的过程:
命令 -> 序列化 -> AES加密 -> base64编码 -> RememberMe

漏洞描述

漏洞 说明
受影响版本 Apache Shiro <= 1.2.4
漏洞名称 Shiro-550反序列化漏洞
漏洞编号 CVE-2016-4437
危害等级 高危
漏洞类型 RCE

漏洞特征

shiro550反序列化的特征:在返回包的 Set-Cookie 中存在 rememberMe=deleteMe 字段

漏洞复现

启动环境

解决docker拉不下来的问题:

sudo vim /etc/docker/daemon.json

#添加如下内容,第一个镜像网站管用
{
  "registry-mirrors":[
    "https://6kx4zyno.mirror.aliyuncs.com",
    "https://hub.daocloud.io",
    "https://registry.docker-cn.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}

启动docker

cd /vulhub-master/shiro/CVE-2016-4437
sudo docker -compose up -d

访问localhost:8080

判断框架

输入任意账号与密码,勾选RememberMe,点击登录,返回包set-Cookie会有rememberMe=deleteMe字段,说明使用了shiro框架,但是不知道版本。

漏洞验证

漏洞验证可以使用python脚本进行验证,第二种方式是使用相关工具进行验证。
方法一:

https://github.com/insightglacier/Shiro_exploit/tree/master

方法二:

修复建议

1、升级Apache Shiro高于1.2.4。
2、部署安全产品。
3、更换源码中的默认密钥。



参考链接

https://www.freebuf.com/articles/web/372862.html

posted @ 2024-07-23 23:44  Amsterdamnit  阅读(404)  评论(0)    收藏  举报