Apache Shiro框架进行登录,服务端在接收cookie时,会经过下面的流程:
1、检索RememberMe Cookie的值
2、Base64解码
3、AES解密(加密密钥硬编码)
4、进行反序列化
操作(未过滤处理)
5、攻击者可以使用Shiro的默认密钥构造恶意序列化对象
进行编码来伪造用户的Cookie,服务端反序列化时触发漏洞,从而执行命令
1、这两个漏洞主要区别在于Shiro550使用已知密钥碰撞
,只要有足够密钥库(条件较低),不需要Remember Cookie
2、Shiro721的ase加密的key基本猜不到,系统随机生成,可使用登录后rememberMe去爆破正确的key值,即利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀
,然后精心构造 RememberMe Cookie 值来实现反序列化漏洞攻击,难度高
1、Shiro框架1.2.4版本之前的登录时默认是先验证
"rememberMe" Cookie的值,而不是先进行身份验证,这也是Shiro550漏洞能够利用的原因之一,攻击者可以利用该漏洞通过伪造"rememberMe" Cookie的值来绕过Shiro框架的身份认证机制,从而实现未授权访问
2、Shiro框架1.2.4版本之后的登录时先进行身份验证,而不是先验证"rememberMe" Cookie的值,所以攻击者需要知道受害者已经通过登录验证,并且Shiro框架已经为受害者创建了一个有效的会话,以便攻击者可以利用该会话ID进行身份伪造并绕过Shiro框架的权限控制
机制
3、同时,Shiro框架的登录流程也是可以自定义的