漏洞复现-CVE-2016-4437-Shiro反序列化

漏洞复现-CVE-2016-4437-Shiro反序列化

概述

Apache Shiro是一个开源的安全框架,为Java应用程序提供安全功能。在Apache Shiro 1.2.4之前的版本中,存在一种可导致远程代码执行的漏洞,该漏洞由序列化和反序列化不当引起,其中,攻击者通过构造恶意的序列化数据,可以在未经授权的情况下执行任意的Java代码。

该漏洞的漏洞编号为CVE-2016-4437,本文将介绍如何复现该漏洞以及如何进行修复。

环境准备

本次漏洞复现采用Docker搭建环境,具体环境搭建方式如下:

docker pull zer0ne/cve-2016-4437
  • 运行镜像
docker run -d -p 8080:8080 zer0ne/cve-2016-4437

漏洞复现

漏洞分析

漏洞复现之前,我们先来了解一下 Shiro 框架中的两个类:

  • Subject:表示一个执行主体,当前应用与客户端之间的交互都会在 Subject 中进行;
  • Session:一个会话对象,保存 Subject 对象在应用程序上下文中的状态。

接下来,我们分析一下漏洞的具体实现方式。

通过分析,我们可以发现漏洞的原因在于 Shiro 框架对 Session 对象的序列化和反序列化。在默认情况下,Shiro 将会把 Session 对象写入 Cookie 中,导致该 Cookie 被篡改,成功实现了会话劫持。

复现步骤

为了复现该漏洞,我们需要模拟攻击者向受害者发送恶意数据,实现代码执行。受害者本来预期操作只是访问某个页面,但却被攻击者利用该漏洞执行了恶意代码。

具体步骤如下:

  1. 打开 NetCat 连接漏洞目标,我们需要提交恶意请求,尝试执行Payload。执行以下命令:
nc 127.0.0.1 8080
  1. 设置 Cookie:我们需要将恶意Cookie添加到 HTTP 头中。HTTP 头信息包含3个参数:UID、rememberMe、JSESSIONID。其中 JSESSIONID 是下文关键,也就是 Shiro 会话硬编码的前缀。
GET /shiro HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Cookie: UID=test;rememberMe=deleteMe;JSESSIONID=1ohaol8q3ixe712levf23lt6of

  1. Payload 工具:受害者当前访问的页面地址为 /shiro,而 Shiro 框架在执行 URL 认证时会将 Cookie 中的 JSESSIONID 对应值作为 org.apache.shiro.subject.support.DefaultSubjectContext_SECURITY_MANAGER_SESSION_KEY 的 “键”。而在 DefaultSessionManager 中生成了一个 Session 对象,将它序列化后打包进 Cookie 并返回给浏览器。也就是说,在受害者访问 /shiro 这个地址时,将会触发反序列化攻击:
$ python shiro_cve-2016-4437.py 127.0.0.1 8080
  1. 实验结果

如果实验成功,我们将在控制台看到返回的 bash 标志表示已经进入了反弹 shell。此外,我们可以在另一个终端窗口中执行:

nc -lvp 1234

当受害者与服务器建立了反向 shell 之后,服务器将会将 shell 输出至控制台,并在终端窗口中启动一个本地监听器,以便我们输入命令。

修复方案

针对该漏洞,Apache Shiro 官方也已发布了修复方案,修复方式如下:

在 Shiro 框架中,可以通过在 shiro.ini 配置文件中增加 SessionStorageEvaluator 配置,来替换默认配置:

# 配置自定义 Session 存储
 [main]
 sessionDAO = com.demo.WarriorSessionDAO
 securityManager.sessionManager.sessionDAO = com.demo.WarriorSessionDAO

通过这种方式,自定义的 Session 存储会替换默认的 Cookie 存储方式,从而解决该漏洞。

总结

本文介绍了 Apache Shiro 中的一个反序列化漏洞,在了解了漏洞的原理之后,实现了漏洞的复现,并介绍了漏洞的修复方案。该漏洞揭示了反序列化漏洞的危害性,提醒我们编写的程序要避免反序列化漏洞的发生。

