shiro默认使用
CookieRememberMeManager
,对
rememberMe
的
cookie
做了
加密
处理,在
CookieRememberMeManaer
类中将
cookie
中
rememberMe
字段内容先后
进行序列化
=>AES
加密
=>Base64
编码
操作。在识别身份的时候,需要对
Cookie
里的
rememberMe
字段解密。根据加密的顺序
可以推断出解密的
顺序为获取
cookie->base64
解码
->AES
解密
->
反序列化
。
AES加密的
KEY
值被
硬编码
在代码中,可以从源码中找到
KEY
值。攻击者可以构造恶意码,将其序列化
->AES
加密
->base64
编码,最后作为
cookie
值得
rememberMe
字段发送,
shiro
将接收到的
rememberMe
字段进行解码
-
解密
-
反序列化,如果成功,则执行恶意代码,构成攻击。
在 1.2.4
版本前,是默认
ASE
秘钥,
Key:
kPH+bIxk5D2deZiIxcaaaA==
,可以直接反序列化执行恶意代码。
而在1.2.4
之后,
ASE
秘钥就不为默认了,需要获取到
Key
才可以进行渗透
漏洞特征:
shiro
反序列化的特征:在返回包的
Set-Cookie
中存在
rememberMe=deleteMe
字段