Apache shiro介绍
Apache Shiro是一种功能强大且易于使用的Java开源安全框架,它具有身份验证、访问授权、数据加密、会话管理等功能。
漏洞原理
当我们选择remember me时,服务器会将我们的身份验证信息先进行序列化,再使用AES加密,经过base64编码,写入到cookie。
在识别身份时,根据加密的顺序,来对应解密的顺序,base64解码--AES解密--反序列化,这里shiro没有对反序列化的内容进行限制和过滤,并且AES加密的密钥Key被硬编码在代码里,因此通过源代码能拿到AES加密的密钥。攻击者构造一个恶意的对象,并将它序列化,AES加密,base64编码后,作为cookie的rememberMe字段发送出去。Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。
影响版本
Apache Shiro <= 1.2.4
漏洞复现
切换到对应目录启动docker
cd CVE-2016-4437
docker-compose up -d
浏览器访问http://你的服务器ip:8080
,显示这个界面即为搭建成功
随意输入用户名和密码,勾选remember me,抓包
这里用到一个叫shiro反序列化综合利用增强版的工具,把url输入进去,爆破密钥
爆破利用链
到命令执行界面输入touch 123.txt
在服务器终端输入docker ps
找到对应容器的名字
输入docker exec -it 容器名 bash
进入docker查看123.txt是否建立
使用其它工具设置代理,把数据包发送到burp上,执行命令,抓包可以仔细的观察rememberMe字段内容,和上面我们分析的一样先进行序列化,再使用AES加密,经过base64编码,写入到cookie,发送给Shiro从而执行命令。
修复建议
1.使用更高版本的shiro
2.使用未公开的key值