Shiro漏洞复现
简介
Apache Shiro™是一个功能强大且易于使用的 Java 安全框架,它执行身份验证、授权、加密和会话管理。借助 Shiro 易于理解的 API,您可以快速轻松地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。
CVE-2016-4437
Apache Shiro 反序列化漏洞
漏洞原理
Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。其默认密钥的base64编码后的值为
kPH+bIxk5D2deZiIxcaaaA==
,这里就可以通过构造恶意的序列化对象进行编码,加密,然后作为cookie加密发送,服务端接收后会解密并触发反序列化漏洞。
处理流程:得到rememberMe的cookie值-->Base64解码-->AES解密-->反序列化
漏洞分析
AbstractRememberMeManager.java中实现rememberMe的解密代码
getRememberedSerializedIdentity返回cookie中rememberMe的base64解码后的bytes
继续调用convertBytesToPrincipals方法对解码后的bytes处理,跟进convertBytesToPrincipals方法,调用decrypt方法对bytes进行解密。
protected PrincipalCollection convertBytesToPrincipals(byte[] bytes, SubjectContext subjectContext) {
if (getCipherService() != null) {
bytes = decrypt(bytes);
}
return deserialize(bytes);
}
解密后得到的结果为序列化字符串的bytes。
然后进入到deserialize方法进行反序列化,即用户可控的rememberMe值经过解密后进行反序列化从而引发反序列化漏洞。
漏洞复现
直接使用vulhub,vulhub/shiro/CVE-2016-4437/
执行如下命令启动一个使用了Apache Shiro 1.2.4的Web服务:
docker-compose up -d
服务启动后,访问http://your-ip:8080
我们直接使用工具进行测试,工具地址
同时此工具可以直接上传内存马,非常便捷
CVE-2020-1957
Apache Shiro权限绕过
漏洞原理
在Apache Shiro 1.5.2以前的版本中,在使用Spring动态控制器时,攻击者通过构造..;这样的跳转,可以绕过Shiro中对目录的权限限制。
漏洞复现
/vulhub-master/shiro/CVE-2020-1957
运行docker-compose up -d
访问页面
直接访问/admin目录,会跳转到登陆页面
此时我们增加..;绕过目录限制
成功访问到admin目录下
总结
最近以学习红队知识为主,内网还有主流框架漏洞这一块都在跟进,shiro实战中利用还是比较多的,通过复现,看能不能在实战中打下几个shiro。
要记住在hw红队时,拿不下靶标的感觉,好好努力
最近因为某人非常开心,心态很好,学习动力也是满满,继续加油吧!凡是过往,皆为序章。希望最后的几个月大学时光能好好把握