碰到shiro反序列化漏洞,大家都是怎么解决的
项目是借用一个开源项目,然后被发现有shiro反序列化漏洞,如下图:
有了以上漏洞,就可以在服务器执行任意指令。如下图:
解决过程:
1、升级shiro到最新版本1.9.1,却发现还是可以挂马;
2、查开源代码,发现代码里面有指定密钥(可能是早期版本的shiro需要吧),如下:
cookieRememberMeManager.setCipherKey(Base64.decode("fCq+/xW488hMTCD+cmJ3aQ=="));
删除后,改成随机密钥。
3、用shiro反序列化漏洞工具扫描,已经无法直接挂马,但还是有两点,可以扫描发现shiro框架,可以爆力穷举密钥。如下图:
当然16字节的密钥,是不是很稳,这个就不讨论了。
所谓不怕贼偷就怕贼惦记。
然后就试了能不能优化,
改rememberMe关键字,但是用postman,在返回cookie里面可以轻松找到关键字;
然后再用工具 ,假设有耐心的情况下,依然可以完美入侵,如下图:
了解shiro反序列化漏洞的原理知道,攻击者是通过cookie攻击,再进行反序列化的利用,这里也没有找到如何关闭rememberMe功能,
就打印了一下cookie的内容
发现攻击者是先尝试发一个rememberMe,检测是否有shiro框架可以利用。
如果有shiro框架,就发第二段cookie内容,rememberMe的值是一段攻击代码,做了base64加密
既然这样,
干脆就拦截删除rememberMe的cookie值,
当然,您们也可以对所有开放的路径做个性化的处理,
(如果您们有其他办法,欢迎一起讨论讨论)