环境搭建

git clone https://github.com/apache/shiro.git shiro-rootcd shiro-root
git checkout -f shiro-root-1.4.0

参考之前SHIRO-550的搭一下就行

漏洞分析

首先是SHIRO-550,触发点是cookie中的RememberMe,漏洞触发流程:

  1. base64 解码
  2. 使用 AES 解密
  3. 反序列化解密后的字符串

shiro-1.25以前,AES密钥是硬编码到源码中的,因此可以更改RememberMe的值进行反序列化RCE

而1.2.5之后,shiro采用了随机密钥,也就引出了SHIRO-721,通过padding oracle attack的方式得到,

根据p0师傅之前的文章,在shiro中,当我们更改padding值时,padding正确但反序列化错误则会爆deserialize error;padding错误爆padding error,
具体处理代码如下:

padding正确但爆反序列化error
try {
    ObjectInputStream ois = new ClassResolvingObjectInputStream(bis);
    @SuppressWarnings({"unchecked"})
点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