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,而服务器在处理时就会按照刚才的处理流程,就会在服务端触发我们构造的恶意代码。

过程:

  1. 加密过程:用户在登录时勾选 "Remember Me" 功能,Shiro 会将用户身份信息序列化后进行 AES 加密和 Base64 编码,然后存储在 cookie 的 RememberMe 字段中。
  2. 解密过程:当用户再次访问服务器时,服务器会从 cookie 中提取 RememberMe 字段,进行 Base64 解码和 AES 解密,最后反序列化以获取用户身份信息。
  3. 攻击者利用:攻击者可以利用已知的或通过爆破得到的 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 值,防止恶意利用。

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

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

相关文章

AM32电调学习解读六:main.c文件的函数介绍

最近在学习AM32电调的2.18版本的源码,我用的硬件是AT32F421,整理了部分流程处理,内容的颗粒度是按自己的需要整理的,发出来给有需要的人参考。按自己的理解整理的,技术能力有限,可能理解有误,欢…

WebSocket实时双向通信:从基础到实战

一、WebSocket 基础概念 1. 什么是 WebSocket? 双向通信协议:与 HTTP 的单向请求不同,WebSocket 支持服务端和客户端实时双向通信。 低延迟:适用于聊天室、实时数据推送、在线游戏等场景。 协议标识:ws://&#xff…

【算法】分支限界法和贪心、动态规划、回溯、分治法的区别是

什么是分支限界法 分支限界法是一种用于求解最优化问题的算法,其核心思想是通过剪枝策略减少搜索空间。 分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。 在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就…

[自动化集成] 使用明道云上传附件并在Python后端处理Excel的完整流程

在企业日常自动化场景中,使用低代码平台如明道云搭建前端界面,结合自定义Python后端服务,实现灵活数据处理是一种高效的组合方式。本文将分享一个典型的集成用例:用户通过明道云上传文本和Excel附件,Python后端接收并解析这些信息,最终实现完整的数据处理闭环。 项目背景…

ubuntu下实时检测机械硬盘和固态硬盘温度

sudo apt update sudo apt install smartmontools然后,使用smartctl命令查看硬盘的详细信息,包括温度: sudo smartctl -a /dev/sda实时监控硬盘温度 虽然smartctl不能直接实时显示温度,你可以使用watch命令结合smartctl来定期查…

游戏开发实战(二):Python复刻「崩坏星穹铁道」嗷呜嗷呜事务所---源码级解析该小游戏背后的算法与设计模式【纯原创】

文章目录 奇美拉和队列奇美拉被动技能多对多观察者关系实现自定义元类奇美拉基类 管理奇美拉的队列奇美拉队列类心得体会扩展 规则定义工作相关奇美拉相关 奇美拉属性 在本篇博文,我将介绍本项目的整体框架,以及“编码规则”,这些规则保证了本…

Redis实现分布式锁的进阶版:Redisson实战指南

一、为什么选择Redisson? 在上一篇文章中,我们通过Redis原生命令实现了分布式锁。但在实际生产环境中,这样的基础方案存在三大痛点: 锁续期难题:业务操作超时导致锁提前释放不可重入限制:同一线程无法重复…

大语言模型 12 - 从0开始训练GPT 0.25B参数量 MiniMind2 补充 训练开销 训练步骤 知识蒸馏 LoRA等

写在前面 GPT(Generative Pre-trained Transformer)是目前最广泛应用的大语言模型架构之一,其强大的自然语言理解与生成能力背后,是一个庞大而精细的训练流程。本文将从宏观到微观,系统讲解GPT的训练过程,…

SID 2025上的天马,用“好屏”技术重构产业叙事

作为全球最具影响力的显示行业盛会,SID国际显示周不仅是技术比拼的舞台,更是未来产业方向的风向标。SID 2025上的技术密度与产业动态,再一次验证了这一定律。 Micro-LED、柔性OLED、裸眼3D、量子点、透明显示等新技术在SID 2025集中亮相&…

