0x00背景

尽管这是个很老的漏洞了。但是一直没有从代码层面上跟过,自己也不怎么会Java,网上找几个文章简单跟一下就好。

0x01开始

我知道的是漏洞出现在cookie中:

大概是rememberMe=经过AES硬编码然后base64之后的cookie值。

由于涉及到设置cookie的key为rememberMe的操作,先跟一下CookieRememberMemanager.java:

image-20210726163703777

一进来它就继承了一个类,ctrl左进去:

然后就看到了我们熟知的硬编码的密钥:

image-20210726163749565

这里为什么说硬编码呢,因为AES是对称加密,也就是通过固定的密钥完全可以解密密文了。

这个是造成可以利用的原因,也是一部分漏洞的原因。

然后由于这是一个反序列化漏洞,现在能把cookie值解密出来大致是了解了。

根据paper:https://paper.seebug.org/shiro-rememberme-1-2-4/

上的描述,对生成的二进制流文件.bin进行base64解码然后

发现存在反序列化的痕迹:

image-20210726164849303

然后跟踪存在反序列化的对象:

发现存在PrincipalCollection对象被序列化操作了:

image-20210726164259035

然后这儿的PrincipalCollection点进去是个接口。

使用快捷键ctrl+alt+B找到实现类:SimplePrincipalCollection

然后就是涉及到序列化和反序列化的两个函数:

image-20210726164727556

image-20210726164744476

由于自己很菜。差不多只能分析到这里了。具体的利用链以后再慢慢看吧。

0x02结语

现在的漏洞分析依然很浅显,只能简单了解大致粗糙的漏洞造成原因。后续进一步学习Java基础安全知识来补足,希望有一天能达到跟踪完能写出exp的程度。