一些反序列化总结

news2024/9/28 9:30:19

1 反序列化漏洞原理

  	如果反序列化的内容就是那串字符串,是用户可以控制的(即变量的值),且后台不正当的使用了PHP中的魔法函数,就会导致反序列化漏洞,可以执行任意命令。
   
		Java 序列化指 Java 对象转换为字节序列的过程
		Java 反序列化指字节序列恢复为 Java 对象的过程
		Commons-collections 爆出第一个漏洞开始,Java 反序列化漏洞的事件就层出不穷
		在 Java 中,利用 ObjectInputStream 的 readObject 方法进行对象读取

2 jndi可以调用哪些协议

反序列化漏洞中一般调用 ldap 和 rmi

3 不安全的反序列化

  	攻击程序会尝试在不进行任何验证的情况下,对数据进行反序列化,不安全的反序列化会导致远程代码执行、重放攻击、注入攻击等。

4 反序列化漏洞有哪些

  	Weblogic反序列化漏洞/Jboss反序列化漏洞/nginx反序列化/Tomcat反序列化/shiro反序列化

5 java反序列化原理

  	把 AESkey 给硬编码到代码里,所以说可以通过爆破的方式找到 AESkey 然后自己构造一个恶意对象,base64 加密然后加载一个恶意对象。
  	1. Java 序列化指 Java 对象转换为字节序列的过程
		2. Java 反序列化指字节序列恢复为 Java 对象的过程
		3. Commons-collections 爆出第一个漏洞开始,Java 反序列化漏洞的事件就层出不穷
		4. 在 Java 中,利用 ObjectInputStream 的 readObject 方法进行对象读取
		5. 可以深入了解 ysoserial 有哪些 gadgets

6 反序列化漏洞的魔法函数(魔术方法)

  	construct() /destruct() /sleep() /wakeup /toString /get(),set()/invoke()/call 和 callStatic

7 框架漏洞 - 反序列化

1、Shiro 反序列化原理
在Shiro框架下,用户登陆成功后会生成一个经过加密的Cookie。其Cookie的Key的值为RememberMe,Value的值是经过序列化、AES加密和Base64编码后得到的结果。
服务端在接收到一个Cookie时,会按照如下步骤进行解析处理:
  ○ 检索RememberMe Cookie的值
  ○ 进行Base64解码
  ○ 进行AES解码
  ○ 进行反序列化操作
在第4步中的调用反序列化时未进行任何过滤,进而可以导致出发远程代码执行漏洞。
由于使用了AES加密,成功利用该漏洞需要获取AES的加密密钥,在Shiro1.2.4版本之前AES的加密密钥为硬编码,其默认密钥的Base64编码后的值为kPH+bIxk5D2deZiIxcaaaA==,于是就可得到Payload的构造流程:
恶意命令-->序列化-->AES加密-->base64编码-->发送Cookie
目前官方通过去掉硬编码的密钥是的每次生成一个密钥来解决其漏洞,但可以通过搜索引擎等方式收集到不同的密钥,提高对该漏洞的利用成功率。

Shiro漏洞指纹:响应包中存在字段set-Cookie: rememberMe=deleteMe

2、你都复现过strust2哪些漏洞

S2-016 , S2-045 , S2-046 , S2-057
3、thinkphp 远程命令执行
thinkphp版本识别
ThinkPHP是一款基于PHP的开源框架,常用于Web应用程序的快速开发。版本识别是指根据程序的特征和版本信息来判断程序的版本。对于ThinkPHP,可以通过以下几种方式进行版本识别: 
1. 查看程序中的版本信息:在ThinkPHP的源代码中,可以找到版本号的定义,一般在ThinkPHP.php文件中。可以通过查看该文件来获取版本号。  
2. 检查文件名和目录结构:不同版本的ThinkPHP会有不同的文件名和目录结构,通过检查这些文件名和目录结构可以判断程序的版本。  
3. 分析程序的功能和特性:不同版本的ThinkPHP会有不同的功能和特性,通过分析程序的功能和特性可以判断程序的版本。  
4. 使用工具进行识别:一些工具可以自动识别程序的版本,例如WhatWeb、Wappalyzer等。这些工具可以通过检查页面源码、HTTP响应头等信息来判断程序的版本。 
在 cookie 字段有 remember me 等于 delete me 这么一个特征

		1、ThinkPHP3.2.x_assign方法第一个变量可控=>变量覆盖=>任意文件包含=>RCE
		2、thinkphp5 一种是因为Request类的method和__construct方法造成的,另一种是因为Request类在兼容模式下获取的控制器没有进行合法校验,我们下面分两种来讲,然后会将thinkphp5的每个小版本都测试下找下可用的payload。

  	判断:
		看icon
		看报错