【AI News | 20250520】每日AI进展

AI Repos 1、nanoDeepResearch nanoDeepResearch 是一个受 ByteDance 的 DeerFlow 项目启发,旨在从零开始构建深度研究代理的后端项目。它不依赖 LangGraph 等现有框架,通过实现一个 ReAct 代理和状态机来模拟 Deep Research 的工作流程。项目主要包含规…

钉钉开发之AI消息和卡片交互开发文档收集

AI消息和卡片交互开发文档 智能交互接口能力介绍 AI助理发消息(主动直接发送模式 AI 助理发消息 - 主动发送模式 AI 助理发消息 - 回复消息模式 AI 助理发消息 - Webhook 回复消息模式 Stream 模式响应卡片回传请求事件 upload-media-files AI 助理发消息&a…

Redis中的事务和原子性

在 Redis 中,事务 和 原子性 是两个关键概念,用于保证多个操作的一致性和可靠性。以下是 Redisson 和 Spring Data Redis 在处理原子性操作时的区别与对比: 1. Redis 的原子性机制 Redis 本身通过以下方式保证原子性: 单线程模型…

Apollo10.0学习——planning模块(8)之scenario、Stage插件详解二

scenario插件 插件总览插件ValetParkingScenario阶段一:StageApproachingParkingSpotprocess()方法 阶段二:StageParkingprocess()方法FinishStage方法 插件PullOverScenarioIsTransferable: 场景切入条件 代码逻辑阶段一:PullOverStageAppro…

JVM的面试相关问题

面试中的相关问题主要是三块 1.JVM 内存区域划分 2.JVM 的类加载机制 3.JVM 的垃圾回收机制 JVM Java虚拟机 VM Virtual Machine 虚拟机,用 软件 来 模拟 硬件 传统意义上的"虚拟机" 更多指的是 VMWare, Virtual Box, Hyper-V, KVM(构造出虚拟的电脑,甚至可以…

win10使用nginx做简单负载均衡测试

一、首先安装Nginx: 官网链接:https://nginx.org/en/download.html 下载完成后,在本地文件中解压。 解压完成之后,打开conf --> nginx.config 文件 1、在 http 里面加入以下代码 upstream GY{#Nginx是如何实现负载均衡的&a…

[特殊字符]车牌识别相机,到底用在哪?

停车场管理,快速通行不是梦 停车场大概是车牌识别相机最常见的 “工作岗位” 啦!以前进出停车场,取卡、刷卡、人工收费,一系列操作下来,高峰期的时候真的能把人等得不耐烦😫 现在有了车牌识别相机&#xff…

nosqlbooster pojie NoSQLBooster for MongoDB

测过可用,注意 asar的安装使用报错改用 npx asar extract app.asar app 路径 C:\Users{computerName}\AppData\Local\Programs\nosqlbooster4mongo\resources npm install asar -g asar extract app.asar app 打开shared\lmCore.js 修改MAX_TRIAL_DAYS3000 修改…

组态王通过开疆智能profinet转ModbusTCP网关连接西门子PLC配置案例

本案例是组态王通过使用开疆智能研发的Profinet转ModbusTCP网关采集西门子1200PLC中数据的案例。 网关配置 首先来配置网关的参数,打开网关配置软件“Gateway Configuration Studio” 由于组态王那侧设定为ModbusTCP客户端所以网关作为ModbusTCP服务器。新建项目…

大模型服务如何实现高并发与低延迟

写在前面 大型语言模型(LLM)正以前所未有的速度渗透到各行各业,从智能客服、内容创作到代码生成、企业知识库,其应用场景日益丰富。然而,将这些强大的 AI 能力转化为稳定、高效、可大规模应用的服务,却面临着巨大的挑战,其中高并发处理能力和低响应延迟是衡量服务质量的…

k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标

k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标 文章目录 k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标一、Metrics Server简介二、kube-state-metrics实战部署1. 创…