
介绍
Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。
Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。
区别
shiro有550和721,两者都是使用 Java 序列化 ---> 使用密钥进行 AES 加密 ---> Base64 加密 ---> 得到加密后的 remember Me 内容(解密原理反过来) 详细解读:问题出在 AES 加密的密钥 Key 被硬编码在代码里,这意味着攻击者只要通过源代码找到 AES 加密的密钥,就可以构造一个恶意对象,对其进行序列化,AES 加密,Base64 编码,然后将其作为cookie 的 remember Me 字段发送,Shiro 将 rememberMe 进行解密并且反序列化。550的话他的key是固定的,我们可以去大量收集之后爆破,而721的key是随机生成的,所以721的漏洞利用要比550复杂。
漏洞环境搭建
创建一台新的虚拟机,我这里使用的是centos7,具体配置如下:
之后使用xshell去连接虚拟机,按一下步骤去安装docker后去部署vulhub靶场。
# 安装dokcer
curl -s https://get.docker.com/ | sh
# 安装docker-compose
curl -s https://bootstrap.pypa.io/get-pip.py | python3
pip install docker-compose
# 安装完成后,执行docker-compose -v,有返回则说明安装成功。
# 部署vulhub
git clone https://github.com/vulhub/vulhub.git
启动靶场
systemctl start docker
cd shiro/CVE-2016-4437
docker-compose up -d
漏洞特征
靶场启动后浏览器访问ip:8080,默认账号密码:admin:vulhub
我们先将cookie删除,然后重新登录,用错误的账号密码登录,然后将抓包内容打到burp中分析
请求中发现rember-me,响应中回rememberMe=deleteMe。
我们中心用正确的账号密码登录尝试
我们可以看到响应中返回set-cookie。
漏洞复现
这里我们使用shiro利用工具:
Release ShiroExploit v2.51 Final · feihong-cs/ShiroExploit-Deprecated · GitHub
爆破成功,我们去执行命令查看下
ok利用成功。
我们使用完靶场之后执行docker-compose down去关闭靶场,释放虚拟机的资源。
总结
这里我们是已经知道shiro漏洞是550,如果是721的话使用这个工具没办法去利用,因为他的key是随机的。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)