shiro组件漏洞分析(一)

本文介绍了ApacheShiro1.2.4版本中的反序列化漏洞,涉及硬编码的AES密钥导致攻击者可构造恶意数据,通过控制序列化和反序列化过程进行潜在的恶意操作。作者提供了环境搭建和漏洞分析的详细步骤,包括无依赖和有依赖于commons-collections的情况。

shiro简介

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

官方网站:Apache Shiro | Simple. Java. Security.

shiro-550(CVE-2016-4437)

漏洞简介

官方issues:https://issues.apache.org/jira/browse/SHIRO-550

Apache Shiro框架提供了记住我(RememberMe)的功能,功能表现为关闭浏览器再次访问时无需再登录即可访问。shiro默认使用CookieRememberMeManager,对rememberMe的cookie做了加密处理,在CookieRememberMeManaer类中将cookie中rememberMe字段内容先后进行序列化、AES加密、Base64编码操作。服务器端识别身份解密处理cookie的流程则是: 获取rememberMe cookie ->base64 解码->AES解密(加密密钥硬编码)->反序列化(未作过滤处理)

但是AES加密的密钥Key被硬编码在代码里,这就意味着每个人通过源代码都能拿到AES加密的密钥。因此,攻击者可以构造一个恶意的对象,并且对其序列化、AES加密、base64编码后,作为cookie的rememberMe字段发送。shiro将rememberMe进行解密并且反序列化,最终就造成了反序列化漏洞。如果在返回包的 Set-Cookie 中存在 rememberMe=deleteMe 字段,那么就可能存在此漏洞。

影响版本

Apache Shiro <= 1.2.4

环境搭建

直接使用shiro官方的samples-web进行分析

git clone https://github.com/apache/shiro.git
cd ./shiro
# 恢复到shiro-1.2.4版本
git checkout shiro-root-1.2.4

打包前需要对./shiro/samples/web/pom.xml进行一些修改:

     <!--  需要设置编译的版本 -->
     <properties>
        <maven.compiler.source>1.6</maven.compiler.source>
        <maven.compiler.target>1.6</maven.compiler.target>
    </properties>
...
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <!--  这里需要将jstl设置为1.2,添加如下一行 -->
            <version>1.2</version> 
            <scope>runtime</scope>
        </dependency>
.....
        <!--  这里添加CC3.2.1库是为了方便演示有依赖的反序列化RCE -->
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值