当前位置: 首页 > news >正文

一篇文章 介绍 shiro反序列化漏洞

shiro反序列化漏洞

  • Shiro-550反序列化漏洞(CVE-2016-4437)

    • 漏洞简介

      • shiro-550主要是由shiro的RememberMe内容反序列化导致的命令执行漏洞,造成的原因是默认加密密钥是硬编码在shiro源码中,任何有权访问源代码的人都可以知道默认加密密钥。于是攻击者可以创建一个恶意对象,对其进行序列化、编码,然后将其作为cookie的RememberMe字段内容发送,Shiro将其解码和反序列化,导致服务器运行一些恶意代码。
      • 特征:cookie中含有rememberMe字段
      • 修复建议:
        • 更新shiro到1.2.4以上的版本
        • 不使用默认的加密密钥,改为随机生成密钥
    • 漏洞原理

    • 一、Shiro简介

      • Apache Shiro 是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能,对于任何一个应用程序,Shiro都可以提供全面的安全管理服务。
      • 在ApacheShiro<=1.2.4版本中AES加密时采用的key是硬编码在代码中的,于是我们就可以构造RememberMe的值,然后让其反序列化执行。
    • 二、Shiro服务器识别身份加解密处理的流程

    • (1)加密
      • 1、用户使用账号密码进行登录,并勾选“Remember Me”。
      • 2、Shiro验证用户登录信息,通过后,查看用户是否勾选了“Remember Me”。
      • 3、若勾选,则将用户身份序列化,并将序列化后的内容进行AES加密,在使用base64编码。
      • 4、最后将处理好的内容放于cookie中的rememberMe字段。
    • (2)解密
      • 1、当服务端收到来自未经身份验证的用户的请求时,会在客户端发送请求中的cookie中获取rememberMe字段内容。
      • 2、将获取到的rememberMe字段进行base64解码,再使用AES解密。
      • 3、最后将解密的内容进行反序列化,获取到用户身份。
    • 三、Key

      • AES加密的密钥Key被硬编码在代码里。
      • 于是可得到Payload的构造流程:
        • 恶意命令——>序列化——>AES加密——>base64编码——>发送Cookie
  • 漏洞复现:

  • 漏洞复现:CVE-2016-4437
    • 环境:kali linux
    • 靶场使用:vulhub/shiro/CVE-2016-4437
    • 访问地址
    • ​​​​​​​
    • 抓包分析一下
    • ​​​​​​​
    • 在返回包当中发现存在rememberMe=deleteMe字样,可以大概确定有配置shiro,可以进行下一步。因为shiro本身功能就是一个身份验证管理,所以一般都在登录口可以看到。
    • UI一键利用工具
    • 使用工具再进行检测确认:
    • 输入目标的url地址,根据关键字进行爆破密钥​​
    • ​​​​​
    • 接下来爆破利用链以及回显方式:
    • ​​​​​​​
    • 接下来可进行命令执行:
    • ​​​​​​​
    • 反弹shell:
      • 可使用工具进行检测:
      • ​​​​​​​
      • 检测完成后可进行命令执行,反弹shell等操作:
      • ​​​​​​​
    • 使用工具进行简单的反弹:
    • 设置监听端口
      • window:
      • ​​​​​​​
      • linux:
      • ​​​​​​​
      • 还有使用yoserial监听模块JRMP来进行反弹shell,具体可参考文档,操作都差不多。
      • 正是因为利用简单,所以危害比较大。
      • [工具地址](https://github.com/feihong-cs/ShiroExploit-Deprecated
  • Shiro-721反序列化漏洞(CVE-2019-12422)

  • Shiro550和Shiro721的区别是什么

    • Shiro550只需要通过碰撞key,爆破出来密钥,就可以进行利用。
    • Shiro721的AES加密的key一般情况下猜不到,是系统随机生成的,并且当存在有效的用户信息时才会进入下一阶段的流程所以我们需要使用登录后的rememberMe Cookie,才可以进行下一步攻击。
  • 漏洞指纹

    • URL中含有Shiro字段
    • cookie中含有rememberMe字段
    • 返回包中含有rememberMe
  • 漏洞介绍

    • 在Shiro721中,Shiro通过AES-128-CBC对cookie中的rememberMe字段进行加密,所以用户可以通过PaddingOracle加密生成的攻击代码来构造恶意的rememberMe字段,进行反序列化攻击,需要执行的命令越复杂,生成的payload需要的时间就越长。
  • 漏洞原理

    • 由于Apache Shiro cookie中通过AES-128-CBC模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,用有效的RememberMe cookie作为Padding Oracle Attack 的前缀,然后用精心制作的RememberMe来执行Java反序列化攻击。
  • 攻击流程

    • 登录网站,并从cookie中获取RememberMe。使用RememberMe cookie作为Padding Oracle Attack的前缀。加密yoserial的序列化有效负载,以通过Padding Oracle Attack使用精心制作的RememberMe。请求带有新的RememberMe cookie的网站,以执行反序列化攻击。攻击者无需知道RememberMe加密的密码密钥。
    • 加密方式:AES-128-CBC
      • 属于AES加密算法的CBC模式,使用128位数据块为一组进行加密解密,即16字节明文,对应16字节密文,明文加密时,如果数据不够16字节,则会将数据补全剩余字节。
      • 若最后剩余的明文不够16字节,需要进行填充,通常采用PKCS7进行填充。比如最后缺3个字节,则填充3个字节的0x03;若最后缺10个字节,则填充10个字节的0x0a;
      • 若明文正好是16个字节的整数倍,最后要再加入一个16字节0x10的组再进行加密。
    • Padding Oracle Attack原理
      • Padding Oracle攻击可以在没有密钥的情况下加密或解密密文
      • Shiro Padding Oracle Attack(Shiro填充Oracle攻击)是一种针对Apache Shiro身份验证框架的安全漏洞攻击。Apache Shiro是Java应用程序中广泛使用的身份验证和授权框架,用于管理用户会话、权限验证等功能。
      • Padding Oracle Attack(填充Oracle攻击)是一种针对加密算法使用填充的安全漏洞攻击。在加密通信中,填充用于将明文数据扩展到加密算法块大小的倍数。在此攻击中,攻击者利用填充的响应信息来推断出加密算法中的秘密信息。
      • Shiro Padding Oracle Attack利用了Shiro框架中的身份验证过程中的一个漏洞,该漏洞允许攻击者通过填充信息的不同响应时间来确定身份验证过程中的错误。通过不断尝试不同的填充方式,攻击者可以逐步推断出加密密钥,并最终获取访问权限。
      • 这种攻击利用了填充错误的身份验证响应来获取关于秘密信息的信息泄露,然后根据这些信息进行进一步的攻击。为了防止Shiro Padding Oracle Attack,建议及时更新Apache Shiro版本,确保已修复该漏洞,并采取其他安全措施,如使用安全的加密算法和密钥管理策略。
  • 漏洞复现

  • 漏洞复现:CVE-2019-12422
    • 环境:kali linux
    • docker进行搭建启动
      • git clone https://github.com/3ndz/Shiro-721.git
      • cd Shiro-721/Docker
      • docker build -t shiro-721 .
      • docker run -p 8080:8080 -d shiro-721
      • ​​​​​​​
    • 访问地址:
    • ​​​​​​​
    • 利用过程和shiro550差不多,shiro710需要登录网站,并从cookie中获取RememberMe。
    • 进行登录,使用正确的账号和密码:
      • 先使用正确的账号密码登录后,再抓包获取合法Cookie(勾选Remember Me)
      • ​​​​​​​
      • 如果认证失败则只能得到 rememberMe=deleteMe
      • ​​​​​​​
  •  
    • 将登录后获得的set-cookie值当中的rememberMe值,将值复制下来,放到工具当中
    • 选择shiro721,输入目标url,设置rememberMe值,点击下一步,等待即可
    • ​​​​​​​
    • 选择检测方式:
    • ​​​​​​​
    • 等待即可
    • ​​​​​​​
    • 使用shiro综合工具
      • 输入url后:进行爆破密钥,爆破利用链以及回显
      • ​​​​​​​
      • 命令执行
      • ​​​​​​​
      • [工具地址(https://gitcode.net/mirrors/j1anfen/shiro_attack/-/releases/2.2?spm=1033.2243.3001.5876)

相关文章:

一篇文章 介绍 shiro反序列化漏洞

shiro反序列化漏洞 Shiro-550反序列化漏洞&#xff08;CVE-2016-4437&#xff09; 漏洞简介 shiro-550主要是由shiro的RememberMe内容反序列化导致的命令执行漏洞&#xff0c;造成的原因是默认加密密钥是硬编码在shiro源码中&#xff0c;任何有权访问源代码的人都可以知道默认加…...

pyav保存视频

目录 imageio替代pyav imageio替代pyav import imageio import numpy as np import torch# 创建一个随机的图像张量&#xff0c;形状为 (N, C, H, W) # 这里 N 30&#xff08;帧数&#xff09;&#xff0c;C 3&#xff08;通道数&#xff09;&#xff0c;H 64&#xff08;…...

.bixi勒索病毒来袭:如何防止文件加密与数据丢失?

导言 在网络威胁剧烈的今天&#xff0c;勒索病毒已成为企业和个人面临的重大安全挑战&#xff0c;其中虫洞勒索病毒习得高强度的加密手段和急剧传播的特性引起关注。一旦感染&#xff0c;就会加密关键数据并索要赎金&#xff0c;导致数据无法访问并带来巨大的财务损失。更为严…...

MySQL安装配置教程

以下是 MySQL 在 Windows 系统下的安装配置教程: 1. 下载 MySQL 访问 MySQL 官方网站(https://dev.mysql.com/downloads/mysql/),根据您的操作系统版本(32 位或 64 位)选择合适的 MySQL 安装包。一般建议下载社区版(Community Server),它是免费且功能丰富的版本。2. …...

Pandas进行数据查看与检查

在数据分析的工作流中,数据的初步查看与检查是非常重要的步骤。通过这一步,可以快速了解数据的结构、属性以及一些关键的统计信息,确保数据符合预期,或者发现数据中的潜在问题。 借助 pandas 库中的常用方法,如 DataFrame.head()、DataFrame.tail()、DataFrame.info() 和…...

‌MySQL中‌between and的基本用法‌、范围查询

文章目录 一、between and语法二、使用示例2.1、between and数值查询2.2、between and时间范围查询2.3、not between and示例 BETWEEN AND操作符可以用于数值、日期等类型的字段&#xff0c;包括边界值。 一、between and语法 MySQL中的BETWEEN AND操作符用于在两个值之间选择…...

[ 问题解决篇 ] 解决远程桌面安全登录框的问题

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…...

ctfshow——web(总结持续更新)

文章目录 1、基础知识部分2、php伪协议2.1 php://input协议2.2 data://text/plain协议 3、webshell连接工具3.1 蚁剑连接一句话木马 4、各个web中间件重要文件路径4.1 Nginx 5、sqlmap使用6、php特性6.1 md5加密漏洞 7、TOP 10漏洞7.1 SQL注入 1、基础知识部分 识别base64编码…...

selinux介绍和Linux中的防火墙

selinux 1、selinux的说明 2、selinux的工作原理 3、selinux的启动、关闭与查看 防火墙 1、什么是防火墙 2、iptables &#xff08;1&#xff09;iptables介绍 参数说明 3、firewalld firewalld-cmd的参数说明...

Jenkins面试整理-如何配置 Jenkins Pipeline?

在 Jenkins 中配置 Pipeline 是将构建、测试、部署等流程自动化的重要方式。Pipeline 可以通过一个名为 Jenkinsfile 的文件配置,它允许你使用脚本定义流水线。下面是如何在 Jenkins 中配置 Pipeline 的详细步骤。 步骤 1: 准备 Jenkinsfile Jenkinsfile 是 Jenkins Pipeline …...

Java每日刷题之二分算法

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; 转化 通过题目时间复杂度为O(logN),我们就可以联想到二分算法&#xff0c;但是我们前面学到的算法&#xff0c;是查找出&#xff0c;有序数组里的值&#xff0c;并不是求其中的范围&a…...

【mod分享】极品飞车9仿虚幻引擎模组,支持光追,高清纹理材质,体验一会虚幻引擎风格的极品9

各位好&#xff0c;今天小编给大家带来一款新的高清重置MOD&#xff0c;本次高清重置的游戏叫《极品飞车9最高通缉》。 《极品飞车&#xff1a;最高通缉》作为一款2005年的游戏&#xff0c;《极品飞车&#xff1a;最高通缉》的画面效果还是可以的&#xff0c;效果全开之后很不…...

【启程Golang之旅】并发编程构建简易聊天系统

欢迎来到Golang的世界&#xff01;在当今快节奏的软件开发领域&#xff0c;选择一种高效、简洁的编程语言至关重要。而在这方面&#xff0c;Golang&#xff08;又称Go&#xff09;无疑是一个备受瞩目的选择。在本文中&#xff0c;带领您探索Golang的世界&#xff0c;一步步地了…...

微信小程序的开发流程

微信小程序开发流程 1. 注册微信小程序账号 进入微信公众平台&#xff08;mp.weixin.qq.com&#xff09;&#xff0c;选择小程序的账号类型按照流程进行注册。注意每个邮箱只能注册一个账号。 2. 下载开发工具 使用账号登录微信公众平台&#xff0c;在开发->开发设置-&g…...

十分钟快速让你搞懂 Vue3 和 React 的区别

前言 Vue 3和 React是市面上目前非常受欢迎的两个前端框架。它们都采用了组件化的开发模式&#xff0c;使得开发者可以将复杂的应用拆分为多个小组件进行开发&#xff0c;从而提高了代码的可维护性和重用性。然而&#xff0c;虽然Vue 3和React都拥有各自的优点&#xff0c;但它…...

头歌——机器学习(线性回归)

文章目录 线性回归简述答案 线性回归算法答案 线性回归实践 - 波斯顿房价预测LinearRegression代码 利用sklearn构建线性回归模型示例代码如下&#xff1a; 代码 线性回归简述 简单线性回归 在生活中&#xff0c;我们常常能碰到这么一种情况&#xff0c;一个变量会跟着另一个变…...

AI驱动无人驾驶:安全与效率能否兼得?

内容概要 如今&#xff0c;人工智能正以其神奇的魔力驱动着无人驾驶的浪潮&#xff0c;带来了无数令人兴奋的可能性。这一领域的最新动态显示&#xff0c;AI技术在车辆的决策过程和实时数据分析中发挥着重要作用&#xff0c;帮助车辆更聪明地应对复杂的交通环境。通过实时监测…...

使用Git LFS管理大型文件

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Git LFS管理大型文件 引言 Git LFS 简介 安装 Git LFS 安装 Git 安装 Git LFS 配置 Git LFS 初始化 Git 仓库 指定需要使用…...

OpenAI终于正式上线搜索功能,搜索行业要变天了?

OpenAI 的 AI 搜索功能也将引发一场激烈的竞争。 各大科技公司都不会坐视不理&#xff0c;他们必然会纷纷加大对 AI 搜索技术的研发投入&#xff0c;试图在这个新兴的领域分一杯羹。这就像是一场没有硝烟的战争&#xff0c;各方势力都在暗中较劲&#xff0c;谁能笑到最后&…...

ssm《数据库系统原理》课程平台的设计与实现+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码看文章最下面 需要定制看文章最下面 目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...