Apache Shiro反序列化漏洞复现并利用(CVE-2016-4437)

本文详细介绍了Apache Shiro的CVE-2016-4437反序列化漏洞,包括漏洞原理、利用条件、环境搭建、漏洞辨别和修复建议。攻击者可以通过构造恶意对象,利用默认加密密钥进行序列化、加密和编码,实现远程代码执行或绕过访问限制。修复措施包括升级Shiro到1.2.5及以上版本,更换默认密钥并避免密钥泄露。
摘要由CSDN通过智能技术生成

关于CVE-2016-4437漏洞描述

Apache Shiro 1.2.5之前的版本中,当没有为“记住我”功能配置密码密钥时,远程攻击者可通过未指定的请求参数执行任意代码或绕过预期的访问限制。

影响版本:Apache Shiro <= 1.2.4

漏洞原理

Apache Shiro框架提供了Remember Me功能,用户登录成功后会生成经过加密并编码的Cookie,即使关闭了浏览器,再次访问时无需进行登录操作即可以之前的身份访问网站。

默认情况下,Shiro使用CookieRememberMeManager,这将对用户身份进行序列化、加密和编码,以便以后检索。因此,当它收到来自未经身份验证的用户请求时,它将通过执行以下操作来查找其记住的身份:

  • 检索rememberMe的cookie值
  • Base64解码
  • 使用AES解密
  • 使用Java序列进行反序列化操作(ObjectInputStream)

但是,默认加密密钥是硬编码的,这意味着任何有权访问源代码的人都知道默认加密密钥是什么。因此,攻击者可以创建恶意对象,对其进行序列化、编码,然后将其作为cookie发送。然后Shiro将解码并反序列化,这意味着你的恶意对象现在在服务器上。通过仔细构造对象,可以让它们运行一些恶意代码。

(以上说明来自Apache官方说明:SHIRO-550官方说明

所以我们就可以将我们想要上传的指令进行逆向操作,即使用Java序列进行序列化操作->使用AES加密->Base64编码,将得到的值作为rememberMe的值上传,这样就可以完成利用。

工具准备

  1. 攻击机kali(192.168.15.133)
  2. Linux服务器(CentOS7:192.168.15.148)
  3. Linux服务器下Docker环境
  4. shiro_exp.py(用于生成rememberMe的值,本文后面展示源码)
  5. ysoserial.jar(一个概念验证工具,用于生成利用不安全的Java对象反序列化的有效负载)

环境搭建

(需要预先配置好Docker环境)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值