Web开发-JavaEE应用动态接口代理原生反序列化危险Invoke重写方法利用链

知识点:
1、安全开发-JavaEE-动态代理&序列化&反序列化
2、安全开发-JavaEE-readObject&toString方法

一、演示案例-WEB开发-JavaEE-动态代理

动态代理

在这里插入图片描述
代理模式Java当中最常用的设计模式之一。其特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。而Java的代理机制分为静态代理和动态代理,而这里我们主要重点学习java自带的jdk动态代理机制

通俗来讲这个动态代理可以理解为歌手的经纪人,明星本人只需要做好自己要做的事情(只负责好唱歌),假设有商务活动想邀请这个明星去唱歌,就会找歌手的经纪人(确认合同、确认金额、确认唱什么歌等等前置流程),一切确定后,歌手本人只需要去到现场唱歌即可,后续收演出费什么也都是经纪人去完成(后置流程)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1、创建接口及定义方法

在这里插入图片描述

2、实现接口及定义方法操作

在这里插入图片描述
在这里插入图片描述

3、实现接口及重写invoke方法

在这里插入图片描述
在这里插入图片描述

4、创建代理对象并调用方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安全总结:利用条件分析&执行invoke

在这里插入图片描述
在这里插入图片描述

安全案例:Ysoserial-CC1链-LazyMap

在这里插入图片描述
在这里插入图片描述

二、演示案例-WEB开发-JavaEE-序列化&反序列化&利用链&危险方法&重写方法

1、序列化与反序列化

在这里插入图片描述
在这里插入图片描述

序列化:将内存中的对象压缩成字节流
反序列化:将字节流转化成内存中的对象
序列化与反序列化其实就是对象与数据格式的转换。

2、为什么有序列化技术

序列化与反序列化的设计就是用来传输数据的。
当两个进程进行通信的时候,可以通过序列化反序列化来进行传输。
能够实现数据的持久化,通过序列化可以把数据永久的保存在硬盘上,也可以理解为通过序列化将数据保存在文件中。

通俗来讲就是你出国旅游,不可能跟外国人直接说中文,他听不懂,这个时候就会借助翻译器把中文翻译成对方识别的语言,在把对方的语言翻译成中文。这个翻译的过程就是序列化和反序列化

应用场景:
(1) 想把内存中的对象保存到一个文件中或者是数据库当中。
(2) 用套接字在网络上传输对象。
(3) 通过RMI传输对象的时候。

3、常见的创建的序列化和反序列化协议

JAVA内置的writeObject()/readObject()
JAVA内置的XMLDecoder()/XMLEncoder
XStream
SnakeYaml
FastJson
Jackson

4、为什么会出现反序列化安全问题

JAVA内置的writeObject()/readObject()内置原生写法分析:
writeObject():主要用于将 Java 对象序列化为字节流并写入输出流
readObject():主要用于从输入流中读取字节序列反序列化为 Java 对象
FileInputStream:其主要作用是从文件读取字节数据
FileOutputStream:其主要作用是将字节数据写入文件
ObjectInputStream:用于从输入流中读取对象,实现对象的反序列化操作
ObjectOutputStream:用于将对象并写入输出流的类,实现对象的序列化操作

序列化-writeObject()

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

反序列化-readObject()

在这里插入图片描述
在这里插入图片描述

利用看下面

1、看序列化的对象有没有重写readObject方法(方法里是否包含危险代码)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、看序列化的对象有没有被输出就会调用toString方法(方法里是否包含危险代码)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、其他类的readObjecttoString方法(反序列化类对象可控)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、反序列化利用链

(1) 入口类的readObject直接调用危险方法
(2) 入口参数中包含可控类,该类有危险方法,readObject时调用
(3) 入口类参数包含可控类,该类又调用其他有危险方法类,readObject调用
(4) 构造函数/静态代码块等类加载时隐式执行

6、反序列化利用条件

1、可控的输入变量进行了反序列化操作

你输入的数据被网站接收并进行了反序列化操作

2、实现了Serializable或者Externalizable接口的类的对象

在这里插入图片描述

3、能找到调用方法的危险代码或间接的利用链引发(依赖链)

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

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

相关文章

K8s是常用命令和解释

K8s高频命令 获取资源信息,如获取 Pod、Service、Deployment等资源状态信息 kubectl get创建资源如创建Pod、Service、Deployment等资源 kubectl create删除资源,如删除Pod、Service、Deployment等资源 kubectl delete 应用配置文件,如引用D…

【模态分解】EMD-经验模态分解

算法配置页面,也可以一键导出结果数据 报表自定义绘制 获取和下载【PHM学习软件PHM源码】的方式 获取方式:Docshttps://jcn362s9p4t8.feishu.cn/wiki/A0NXwPxY3ie1cGkOy08cru6vnvc

TDengine 语言连接器(Go)

简介 driver-go 是 TDengine 的官方 Go 语言连接器,实现了 Go 语言 database/sql 包的接口。Go 开发人员可以通过它开发存取 TDengine 集群数据的应用软件。 Go 版本兼容性 支持 Go 1.14 及以上版本。 支持的平台 原生连接支持的平台和 TDengine 客户端驱动支持…

链接世界:计算机网络的核心与前沿

计算机网络引言 在数字化时代,计算机网络已经成为我们日常生活和工作中不可或缺的基础设施。从简单的局域网(LAN)到全球互联网,计算机网络将数以亿计的设备连接在一起,推动了信息交换、资源共享以及全球化的进程。 什…