4、spring 远程代码执行
spring4shell
条件:
JDK 9+
直接或者间接地使⽤了Spring-beans包(Spring boot等框架都使用了)
Controller通过参数绑定传参,参数类型为非常规类型的对象(比如非String等类型的自定义对象)
Web应用部署方式必须为Tomcat war包部署
5、fastjson 原理
fastjson实现json对象与JavaBean对象的转换

CVE-2017-18349即Fastjson1.2.24 反序列化漏洞RCE
漏洞出现在Fastjson autoType处理json对象时,没有对@type字段进行完整的安全性验证,我们可以传入危险的类并调用危险类连接远程RMI服务器,通过恶意类执行恶意代码,进而实现远程代码执行漏洞。

判断:
判断fastjson框架
① burp插件自动扫描
② 在web页面抓包,GET改为POST,添加Content-Type:application/json,在发送一个{"test":",即可得到回显有fastjson字样
6、log4j2
一些组件
Spring-Boot-strater-log4j2
Apache struts2
Apache Solr
Apache Flink
Apache Druid
Elasticsearch
Flume
Dubbo
Redis
Logstash
Kafka
vmvare
是一个开源的日志记录组件
原理:该漏洞的主要原因是log4j在日志输出中,未对字符合法性进行严格的限制,执行了JNDI协议加载的远程恶意脚本,从而造成RCE
利用:Log4j2会做什么呢?首先会对该字符串进行解析,发现字符串包含:${},这个会被单独处理,然后再发现这是JNDI的扩展和LDAP协议,并且LDAP协议的地址在本地,要查找的name是exploit,最后调用具体的LDAP模块去请求响应的数据。最多是把该name的数据打印到日志中。但危险的在于:JNDI还支持一个叫命名引用(Naming References)的方式,可以通过远程下载一个class文件,然后下载后加载起来构建对象。
所以JNDI可以远程下载class文件来构建对象就是核心问题,有些时候Java对象比较大,直接通过LDAP存储不方便,就可以通过类似forward的方式不直接返回对象内容,而是告诉你对象属于那个Class以及这个Class的远程地址。
那么危险就来了,如果Class的远程下载URL指定的是一个黑客的服务器,并且下载的Class文件包含攻击代码,你的服务器就完犊子了。

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

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

相关文章

C#,数据检索算法之跳跃搜索(Jump Search)的源代码

数据检索算法是指从数据集合(数组、表、哈希表等)中检索指定的数据项。 数据检索算法是所有算法的基础算法之一。 本文提供跳跃搜索的源代码。 1 文本格式 using System; namespace Legalsoft.Truffer.Algorithm { public static class ArraySe…

港科夜闻|香港科大科研实力受肯定,成立三个赛马会创科实验室,推展数据科学,再生生物学及气候变化研究...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大科研实力受肯定,成立三个赛马会创科实验室,推展数据科学、再生生物学及气候变化研究。香港科大近日获香港赛马会慈善信托基金慷慨捐助港币三千万元,成立三个赛马会创科实验室&…

微信小程序(十七)自定义组件生命周期(根据状态栏自适配)

注释很详细,直接上代码 上一篇 新增内容: 1.获取手机状态栏的高度 2.验证attached可以修改数据 3.动态绑定样式数值 源码: myNav.js Component({lifetimes:{//相当于vue的created,因为无法更新数据被打入冷宫created(){},//相当于vue的mount…

java------抽象类和接口【详解】

目录 一.抽象类 1.1抽象类的定义: 1.2抽象类的语法: 1.3 抽象类的特性: 二.接口 2.1接口概念: 2.2 接口的语法: 2.3接口的使用: 2.4接口的特性: 2.5多个接口的实现: 2.6抽象…

接口测试怎么测?接口测试的流程和步骤(超详细)

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,薪资嘎嘎涨 一、什么是接口测试 我们要想知道接口测试怎么做,首先要明白接口测试是什么?一般…

Tomcat怎么优化

目录 性能方面的优化: 安全方面的优化: 引言:面试官问到的Tomcat怎么优化,这两个方面直接得到他认可!! 性能方面的优化: 内存优化:-Xms java虚拟机初始化时的最小内存、-Xmx java虚…

C++多态深度剖析

文章目录 1. 前言2. 多态的概念及定义2.1 概念2.2 多态的构成条件2.3 虚函数2.4 虚函数的重写2.5 override 和 final2.5 重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类3.1 概念3.2 接口继承和实现继承 4. 多态的原理4.1 虚函数表4.2 多态的原理4.3 动…

《30天自制操作系统》 第一周(D1-D7) 笔记

前言:这是我2023年5月份做的一个小项目,最终是完成了整个OS。笔记的话,只记录了第一周。想完善,却扔在草稿箱里许久。最终决定,还是发出来存个档吧。 一、汇编语言 基础指令 MOV: move赋值,数据传送指令…

UE4 CustomDepthMobile流程小记

原生UE opaque材质中获取CustomDepth/CustomStencil会报错 在其Compile中调用的函数中没有看到报错逻辑 材质节点的逻辑都没有什么问题,所以看一下报错 在HLSLMaterialTranslator::Translate中 修改之后 mobile流程的不透明材质可以直接获取SceneTexture::customd…

Pyroch中transforms 图像增强发方法的应用

1 应用场景 在我们训练模型的时候,有的时候数据不够,就需要通过水平翻转、垂直翻转、镜像、旋转、改变亮度、标准化等方式增加图像的多样性,此时可以调用Pytorch 中的Transforms完成这些操作 2 导入相应的库 from torchvision import tran…

蓝桥杯-sort排序(上)

sort排序 🎈1.算法说明🎈2.例题🔭2.1例题一🔭2.2例题二🔭2.3例题三🔭2.4例题四🔭2.5例题五🔭2.6例题六 🎈1.算法说明 🔎对于一个数组,通过对数组中…

【html+css+js】实现图片轮播效果

简单实现 <html><head><style type"text/css">*{background-color:green;}#lunbo{ width:600px; height:600px;position:relative;left:100px;top:50px;} //定义轮播图片所显示的位置ul{width:100%; height:100%; position:relative;left:0px;top…

基于 SpringBoot+Vue 的读书笔记共享平台的研究与实现,附源码,文档

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

K8s 安装部署-Master和Minion(Node)文档

K8s 安装部署-Master和Minion(Node)文档 操作系统版本&#xff1a;CentOS 7.4 Master &#xff1a;172.20.26.167 Minion-1&#xff1a;172.20.26.198 Minion-2&#xff1a;172.20.26.210&#xff08;后增加节点&#xff09; ETCD&#xff1a;172.20.27.218 先安装部署ETC…

如何用GPT快速写论文?

详情点击链接&#xff1a;如何用GPT快速写论文&#xff1f; 第一&#xff1a;2024年AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智谱AI-GLM-4 第二&#xff1a;Op…

CVE-2024-23897 Jenkins 任意文件读取漏洞

项目介绍 Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。Jenkins是开源CI&CD软件领导者&#xff0c; 提供超过1000个插…

以太网的 MAC 层

目录 1. MAC 层的硬件地址 48 位的 MAC 地址 2. MAC 帧的格式 以太网 V2 的 MAC 帧格式 无效的 MAC 帧 IEEE 802.3 MAC 与以太网 V2 MAC 帧格式的区别 1. MAC 层的硬件地址 硬件地址又称为物理地址&#xff0c;或 MAC 地址。 IEEE 802 标准为局域网规定了一种 48 位…

多维数组的使用

1. 数组的概念 数组(Array)&#xff1a;是多个相同类型数据按一定顺序排列的集合&#xff0c;并使用一个名字命名&#xff0c;并通过编号的方式对这些数据进行统一管理。 数组中的概念&#xff1a; – 数组名 – 下标&#xff08;或索引&#xff09; – 元素 – 数组的长度 …

flink-java使用介绍,flink,java,DataStream API,DataSet API,ETL,设置 jobname

1、环境准备 文档&#xff1a;https://nightlies.apache.org/flink/flink-docs-release-1.17/zh/ 仓库&#xff1a;https://github.com/apache/flink 下载&#xff1a;https://flink.apache.org/zh/downloads/ 下载指定版本&#xff1a;https://archive.apache.org/dist/flink…

【Leetcode】2861. 最大合金数

文章目录 题目思路代码结果 题目 题目链接 假设你是一家合金制造公司的老板&#xff0c;你的公司使用多种金属来制造合金。现在共有 n 种不同类型的金属可以使用&#xff0c;并且你可以使用 k 台机器来制造合金。每台机器都需要特定数量的每种金属来创建合金。 对于第 i 台…