当前位置:   article > 正文

Shiro反序列化550漏洞复现

shiro反序列化

介绍

Shiro 是一个强大且易于使用的 Java 安全框架,用于身份验证、授权和会话管理等功能。它提供了一套灵活的基于角色的访问控制(RBAC)机制,可以轻松地集成到现有的 Java 应用程序中。

影响版本

Apache Shiro < 1.2.4

原理

shiro默认使用了Cookie RememberMe Manager,其处理cookie的流程是:得到rememberMe的cookie值–>Base64解码–>AES解密–>反序列化 然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。

shiro的身份认证工作流程

  1. 通过前端传入的值,
  2. 获取rememberMe cookie
  3. base64加密
  4. AES加密 (对称加解密)
  5. 反序列化

环境搭建

shiro_attack-4.5.3的jar包

链接:https://pan.baidu.com/s/1td87XMr-GspJCHl6vpCFnw 
提取码:i19d

 更新源

 安装容器

安装靶场

启动靶场

 docker run -d -p 80:8080 medicean/vulapps:s_shiro_1

     run   启动

     -d    后台启动

     -p    端口映射  真实机端口:docker端口

查看端口,如果链接超时,就关闭防火墙,具体内容大家自己分析。

 访问服务器80端口

 输入账密登录

 抓包

 这里使用shiro_attack jar包

 

 命令执行

生成内存马

连接成功

 tips:只要rememberMe的AES加密密钥泄漏,无论shiro什么版本都会导致反序列化漏洞。

防御手法:

反序列化漏洞是一种安全漏洞,攻击者可以利用恶意序列化数据来执行任意代码,从而获取系统权限或对系统进行攻击。这种漏洞可能存在于应用程序中使用的任何支持反序列化的组件中,而与 Shiro 框架本身无直接关系。

为了防止反序列化漏洞的利用,以下是一些推荐的做法:

1、更新和使用受信任的组件:确保使用的第三方库和组件是最新的版本,并且来自可信的来源,这有助于减少已知的反序列化漏洞。

  1. 删除代码里的默认密钥

  2. 升级shiro到1.2.5及以上

2、验证和控制反序列化输入:在反序列化过程中,要验证和控制输入数据的合法性和完整性,避免接受未信任的、来自不可信来源的序列化数据。

3、实施安全策略:实施严格的访问控制策略,限制对敏感对象和操作的访问,以减少潜在的攻击面。

4、审查和审计代码:定期进行代码审查和安全审计,以识别和修复可能存在的漏洞。

Shiro 550与721漏洞的区别


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框架的登录流程也是可以自定义的
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/512945
推荐阅读
相关标签
  

闽ICP备14008679号