Shiro漏洞复现

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红队时,拿不下靶标的感觉,好好努力

最近因为某人非常开心,心态很好,学习动力也是满满,继续加油吧!凡是过往,皆为序章。希望最后的几个月大学时光能好好把握

posted @ 2022-02-20 11:25  kar3a  阅读(1186)  评论(0编辑  收藏  举报