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

水下月 2021-02-18
Web安全 发布于 2021-02-18 16:11:52 阅读 257 评论 0

一 漏洞原理:

Apache Shiro框架提供了记住我(RememberMe)的功能,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问。

Shiro对rememberMe的cookie做了加密处理,shiro在CookieRememberMeManager类中将cookie中rememberMe字段内容分别进行序列化、AES加密、Base64编码操作。

在识别身份的时候,需要对Cookie里的rememberMe字段解密。根据加密的顺序,不难知道解密的顺序为:

获取rememberMe cookie

但是,AES加密的秘钥Key被硬编码在代码里,意味着每个人通过源代码都能拿到AES加密的秘钥。因此,攻击者做一个恶意的对象,并且对其序列化,AES加密,base64编码后,作为cookie的rememberMe字段发送。Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。

二 影响版本

Shiro < 1.2.5 版本,当未设置用于“remember me” 特性的AES密钥时,存在反序列化漏洞,可远程命令执行。

三 准备环境

1,进入 vulhub/shiro/CVE-2016-4437目录下,使用 docker-compose up -d 启动环境
2,浏览器访问http://xxxxxx:8080,出现以下界面说明环境搭建成功。

https://github.com/feihong-cs/ShiroExploit/releases/tag/v2.3

四、漏洞复现

1,打开下载好的ShiroExploit.jar

2,进入图形化Shiro检测界面,输入测试网址,点击下一步。

3,选择第一个使用ceye.io进行漏洞检测,点击下一步。

4,开始执行检测

5,同时在图形界面中勾选第一个反弹shell,填入相应信息,点击执行。

6,自己主机上进行监听

7,查看权限

五 漏洞修复

1.升级Shiro版本到1.2.5及以上
2.现在使用的rememberMe的AES加密密钥泄露,请自己base64一个AES的密钥,或者利用官方提供的方法生成密钥

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!