shiro反序列化漏洞Shiro-550/Shiro-721反序列化

news2024/11/26 12:38:28

文章目录

  • shiro反序列化漏洞
    • Shiro-550反序列化漏洞(CVE-2016-4437)
      • 漏洞简介
      • 漏洞原理
    • Shiro-721反序列化漏洞(CVE-2019-12422)
      • Shiro550和Shiro721的区别是什么
      • 漏洞指纹
      • 漏洞介绍
      • 漏洞原理
      • 攻击流程
    • 漏洞复现:CVE-2016-4437
    • 漏洞复现:CVE-2019-12422

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是硬编码在代码中的,于是我们就可以构造Remembe Me的值,然后让其反序列化执行。

二、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

Shiro-721反序列化漏洞(CVE-2019-12422)

Shiro550和Shiro721的区别是什么

Shiro550只需要通过碰撞key,爆破出来密钥,就可以进行利用。
Shiro721的ase加密的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的前缀。加密syserial的序列化有效负载,以通过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-2016-4437

环境:kali linux

靶场使用:vulhub/shiro/CVE-2016-4437

image-20230915192515566

访问地址:

image-20230915192536014

抓包分析一下:

image-20230915192640456

在返回包当中发现存在rememberMe=deleteMe 字样,可以大概确定有配置shiro,可以进行下一步。因为shiro本身功能就是一个身份验证管理,所以一般都在登录口可以看到。

UI一键利用工具

使用工具再进行检测确认:

输入目标的url地址,根据关键字进行爆破秘钥

image-20230915193007415

接下来爆破利用链以及回显方式:

image-20230915193324890

接下来可进行命令执行:

image-20230915193430969

反弹shell:

可使用工具进行检测:

image-20230915202432963

检测完成后可进行命令执行,反弹shell等操作:

image-20230915202357727

使用工具进行简单的反弹:

设置监听端口

window:

image-20230915195210679

linux:

image-20230915195329556

还有使用ysoserial监听模块JRMP来进行反弹shell,具体可看参考文档,操作都差不多。

正是因为利用简单,所以危害比较大。

工具地址

漏洞复现: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

image-20230917171320435

访问:

image-20230917171243913

利用过程和shiro550差不多,shiro710需要登录网站,并从cookie中获取RememberMe。

进行登录,使用正确的账号和密码:

先使用正确的账号密码登录后,在抓包获取合法 Cookie(勾选Remember Me)

image-20230917171428991

如果认证失败则只能得到 rememberMe=deleteMe

image-20230917171603586

将登录后获取的set-cookie值当中的rememberMe值,将值复制下来,放到工具当中

选择shiro721,输入目标url,设置rememberMe值,点击下一步,等待即可

image-20230917172423384

选择检测方式:

image-20230917172458737

等待即可:

image-20230917171743186

使用shiro综合工具:

输入url后:进行爆破秘钥,爆破利用链以及回显

image-20230917171821515

命令执行:

image-20230917171845501

工具地址

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

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

相关文章

AOSP Android 系统源码编译出的framework.jar和android.jar之间的区别

简介 AOSP&#xff08;Android Open Source Project&#xff09;编译出的 android.jar 和 framework.jar 都是 Android 平台开发中的重要组件&#xff0c;但它们有不同的作用和用途&#xff1a; android.jar&#xff1a; 用途&#xff1a;android.jar 包含了 Android API 的定…

linux常用命令(4):mkdir命令(创建目录)

文章目录 一、命令简介二、命令格式三、常用示例 一、命令简介 mkdir&#xff08;make directories&#xff09;创建目录。 若指定目录不存在则创建目录。若指定目录已存在&#xff0c;则会提示已存在而不继续创建。 touch与mkdir的区别? 很多人可能会把这个搞混淆&#xff…

Python 函数的说明文档

视频版教程 Python3零基础7天入门实战视频教程 用"“” “”"备注说明&#xff0c;然后我们调用函数的地方&#xff0c;鼠标移动上去就能看到函数的说明。提供代码的可读性。 def add(x, y):"""两数相加函数:param x: 两数相加数x:param y: 两数相加…

Verilog零基础入门(边看边练与测试仿真)-状态机-笔记(7-10讲)

文章目录 第七讲第八讲第九讲第十讲 第七讲 1、最简单的状态机-三角波发生器 1、两种状态的代码&#xff1a; //最简单的状态机&#xff0c;三角波发生器&#xff1b; timescale 1ns/10ps module tri_gen(clk,res,d_out); input clk; input res; o…

vr飞机驾驶舱模拟流程3D仿真演示加大航飞安全法码

众所周知&#xff0c;航空航天飞行是一项耗资大、变量参数很多、非常复杂的系统工程&#xff0c;因此可利用虚拟仿真技术经济、安全及可重复性等特点&#xff0c;进行飞行任务或操作的模拟&#xff0c;以代替某些费时、费力、费钱的真实试验或者真实试验无法开展的场合&#xf…

