Shiro反序列化漏洞
一、Shrio反序列化导致命令执行(Shiro-550 CVE-2016-4437)
1.1 漏洞介绍
1.1.1 漏洞简介
Apache Shiro是一款开源企业常见JAVA安全框架,提供身份验证、授权、密码学和会话管理。java中的权限框架有SpringSecurity和Shiro,由于Spring功能强大但复杂,Shiro的简单强大,扩展性好因此用的还是很多。
1.1.2 影响版本
Apache Shiro < 1.2.4
1.1.3 漏洞原理
Apache Shiro框架提供了记住我的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。cookie的key为RememberMe,cookie的值是经过相关信息进行序列化,然后使用AES加密(对称),最后再使用Base64编码处理。服务端在接收cookie时:
检索RememberMe Cookie的值
Base 64解码
AES解密(加密密钥硬编码)
进行反序列化操作(未过滤处理)
攻击者可以使用Shiro的默认密钥构造恶意序列化对象进行编码来伪造用户的Cookie,服务端反序列化时触发漏洞,从而执行命令。
1.1.4 漏洞特征
进行登录,返回包中查看是否有rememberMe=deleteMe字段
可以尝试将cookie 改为rememberMe=1 ,来查看返回包是否有rememberMe=deleteMe字段。
1.1.5 漏洞影响
只要rememberMe的AES加密密钥泄漏,无论shiro什么版本都会导致反序列化漏洞。
1.2 环境配置
受害者IP:192.168.35.139(vulhub、docker)
cd /vulhub/shiro/CVE-2016-4437
docker-compose up -d
root@kali:~# service docker start #启动docker
root@kali:~# cd vulhub #打开vulhub
root@kali:~/vulhub# cd shiro #打开shiro环境
root@kali:~/vulhub/shiro# cd CVE-2016-4437
root@kali:~/vulhub/shiro/CVE-2016-4437# docker-compose up -d #启动环境
docker ps -a :#显示服务器内全部容器(同时显示出映射的端口号)
docker-compose down #关闭docker环境
》》进入目标目录下,启动一个shiro1.2.4的web服务
docker-compose up -d:启动docker环境
docker-compose up -d
docker ps -a :显示服务器内全部容器(同时显示出映射的端口号)
docker ps -a
》》访问web页面
能够访问说明环境搭建成功!
1.3 漏洞检测
演示环境:
攻击者IP:192.168.35.1
UI一键利用工具:
GitHub地址:https://github.com/feihong-cs/ShiroExploit
》》从地址下载一键利用工具,双击ShiroExploit.jar
》》输入目标URL 点击下一步
1.4 漏洞利用
》》反弹shell
在kali上开启nc监听本地1111端口,用来接收反弹的Shell
nc -l -p 1111
执行fire
反弹成功 执行whoami
docker-compose down 关闭docker环境 完成复现
docker-compose down
1.5 防御措施
升级Shiro到最新版本
WAF拦截Cookie中长度过大的rememberMe值
参考:
http://luckyzmj.cn/posts/9db50098.html
https://blog.csdn.net/Aaron_Miller/article/details/106475088