阅读剩余 54%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:漏洞复现-CVE-2016-4437-Shiro反序列化 - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • Bootstrap菜单按钮及导航实例解析

    Bootstrap菜单按钮及导航实例解析 导航栏基本结构 Bootstrap提供了一套简洁、灵活且易于定制化的导航栏组件,以提供导航功能和菜单展示。下面是导航栏的基本HTML结构: <nav class="navbar navbar-expand-md navbar-dark bg-dark"> <a class=&qu…

    other 2023年6月28日
    00
  • Win10开机后无限重启不能进入系统的解决方法

    Win10开机后无限重启不能进入系统的问题,可能会发生于电脑硬件故障、系统文件损坏、电源故障等原因,接下来我会详细讲解几种常见的解决方法,包括: 使用安全模式修复系统 创建Win10可启动U盘进行修复 检查硬件设备是否损坏 恢复系统到上一个稳定状态 以下是详细步骤: 使用安全模式修复系统 1.在电脑重启时,在出现Windows标志之前,按F8键进入高级启动选…

    other 2023年6月27日
    00
  • JS前端轻量fabric.js系列之画布初始化

    下面我将为您详细讲解“JS前端轻量fabric.js系列之画布初始化”的完整攻略。 1. 什么是fabric.js? fabric.js是一款基于HTML5 Canvas的交互式图形库,它提供了一个简单易用的API,使用户可以轻松地创建各种形状和图形,同时还支持图像、文本、路径和组等各种元素的处理。fabric.js广泛应用于Web前端开发和可视化图形应用。…

    other 2023年6月20日
    00
  • 几种flash存储芯片的用途和分类

    几种flash存储芯片的用途和分类 Flash存储芯片是一种常见的电子存储设备,可广泛应用于计算机、智能手机、数码相机、音频设备等各种消费电子产品中。本文将介绍几种常见的Flash存储芯片及其用途和分类。 NOR Flash存储芯片 NOR Flash存储芯片是较早的一种Flash存储技术,其主要用途是存储固件程序和操作系统等硬件相关软件。这种存储器的读取速…

    其他 2023年3月28日
    00
  • 微软承诺:致力于解决 Win11 应用兼容性问题

    微软承诺:致力于解决 Win11 应用兼容性问题 微软在发布 Win11 后表示致力于解决应用兼容性问题,以确保用户的流畅使用体验。其实,Win11 对应用程序的兼容性情况与 Windows 10 差异并不大,大部分软件能够良好兼容,但也有部分软件存在兼容性问题,可能需要做出调整才能正常运行。那么该如何解决 Win11 应用兼容性问题呢? 利用内置的应用兼容…

    other 2023年6月25日
    00
  • centos下编译openjdk1.8

    以下是关于“CentOS下编译OpenJDK1.8”的完整攻略,包括环境准备、编译步骤、示例说明和注意事项。 环境准备 在编译OpenJDK1.8之前,需要先准备以下环境: 安装必要的软件包 yum install java-1.8.0-openjdk-devel gcc g++ make zip unzip 在这个示例中,我们使用yum命令安装了Java开…

    other 2023年5月7日
    00
  • unity3d自定义的界面怎么还原到初始化状态?

    在Unity3D中,我们可以通过修改EditorWindow中GUI的布局和样式来实现自定义的界面。但有时候我们需要将某个自定义界面还原到初始状态,可以考虑以下两种方式进行实现: 方法一:手动将每个控件属性都还原到初始值 实现方式: 找到自定义界面所对应的代码文件 找到窗口的OnGUI函数 将所有控件属性还原到初始值,包括位置、大小、文本内容、颜色等。 示例…

    other 2023年6月20日
    00
  • ios字典nsdictionary与nsmutabledictionary知识点

    iOS字典NSDictionary与NSMutableDictionary知识点 在iOS开发中,NSDictionary和NSMutableDictionary是常用的集合类,而字典是一种基于键值对的数据结构,它可以帮助我们快速存取数据。本文将详细介绍NSDictionary和NSMutableDictionary的用法和知识点。 NSDictionary…

    其他 2023年3月29日
    00
合作推广
合作推广
分享本页
返回顶部