Lua学习笔记:在Visual Studio中调试Lua源码和打断点

前言 本篇在讲什么 调试Lua源码 本篇需要什么 对Lua语法有简单认知 依赖Visual Studio工具 本篇的特色 具有全流程的图文教学 重实践&#xff0c;轻理论&#xff0c;快速上手 提供全流程的源码内容 ★提高阅读体验★ &#x1f449; ♠ 一级标题 &#x1f448; &…

C#中的方法

引言 在C#编程语言中&#xff0c;方法是一种封装了一系列可执行代码的重要构建块。通过方法&#xff0c;我们可以将代码逻辑进行模块化和复用&#xff0c;提高代码的可读性和可维护性。本文将深入探讨C#中的方法的定义、参数传递、返回值、重载、递归等方面的知识&#xff0c;…

【Hadoop】HDFS API 操作大全

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的帮助&#x1…

Vue3 Ajax(axios)异步

文章目录 Vue3 Ajax(axios)异步1. 基础1.1 安装Ajax1.2 使用方法1.3 浏览器支持情况 2. GET方法2.1 参数传递2.2 实例 3. POST方法4. 执行多个并发请求5. axios API5.1 传递配置创建请求5.2 请求方法的别名5.3 并发5.4 创建实例5.5 实例方法5.6 请求配置项5.7 响应结构5.8 配置…

【配代码演示】Cookie和Session的区别

一、共同之处&#xff1a; cookie和session都是用来跟踪浏览器用户身份的会话方式。 二、工作原理&#xff1a; 1.Cookie的工作原理 &#xff08;1&#xff09;浏览器端第一次发送请求到服务器端 &#xff08;2&#xff09;服务器端创建Cookie&#xff0c;该Cookie中包含用户的…

控制台日志打印console的封装,加入美化与打印开关

控制台日志打印console的封装&#xff0c;加入美化与打印开关 为什么要写这个&#xff1f; 封装这个控制台日志打印工具&#xff0c;主要是在项目中自己做的SDK需要提供给其他开发人员使用&#xff0c;加入了日志美化和打印打开&#xff0c;方便了开发人员查找SDK中的日志&am…

以神龙出行小程序为例,说一些网站技术

注册和登录功能&#xff1a; 用户注册和登录可以使用手机号验证、第三方登录等方式来实现。这需要与后台服务器进行数据交互&#xff0c;并进行身份验证。 数据存储和管理&#xff1a; 用户的个人信息和常用地址需要进行存储和管理。这可以通过数据库来实现&#xff0c;如关系…

【八大经典排序算法】冒泡排序

【八大经典排序算法】冒泡排序 一、概述二、思路解读三、代码实现四、优化 一、概述 冒泡排序由于其简单和易于理解&#xff0c;使其成为初学者学习排序算法的首选&#xff0c;也是初学者接触到的第一个排序算法。其原理是通过重复交换相邻的元素来将最大的元素逐步“冒泡”到…

Python数据库编程:连接、操作和管理数据库

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 Python作为一门多用途的…

前端screenfull实现界面全屏展示功能

还是先引入依赖 我们要先执行 npm config set registry https://registry.npmjs.org/将本地npm registry地址设置为官方的npm registry地址 不然这个东西安装会有点问题 然后我们执行命令安装 npm install screenfull安装完之后 我们终端执行一下 npm config delete registr…

华为云HECS云服务器docker环境下安装redis

当前有个华为云HECS云服务器&#xff0c;已经安装了docker环境&#xff0c;准备下docker环境下安装redis。 一、HECS云服务器安装docker 登录华为HECS云服务器&#xff0c;安装docker环境。 安装docker参考如下文章&#xff1a; 华为云HECS安装docker并安装mysql-CSDN博客 …

构建个人图床云盘—EasyImage的简单部署及远程访问配置

文章目录 1.前言2. EasyImage网站搭建2.1. EasyImage下载和安装2.2. EasyImage网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2 Cpolar内网穿透本地设置 4. 公网访问测试5. 结语 1.前言 一个好的图床&#xff0c;是网站或者文章图片能稳定显示的关键&…

ros---服务端和客户端

服务模型&#xff1a; 想对于发布订阅模型的区别&#xff1a;请求一次才会接收一次&#xff0c;而不是不断的发布。 自定义服务数据 1.定义srv文件 2.在package.xml中添加功能包依赖 <build_depend>message_generation</build_depend> <exec_depend>mess…

商业大厦为什么要烟感监控?一篇看懂

烟感监控在现代商业大厦的安全体系中扮演着至关重要的角色。随着城市化的不断发展和商业大厦的不断增多&#xff0c;建筑物内的火灾风险也相应增加。 因此&#xff0c;采取有效的烟感监控措施&#xff0c;以及建立快速响应火警的机制&#xff0c;对于保护人员生命安全和财产安全…

Java之String类

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; Java之String类 String的构造String底层String之间…