PHP、JAVA、Shiro反序列化
目录
一、PHP反序列化
二、JAVA反序列化
三、Shiro反序列化
Shiro-550 反序列化漏洞原理
Shiro-721 反序列化漏洞原理
Padding Oracle 漏洞补充:
防御措施:
一、PHP反序列化
主要是分为有类和无类:
1、有类:就有相关的魔术方法
2、无类:就只是序列化和反序列化
#PHP 反序列化
原理:未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码
执行,SQL 注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。当进行
反序列化的时候就有可能会触发对象中的一些魔术方法。serialize() //将一个对象转换成一个字符串
unserialize() //将字符串还原成一个对象触发:unserialize 函数的变量可控,文件中存在可利用的类,类中有魔术方法:参考:https://www.cnblogs.com/20175211lyz/p/11403397.html__construct() //创建对象时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用 isset()或 empty()触发
__unset() //在不可访问的属性上使用 unset()时触发
__invoke() //当脚本尝试将对象调用为函数时触发
二、JAVA反序列化
Java中的ObjectOutputStream类的writeObject()方法可以实现序列化,其作用把对象转换成字节流,便于保存或者传输,而ObjectInputStream类的readObject()方法用于反序列化,作用就是把字节流还原成对象。
三、Shiro反序列化
Shiro反序列化主要是Apache Shiro提供了一个remember 的功能,用户登录成功后会生成经过加密并编码的cookie,保存在浏览器中方便用户的日常使用。
而服务器对cookie的处理流程就是先获取浏览器上保存的cookie,然后将其base64解码,再进行AES解密,再将其反序列化进行校验。
而漏洞就是出现在这里,我们都知道AES它是一个硬编码,他是有默认密钥的,如果程序员没有去修改或者过于简单,那我们就可以进行cookie重构,先构造我们的恶意代码,然后将恶意代码进行序列化,然后AES加密(密钥我们已经爆破出来了)再进行base64编码,形成我们新的cookie,而服务器在处理时就会按照刚才的处理流程,就会在服务端触发我们构造的恶意代码。
过程:
- 加密过程:用户在登录时勾选 "Remember Me" 功能,Shiro 会将用户身份信息序列化后进行 AES 加密和 Base64 编码,然后存储在 cookie 的 RememberMe 字段中。
- 解密过程:当用户再次访问服务器时,服务器会从 cookie 中提取 RememberMe 字段,进行 Base64 解码和 AES 解密,最后反序列化以获取用户身份信息。
- 攻击者利用:攻击者可以利用已知的或通过爆破得到的 AES 密钥,构造恶意的序列化对象,并按照 Shiro 的加密解密流程进行处理,生成恶意的 RememberMe cookie。当服务器处理这个恶意 cookie 时,就会触发反序列化漏洞,执行攻击者的代码。
Shiro-550 反序列化漏洞原理
Shiro-550 漏洞的根本原因在于 Shiro 使用了一个硬编码的 AES 加密密钥,这个密钥在 Shiro 的源码中是默认的,因此任何人都可以使用这个密钥来构造 RememberMe 的值,进而让服务器执行反序列化操作。攻击者可以创建一个恶意对象,对其进行序列化、AES 加密和 Base64 编码,然后将其作为 RememberMe cookie 发送给服务器。服务器在解码和反序列化这个 cookie 时,会执行其中的恶意代码。
Shiro-721 反序列化漏洞原理
与 Shiro-550 类似,Shiro-721 漏洞也涉及到 RememberMe 功能,但它的 AES 加密密钥通常是随机生成的,不容易被猜测。攻击者需要使用有效的用户信息和 RememberMe cookie 来执行 Padding Oracle 攻击,构造恶意的 RememberMe 字段进行反序列化攻击。这种攻击利用了 AES-128-CBC 模式中的 Padding Oracle 漏洞,允许攻击者在不知道加密密钥的情况下,通过填充错误的响应时间来推断出加密过程中的秘密信息。
Padding Oracle 漏洞补充:
Padding Orace 四攻击指应用在解密客户端只提交的加密数据时,泄露了解密数据的分段填充是否合法的信息。攻击者利用PaddingOrace可以在不知道加密程序所使用的密钼的情况下,解密数据或者加密任意数据。即使应用程序确认加密数据的完整性,仍会导致该程序仍有敏感数据泄露和越权漏洞的风,险。
密文在被解密时,会被分成若干个数据块,每个数据块有固定的长度,常见的加密算法只大多为8字节或16字节。当数据不满足指定长度时,程序会通过指定的方式进行填充,以方便在解密时能剥除这些这些填充数据。常见的填充标准有PKCS#7。当填充内容与标准要求的语法不一致时,会生成一个错误。如果应用在解析客户端提交的加密信息时泄露了这个填充出错的状态信息,就形成了Padding Oracle。
550和721区别:
550是固定密钥,721是随机密钥
防御措施:
- 升级 Shiro 版本:更新到 1.2.4 以上的版本,不使用默认的加密密钥,而是随机生成密钥。
- 安全配置:不要使用公开的密钥,避免将密钥硬编码在代码中,确保密钥的安全性。
- WAF 防护:通过 Web 应用防火墙拦截异常的 RememberMe cookie 值,防止恶意利用。
相关文章:
PHP、JAVA、Shiro反序列化
目录 一、PHP反序列化 二、JAVA反序列化 三、Shiro反序列化 Shiro-550 反序列化漏洞原理 Shiro-721 反序列化漏洞原理 Padding Oracle 漏洞补充: 防御措施: 一、PHP反序列化 主要是分为有类和无类: 1、有类:就有相关的魔术…...
FreeRTOS全攻略:从入门到精通
目录 一、FreeRTOS 基础概念1.1 FreeRTOS 是什么1.2 为什么选择 FreeRTOS 二、与裸机开发的区别2.1 任务管理2.2 中断处理2.3 资源管理 三、FreeRTOS 入门篇3.1 内存管理3.2 任务创建3.3 任务状态3.4 任务优先级3.5 空闲任务和钩子函数3.6 同步与互斥3.7 队列3.8 信号量3…...
机器学习 决策树-分类
决策树-分类 1 概念2 基于信息增益决策树的建立(1) 信息熵(2) 信息增益(3) 信息增益决策树建立步骤 3 基于基尼指数决策树的建立(了解)4 sklearn API5 示例 1 概念 1、决策节点 通过条件判断而进行分支选择的节点。如:将某个样本中的属性值(特征值)与决策节点上的值…...
【RK3588嵌入式图形编程】-Cairo-形状与填充
形状与填充 文章目录 形状与填充1、基本形状2、 纯色填充3、 填充图案4、 填充渐变本文介绍了如何使用Cairo库创建和填充基本形状及复杂形状。首先,通过Cairo API创建矩形、正方形、圆形、弧线和椭圆等基本形状,并使用纯色进行填充。接着,通过组合基本图元,展示了如何绘制星…...
C及C++的音频库与视频库介绍
在 C/C 开发中,处理音频和视频需要依赖专业的库来实现编解码、播放、录制、处理等功能。 一.音频库(C/C) 1.FFmpeg(音频 视频全能库) 功能: 支持几乎所有音频 / 视频格式的编解码(如 MP3、…...
5.2.4 wpf中MultiBinding的使用方法
在 WPF 中,MultiBinding 允许将多个绑定(Binding)组合成一个逻辑结果,并通过一个转换器(IMultiValueConverter)处理这些值,最终影响目标属性。以下是其核心用法和示例: 核心组件: MultiBinding:定义多个绑定源的集合。 IMultiValueConverter:实现逻…...
小白的进阶之路系列之二----人工智能从初步到精通pytorch中分类神经网络问题详解
什么是分类问题? 分类问题涉及到预测某物是一种还是另一种。 例如,你可能想要: 问题类型具体内容例子二元分类目标可以是两个选项之一,例如yes或no根据健康参数预测某人是否患有心脏病。多类分类目标可以是两个以上选项之一判断一张照片是食物、人还是狗。多标签分类目标…...
日志根因分析:Elastic Observability 的异常检测与日志分类功能
作者:来自 Elastic Bahubali Shetti Elastic Observability 不仅提供日志聚合、指标分析、APM 和分布式追踪,Elastic 的机器学习能力还能帮助分析问题的根因,让你将时间专注于最重要的任务。 随着越来越多的应用程序迁移到云端,收…...
web基础
域名概述 2-1 域名的概念:IP 地址不易记忆,域名是互联网络上识别和定位计算机的层次结构式的字符标识,与该计算机的互联网协议 (IP) 地址相对应,用于在数据传输时标识计算机的电子方位,方便人们记忆和输入。 早期使用…...
WebRTC技术EasyRTC音视频实时通话驱动智能摄像头迈向多场景应用
一、方案背景 在物联网蓬勃发展的当下,智能摄像头广泛应用于安防、家居、工业等领域。但传统智能摄像头存在视频传输延迟高、设备兼容性差、网络波动时传输不稳定等问题,难以满足用户对实时流畅交互视频的需求。EasyRTC凭借低延迟、高可靠、跨平台特性…...
替换word中的excel
PostMapping("/make/report/target/performance/first") public AjaxResult makeTargetReportFirst(RequestBody MakeReportDTO makeReportDTO) {Map<String, String> textReplaceMap new HashMap<>();// 替换日期LocalDateTime nowData LocalDateTime…...
【氮化镓】低剂量率对GaN HEMT栅极漏电的影响
2024 年 2 月 22 日,中国科学院新疆理化技术研究所的Li等人在《IEEE ACCESS》期刊发表了题为《Degradation Mechanisms of Gate Leakage in GaN-Based HEMTs at Low Dose Rate Irradiation》的文章,基于实验分析和 TCAD 仿真,研究了低剂量率辐照下基于 GaN 的 p 型栅高电子迁…...
win10使用nginx做简单负载均衡测试
一、首先安装Nginx: 官网链接:https://nginx.org/en/download.html 下载完成后,在本地文件中解压。 解压完成之后,打开conf --> nginx.config 文件 1、在 http 里面加入以下代码 upstream GY{#Nginx是如何实现负载均衡的&a…...
Java 06API时间类
API-时间类 Date jdk8之前1.构造 代表当前的日期和时间 1.Date d1new Date();当前的时间编译成对象 2.Date d2new Date(long time);时间毫秒值代表的Date日期对象 long 类型需要在写L 及8L2.常用方法 public long getTime();获取从1970-1-1到现在的毫秒值总数 void setTime…...
2.11 筹资管理
11.1 筹资主体 11.1.1 企业筹资 1.内源筹资 企业自由资金、应付息税以及未使用或者分配专项基金。自由资金:留存收益、应收账款、闲置资产变卖未使用或者分配专项基金:更新改造基金、生产发展基金以及职工福利基金 2.外源筹资 权益筹资:普通股筹资、优先股筹资债务筹资:借…...
什么是 AI 人工智能?什么是机器学习?什么是深度学习?三者啥关系
AI 到底是个啥?跟咱有啥关系?一文帮你搞懂! 最近是不是老听到 “AI”、“人工智能” ,“机器学习”,“深度学习”这些词?感觉挺高大上,但又有点懵?别担心,今天咱们就用大…...
C语言经典面试题及答案100道
# C语言经典面试题及答案100道 ## 基础概念部分 1. **什么是C语言?** - 答:C语言是一种通用的、过程式的计算机编程语言,由Dennis Ritchie于1972年在贝尔实验室开发,主要用于系统软件开发。 2. **C语言的特点是什么…...
RocketMQ 顺序消息实现原理详解
RocketMQ 的顺序消息实现原理主要围绕生产者发送顺序性、Broker存储顺序性和消费者消费顺序性三个核心环节展开,具体分为全局有序和分区有序两种模式。 一、顺序消息的分类 1. 全局有序 定义:某个Topic下所有消息严格按FIFO顺序处理。实现:…...
SpringBoot与GeoHash整合,实现骑手就近派单功能
通过使用GeoHash结合Redis的地理空间功能,能够实时管理和查询骑手的位置信息,并根据订单量和评分等因素动态分配最近的骑手来完成配送任务. 空间索引: GeoHash是一种将地理坐标(经纬度)编码为字符串的算法,可以用于空间索引。 这使得我们可以方便地在Redis这样的内存数据库…...
spark任务的提交流程
目录 spark任务的提交流程1. 资源申请与初始化2. 任务划分与调度3. 任务执行4. 资源释放与结果处理附:关键组件协作示意图扩展说明SparkContext介绍 spark任务的提交流程 用户创建一个 Spark Context;Spark Context 去找 Cluster Manager 申请资源同时说明需要多少 CPU 和内…...
阿博图书馆管理系统 Java+Spring Boot+MySQL 实战项目分享
一、项目简介 为了提升图书馆的管理效率和用户体验,我们基于 Java Spring Boot MySQL 开发了一款完整的图书馆管理系统 —— 阿博图书馆管理系统。系统采用前后端分离架构,功能模块丰富,操作逻辑清晰,适合用于毕业设计、实训项…...
es学习小结
1.客户端类型 推荐场景 版本兼容性 Elasticsearch Java API Client 新项目、ES 8.x集群 8.x及以上 Spring Data Elasticsearch Spring生态项目、简化ORM操作 ES 7.x-8.x(需版本匹配) Low-Level REST Client 需要底层HTTP控制、兼容多版本ES …...
【数据库课程设计】网上投票管理系统
目录 前言: 一,系统需求分析 1,需求概述 2,系统功能图 3,业务流程图 业务流程分析 业务流程图 4,数据流程图 5,数据字典 二,概念结构设计 1,实体分析 2&am…...
STM32+ESP8266+ONENET+微信小程序上传数据下发指令避坑指南
之前只做过类似的但是以为这种烂大街的功能应该不难结果还是踩了不少坑,记录几个需要注意的点 1、创建产品的时候选择onejson,自定义方案。这样选择的就是物模型,之后可以去使用物模型的API调试。 2、设置物模型 大概有以下几种比较常用的&…...
不同消息队列保证高可用实现方案
消息队列的高可用性(High Availability, HA)是分布式系统中的核心需求,不同消息队列通过多种技术手段实现高可用。以下是主流消息队列的高可用实现方案及对比: 一、Apache Kafka 副本机制(Replication) 每个…...
Android 蓝牙开发 - 蓝牙相关权限(蓝牙基本权限、Android 12 蓝牙新增权限、位置权限)
蓝牙基本权限 1、基本介绍 <uses-permission android:name"android.permission.BLUETOOTH" />BLUETOOTH:允许应用连接配对的蓝牙设备 <uses-permission android:name"android.permission.BLUETOOTH_ADMIN" />BLUETOOTH_ADMIN&am…...
【Linux】第二十一章 管理存储堆栈
1. 分别说明LVM中物理卷、物理区块、卷组、逻辑卷的概念以及它们之间的关系。 在 LVM (Logical Volume Management) 中,硬盘的管理变得更加灵活,允许动态地调整磁盘空间的分配。 物理卷(PV):LVM使用底层物理设备&…...
OpenCV 人脸识别:从基础到实践全解析
在人工智能与计算机视觉蓬勃发展的今天,人脸识别技术已深入我们生活的方方面面,从手机解锁到安防监控,其应用无处不在。而 OpenCV 作为计算机视觉领域最受欢迎的开源库之一,为开发者提供了一套高效且易用的人脸识别解决方案。本文…...
【HTML-2】HTML 标题标签:构建网页结构的基础
在网页开发中,标题标签(<h1>到<h6>)是构建内容层次结构和语义化标记的基础元素。这些标签不仅影响内容的视觉呈现,更对网页的可访问性和SEO有着深远影响。 1. 标题标签的基本用法 HTML提供了六个级别的标题标签: <h1>这…...
vue3前端后端地址可配置方案
在开发vue3项目过程中,需要切换不同的服务器部署,代码中配置的服务需要可灵活配置,不随着run npm build把网址打包到代码资源中,不然每次切换都需要重新run npm build。需要一个配置文件可以修改服务地址,而打包的代码…...
HTML应用指南:利用POST请求获取全国申通快递服务网点位置信息
申通快递(STO Express)作为中国领先的综合物流服务商,自1993年创立以来,始终秉持“正道经营、长期主义”的发展理念,深耕快递物流领域,开创了行业加盟制先河。经过30余年的发展,申通已成长为国家…...
《医院运营管理典型应用数据资源建设指南2025》全面分析
引言:医院数据资源建设的时代背景与意义 医院运营管理数据资源建设正迎来前所未有的发展机遇与挑战。在深化支付改革与公立医院高质量发展政策驱动下,医院亟需建立智慧化运营管理体系,而数据资源作为关键要素,其建设水平直接关系到医院管理的科学性与效率。《医院运营管理…...
.NET外挂系列:3. 了解 harmony 中灵活的纯手工注入方式
一:背景 1. 讲故事 上一篇我们讲到了 注解特性,harmony 在内部提供了 20个 HarmonyPatch 重载方法尽可能的让大家满足业务开发,那时候我也说了,特性虽然简单粗暴,但只能解决 95% 的问题,言外之意还有一些…...
taro 小程序 CoverImage Image src无法显示图片的问题
目录 一、问题描述 二、解决方案 一、问题描述 使用taro开发的微信小程序图片无法正常显示,并报如下错误: [渲染层网络层错误] Failed to load local image resource /assets/icon/message.png the server responded with a status of 500 (HTTP/1.…...
05_核支持向量机
描述 核支持向量机(通常简称为SVM)可以推广到更复杂模型的扩展,这些模型无法被输入空间的超平面定义。 SVM 的核心思想是找到一个最优的超平面,将不同类别的数据分开。这个超平面不仅要能够正确分类数据,还要使得两个…...
[解决方案] Word转PDF
背景: 之前做过一些pdf导出, 客户提了一个特别急的需求, 要求根据一个模版跟一个csv的数据源, 批量生成PDF, 因为之前用过FOP, 知道调整样式需要特别长的时间, 这个需求又特别急, 所…...
Oracle 11g post PSU Oct18 设置ssl连接(使用wallets)
说明 oracle 11g 从PSU 2018Oct(含)及之后的补丁不支持MD5. 要使用JDBC SSL要使用TSL1.2. 有两种方法,一种使用wallet, 一种使用JKS. 本文档使用wallets. 1. 为什么用TSL 1.2 https://blogs.oracle.com/developers/post/ssl-connection-to…...
linux关闭某端口暂用的进程
查看是哪个端口暂用 sudo netstat -tulpn | grep :80根据图片 显示 80端口暂用的 进程id是 3002 结束进程id为3002的进程 sudo kill -9 3002...
web开发全过程总结
目录 利用pnpm创建vue3的文件 使用pnpm创建项目 项目配置 在idea中创建Spring Boot项目 配置基础项目架构(三层架构) 利用pnpm创建vue3的文件 1.打开cmd,以管理员的身份运行 2.切换到自己想要建立项目的文件的目录下或者直接在文件中以cmd的形式打开 输入指令安装pnpm n…...
经典Java面试题的答案——Java 基础
大家好,我是九神。这是互联网技术岗的分享专题,废话少说,进入正题: 1.JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境…...
Fiddler 指定链接断点
问题背景 在使用Fiddler进行抓包和mock数据时,由于前端页面通常依赖多个前置接口(如JS、CSS、登录态等),导致抓包过程中难以精准定位到目标接口。这种复杂性增加了调试和mock数据的难度。 常见挑战 前置接口过多:页…...
C# 语法篇:字段的定义和运算
对于字段来说,是在对象创建时就被初始化了;而构造函数的运行是在这之后。 因此,不能对字段进行需要用到“构造函数赋值的变量”的运算,因为此时这些变量的值都为0或者随机值,编译器不允许这时候做运算。 因此…...
音频应用的MediaSession冲突
前提条件 系统级应用,使用了sharedUserId 应用在AndroidManifest.xml中声明了系统级UID:android:sharedUserId"android.uid.system"该配置使应用具有系统级权限,可以访问系统级API和资源 使用MediaSession框架 应用通过MediaSessi…...
【QT】类A接收TCP数据并通过信号通知类B解析
以下是基于Qt的完整示例代码,包含类A接收TCP数据并通过信号通知类B解析的实现: ------------------ ClassA.h 网络数据接收类 ------------------ #pragma once#include <QTcpServer> #include <QTcpSocket> #include <QObject>class…...
【Jitsi Meet】(腾讯会议的平替)Docker安装Jitsi Meet指南-使用内网IP访问
Docker安装Jitsi Meet指南-使用内网IP访问 下载官方代码配置环境变量复制示例环境文件并修改配置:编辑 .env 文件: 修改 docker-compose.yml 文件生成自签名证书启动服务最终验证 腾讯会议的平替。我们是每天开早晚会的,都是使用腾讯会议。腾…...
微服务架构中的多进程通信--内存池、共享内存、socket
目录 1 引言 2 整体架构简介 3 疑问 3.1 我们的共享内存消息机制是用的posix还是system V 3.2 rmmt中,不同线程之间的比如访问同一个内存,用的什么锁控制的 3.3 疑问:假如一个进程发送给了另外两个进程,然后另外两个进程都同…...
使用 adb 命令截取 Android 设备的屏幕截图
使用 adb 命令截取 Android 设备的屏幕截图。以下是两种常见的方法: 方法一:截屏后保存到电脑 adb shell screencap -p /sdcard/screenshot.png adb pull /sdcard/screenshot.png解释: adb shell screencap -p /sdcard/screenshot.png&…...
Jenkins服务器配置密钥对
1. 在 Jenkins 服务器上执行以下命令 # 生成 SSH 密钥对 ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""# 查看公钥内容 cat ~/.ssh/id_rsa.pub 2. 将显示的公钥内容复制,然后在目标服务器上执行 # 在目标服务器上执行 mkdir -p /root/.ssh chmod …...
Docker中部署Alertmanager
在 Docker 中部署 Alertmanager(通常与 Prometheus 告警系统配合使用)的步骤如下: 一、拉取镜像prom/alertmanager docker pull prom/alertmanager二、 创建 Alertmanager 配置文件 首先准备Alertmanager的配置文件 alertmanager.yml(如存…...
Keil软件中STM32(ARM)与C51兼容方法
推荐其他UP主:Keil5安装教程(包含C51与MDK共存) - Kojull - 博客园 我已经实现了!...