AI agents系列之全面介绍

随着大型语言模型(LLMs)的出现,人工智能(AI)取得了巨大的飞跃。这些强大的系统彻底改变了自然语言处理,但当它们与代理能力结合时,才真正释放出潜力——能够自主地推理、规划和行动。这就是LLM代理大显身手的地方,它们代表了我们与AI交互以及利用AI的方式的范式转变。 …

如何使用AI辅助开发CSS3 - 通义灵码功能全解析

一、引言 CSS3 作为最新的 CSS 标准,引入了众多新特性,如弹性布局、网格布局等,极大地丰富了网页样式的设计能力。然而,CSS3 的样式规则繁多,记忆所有规则对于开发者来说几乎是不可能的任务。在实际开发中&#xff0c…

复刻系列-星穹铁道 3.2 版本先行展示页

复刻星穹铁道 3.2 版本先行展示页 0. 视频 手搓~星穹铁道~展示页~~~ 1. 基本信息 作者: 啊是特嗷桃系列: 复刻系列官方的网站: 《崩坏:星穹铁道》3.2版本「走过安眠地的花丛」专题展示页现已上线复刻的网…

爬虫:IP代理

什么是代理 代理服务器 代理服务器的作用 就是用来转发请求和响应 在爬虫中为何需要使用代理? 有些时候,需要对网站服务器发起高频的请求,网站的服务器会检测到这样的异常现象,则会讲请求对应机器的ip地址加入黑名单&#xff…

协程的原生挂起与恢复机制

目录 🔍 一、从开发者视角看协程挂起与恢复 🧠 二、协程挂起和恢复的机制原理:核心关键词 ✅ suspend 函数 ≠ 普通函数 ✅ Continuation(协程的控制器) 🔧 三、编译器做了什么?&#xff0…

c++11--std::forwaord--完美转发

std::forword的作用 完美转发的核心目的是保持参数的原始类型(包括const/volatile限定符和左值/右值性质)不变地传递给其他函数。 为什么需要完美转发 在没有完美转发之前,我们面临以下问题: 模板参数传递中的值类别丢失 当参数…

Linux安装开源版MQTT Broker——EMQX服务器环境从零到一的详细搭建教程

零、EMQX各个版本的区别 EMQX各个版本的功能对比详情https://docs.emqx.com/zh/emqx/latest/getting-started/feature-comparison.html

计算机组成原理-存储器

1. 存储器的定义与作用 存储器是计算机系统中用于存储程序、数据和中间结果的硬件设备,是计算机五大核心部件之一。 核心功能: 提供数据的 临时或永久存储 能力。支持CPU按需快速存取指令和数据,是程序运行的物理基础。 2. 存储器的分类 …

单片机领域中哈希表

以下是单片机领域中哈希表的实际应用及编程实例: 1.哈希表在单片机中的实际应用场景 • 命令解析:在单片机通信中,经常需要解析接收到的命令。使用哈希表可以快速地将命令字符串映射到对应的处理函数,提高命令解析的效率。 • 数…

算法思想之位运算(一)

欢迎拜访:雾里看山-CSDN博客 本篇主题:算法思想之位运算(一) 发布时间:2025.4.12 隶属专栏:算法 目录 滑动窗口算法介绍六大基础位运算符常用模板总结 例题位1的个数题目链接题目描述算法思路代码实现 比特位计数题目链接题目描述…

封装Tcp Socket

封装Tcp Socket 0. 前言1. Socket.hpp2. 简单的使用介绍 0. 前言 本文中用到的Log.hpp在笔者的历史文章中都有涉及,这里就不再粘贴源码了,学习地址如下:https://blog.csdn.net/weixin_73870552/article/details/145434855?spm1001.2014.3001…

全星APQP软件:为用户提供高效、合规、便捷的研发管理体验

全星APQP软件:为用户提供高效、合规、便捷的研发管理体验 为什么选择全星APQP软件系统? 在汽车及高端制造行业,研发项目管理涉及APQP(先期产品质量策划)、FMEA(失效模式与影响分析)、CP&#x…

CTF--网站被黑

一、原题: (1)提示:网站被黑了 黑客会不会留下后门 (2)原网页: 二、步骤: 1.在终端扫描网址: 2.扫描后发现:shell.php 3.输入网址:http://117.…

入门到精通,C语言十大经典程序

以下是十个经典的C语言程序示例&#xff0c;这些程序涵盖了从基础到稍复杂的应用场景&#xff0c;适合初学者和有一定基础的开发者学习和参考。 1. Hello, World! 这是每个初学者学习编程时的第一个程序&#xff0c;用于验证开发环境是否正确配置。 #include <stdio.h>…

神经网络入门—自定义神经网络续集

修改网络 神经网络入门—自定义网络-CSDN博客 修改数据集&#xff0c;yx^2 # 生成一些示例数据 x_train torch.tensor([[1.0], [2.0], [3.0], [4.0]], dtypetorch.float32) y_train torch.tensor([[1.0], [4.0], [9.0], [16.0]], dtypetorch.float32) 将预测代码改为&…

【browser-use+deepseek】实现简单的web-ui自动化

browser-use Web-UI 一、browser-use是什么 Browser Use 是一款开源Python库&#xff0c;专为大语言模型设计的智能浏览器工具&#xff0c;目的是让 AI 能够像人类一样自然地浏览和操作网页。它支持多标签页管理、视觉识别、内容提取&#xff0c;并能记录和重复执行特定动作。…