1、背景
Apache Shiro是一款强大且易用的Java安全框架,使用范围非常广泛。Shiro默认使用CookieRememberMeManager,其处理cookie的流程是:rememberMe cookie值–>Base64解码–>AES解密–>反序列化。在Shiro<=1.2.4版本下,AES密钥是硬编码的,导致攻击者可以构造加密的反序列化数据执行任意命令。
下载Shiro 1.2.4的代码,先看看CookieRememberMeManager.java文件,发现其继承AbstractRememberMeManager类。
![0f7bb4c7435abdce54821272a923023e.png](https://i-blog.csdnimg.cn/blog_migrate/5c3b66fc5baeb608655a60e2c6c4ff81.jpeg)
跟进到AbstractRememberMeManager类,在80行发现定了私有常量DEFAULT_CIPHER _KEY_BYTES,值为Base64.decode("kPH+bIxk5D2deZiIxcaaaA=="),而这就是我们需要找的硬编码AES key。
![6b1c11429345de1c409be175dbb06988.png](https://i-blog.csdnimg.cn/blog_migrate/66102a8274fcb1f2f11598e0ee721d3e.jpeg)