网络安全筑基篇——反序列化漏洞
目录
序列化是什么?
反序列化又是什么?
反序列化漏洞的危害
代码样例
常见的魔术方法
修复方式有哪些?
常见的反序列化漏洞
Shiro反序列化漏洞
Fastjson反序列化漏洞
序列化是什么?
将实例化对象转换成字节流的过程
反序列化又是什么?
将字节流转换成实例化对象的过程
反序列化漏洞的危害
反序列化漏洞是一种安全漏洞,其危害主要体现在以下几个方面:
-
远程代码执行(Remote Code Execution, RCE): 反序列化漏洞可以被攻击者利用来在目标系统上执行恶意代码。这种代码可以是远程控制命令、窃取敏感数据、修改系统配置等,具有极大的破坏力和危险性。
-
拒绝服务攻击(Denial of Service, DoS): 攻击者可能利用反序列化漏洞来导致系统崩溃或服务不可用,例如通过传递恶意序列化数据导致系统资源耗尽或死锁。
-
数据篡改和伪造(Data Tampering and Forgery): 攻击者可以利用反序列化漏洞来篡改数据或伪造合法的用户会话,导致系统信任恶意构造的数据或者执行未经授权的操作。
-
提升权限(Privilege Escalation): 如果攻击者成功利用反序列化漏洞执行了恶意代码,他们可能会尝试提升其在系统中的权限,获取更高的访问权限,从而进一步危害系统安全。
-
敏感信息泄露(Information Disclosure): 反序列化漏洞有可能导致敏感信息泄露,例如通过序列化和反序列化操作中的错误处理机制或日志泄露出敏感数据。
总之,反序列化漏洞的危害不仅限于单一的攻击向量,而是可能对系统的安全性和稳定性造成广泛的影响和破坏。因此,开发者在编写和处理序列化和反序列化代码时,务必要格外小心和谨慎,避免因为这类漏洞而给系统带来安全隐患。
代码样例
import java.io.*;// 定义可序列化的Person类
class Person implements Serializable {private String name;private int age;// 构造函数public Person(String name, int age) {this.name = name;this.age = age;}// 获取姓名public String getName() {return name;}// 获取年龄public int getAge() {return age;}
}public class SerializationExample {// 序列化对象到文件public static void serializeObject(Person obj, String filename) throws IOException {try (FileOutputStream fos = new FileOutputStream(filename);ObjectOutputStream oos = new ObjectOutputStream(fos)) {oos.writeObject(obj);System.out.println("Serialization successful. Object saved to " + filename);}}// 反序列化对象从文件public static Person deserializeObject(String filename) throws IOException, ClassNotFoundException {try (FileInputStream fis = new FileInputStream(filename);ObjectInputStream ois = new ObjectInputStream(fis)) {Person obj = (Person) ois.readObject();System.out.println("Deserialization successful. Object loaded from " + filename);return obj;}}public static void main(String[] args) {String filename = "person.ser"; // 序列化文件名// 创建一个Person对象Person person = new Person("Alice", 30);try {// 序列化对象到文件serializeObject(person, filename);// 从文件反序列化对象Person loadedPerson = deserializeObject(filename);// 打印反序列化后的对象属性System.out.println("Name: " + loadedPerson.getName() + ", Age: " + loadedPerson.getAge());} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
}
常见的魔术方法
__sleep() //使用serialize()时触发
__destruct() //对象被销毁时触发,在脚本终止或对象引用计数为0时调用,通常会执行数据清除就或连接断开操作
__call() //在对象上下文中调用不可访问的方法时触发 ,通常用于错误处理,防止脚本因为调用错误而终止执行
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据,通常用于设置和获取对象私有属性
__set() //用于将数据写入不可访问的属性,通常用于设置和获取对象私有属性
__isset() //在不可访问的属性上调用isset()或empty()触发
__unset() //在不可访问的属性上使用unset()时触发
__invoke() //当脚本尝试将对象调用为函数时触发
__clone() //当把一个对象赋给另一个对象时自动调用
__wakeup() //unserialize函数会检查是否存在wakeup方法,如果存在则先调用wakeup方法,做一些必要的初始化连数据库等操作
__construct() //PHP5允许在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建新对象时先调用此方法
__destruct() //PHP5引入析构函数的概念,析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行
__toString() //用于一个类被当成字符串时应怎样回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串,否则将发出一条 E_RECOVERABLE_ERROR 级别的致命错误
修复方式有哪些?
- 验证和过滤输入:在执行反序列化之前,对用户输入数据执行验证和过滤。
- 使用安全的序列化方法:避免使用 PHP 的不安全序列化方法(例如,unserialize()),而是使用更安全的替代方法,如 JSON 或XML 序列化/反序列化。
- 序列化和反序列化的白名单验证:限制反序列化操作的类范围,可创建一个白名单,只允许指定的类A执行反序列化,或者创建一个黑名单,禁止一些危险的类执行反序列化。以限制攻击方能够执行的恶意代码。
常见的反序列化漏洞
Shiro反序列化漏洞
Shiro < 1.2.4版本会存在此漏洞,挖掘的时候删除请求包中的rememberMe参数,返回包中包含rememberMe=deleteMe字段。说明使用了shiro组件,可以尝试此漏洞。
如果返回包无此字段,可以通过在发送数据包的cookie中增加字段:****rememberMe=,然后查看返回数据包中是否存在关键字
此漏洞有两个版本利用方式,
Shiro550:不需要提供秘钥,使用默认秘钥就可以利用
Shiro721:先爆破秘钥,成功后可以进一步利用
Fastjson反序列化漏洞
Fastjson提供了反序列化功能,允许用户在输入JSON串时通过“@type”键对应的value指定任意反序列化类名,由此造成反序列化漏洞;
漏洞挖掘方式:如果请求包中出现http头Accept:application/json,怀疑存在fastjson组件,构造报错,返回包中出现fastjson时,确认使用了fastjson组件,可以尝试此漏洞
Fastjson从1.2.24到1.2.67多个版本存在此漏洞,如果没有回显版本,可以将以下payload,挨个替换到请求内容,尝试是哪个版本的漏洞
- {"@type":"java.net.InetSocketAddress"{"address":,"val":"aaa.dnslog.cn"}}
- {"@type":"java.net.Inet4Address","val":"aaa.dnslog.cn"}
- {"@type":"java.net.Inet6Address","val":"aaa.dnslog.cn"}
- {"@type":"com.alibaba.fastjson.JSONObject",{"@type":"java.net.URL", "val":"http://aaa.dnslog.cn"}}""}
- Set[{"@type":"java.net.URL","val":"http://aaa.dnslog.cn"}]
- Set[{"@type":"java.net.URL","val":"http://aaa.dnslog.cn"}
- {{"@type":"java.net.URL","val":"http://aaa.dnslog.cn"}:
相关文章:
网络安全筑基篇——反序列化漏洞
目录 序列化是什么? 反序列化又是什么? 反序列化漏洞的危害 代码样例 常见的魔术方法 修复方式有哪些? 常见的反序列化漏洞 Shiro反序列化漏洞 Fastjson反序列化漏洞 序列化是什么? 将实例化对象转换成字节流的过程 反序…...
帝国cms定时审核并更新的方法
比如你网站采集了成千上万篇文章,不可能一下子全部放出来的,所以为了模拟人工发布,那么就需要定时审核发布文章内容,本文内容核心解决了更加个性化的逼真模拟人工更新网站内容。 第一:首先要满足你的表中有未审核的数据…...
一个简单好用安全的开源交互审计系统,支持SSH,Telnet,Kubernetes协议
前言 在当今的企业网络环境中,远程访问和交互审计成为了保障网络安-全的重要组成部分。然而,现有的解-决方案往往存在一些痛点,如复杂的配置、有限的协议支持、以及审计功能的不足。这些问题不仅增加了IT管理员的负担,也为企业的…...
使用Spring Boot和WebSocket实现实时通信
使用Spring Boot和WebSocket实现实时通信 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot应用中使用WebSocket实现实时通信&am…...
【Vue】集成富文本编辑器
这文章使用的是wangeditor插件,官网地址:wangEditor,这个比较简单 安装 npm i wangeditor --save 使用 <div id"editor"></div>import E from "wangeditor"const editor new E("#editor") e…...
【论文阅读】--Popup-Plots: Warping Temporal Data Visualization
弹出图:扭曲时态数据可视化 摘要1 引言2 相关工作3 弹出图3.1 椭球模型3.1.1 水平轨迹3.1.2 垂直轨迹3.1.3 组合轨迹 3.2 视觉映射与交互 4 实施5 结果6 评估7 讨论8 结论和未来工作致谢参考文献 期刊: IEEE Trans. Vis. Comput. Graph.(发表日期: 2019&…...
重建大师引擎数0,本地引擎设置改不了,空三在跑,这样是正常的吗?
答:任务目录和引擎监控目录并没有按照网络集群设置,需要调整为网络路径。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件,输入倾斜照片,激光点云,POS信息及像控点,输出高精度彩色网…...
APM教程-SkyWalking安装和配置
SkyWalking简介 APM (Application Performance Management) 即应用性能管理,属于IT运维管理(ITOM)范畴。主要是针对企业 关键业务的IT应用性能和用户体验的监测、优化,提高企业IT应用的可靠性和质量,保证用户得到良好的服务&#…...
斯坦福大学 AI 研究部门推出的“7 周人工智能学习计划”
①AI Python 基础,包括计算机原理、语法、判断语句等; ②AI Python 进阶,涉及 Linux 命令、多任务编程等; ③机器学习,涵盖算法、数据结构等; ④计算机视觉与图像处理,包含图像分类、目标检测…...
World of Warcraft [CLASSIC] plugin lua
World of Warcraft [CLASSIC] plugin lua 魔兽世界lua脚本插件 World of Warcraft API - Wowpedia - Your wiki guide to the World of Warcraft D:\World of Warcraft\_classic_\Interface\AddOns zwf.lua function CountdownFunc()CountdownFrame CreateFrame("Fram…...
背靠广汽、小马智行,如祺出行打得过滴滴和百度吗?
©自象限原创 作者丨艾AA 编辑丨薛黎 北京时间6月14日凌晨,在特斯拉股东大会上,马斯克阐述了对Robotaxi(自动驾驶出租车)商业模式的构想——特斯拉不仅会运营自己的无人驾驶出租车车队,还可以让特斯拉车主们的爱…...
CCSP自考攻略+经验总结
备考攻略 备考攻略准备阶段通读阶段精度阶段总复习阶段刷题阶段命运审判 写到最后 备考攻略 趁着对ssp知识点的理解还在,开始ccsp的考证之路,文章结构还是按照cissp备考篇的结构梳理。本次备考和cissp的离职在家备考不同,ccsp是在职利用非工…...
面试突击:ArrayList源码详解
本文已收录于:https://github.com/danmuking/all-in-one(持续更新) 前言 哈喽,大家好,我是 DanMu。ArrayList 是我们日常开发中不可避免要使用到的一个类,并且在面试过程中也是一个非常高频的知识点&#…...
力扣每日一题:2734. 执行子串操作后的字典序最小字符串
题目链接 脑子比较笨,分三种情况考虑: 以a开头。xxa,a在中间。 对于情况2还有两种可能: 1. 全是a,最后一个元素需要替换成z,因为必须执行一次操作。 2. aaaxxa,中间有一段非a,将这…...
C++11中std::thread的使用
C11 引入了 std::thread,它是用于创建和管理线程的标准库类。以下是详细的讲解,包括如何使用 std::thread 进行线程创建、管理和参数传递等操作。 1. 包含必要的头文件 在使用 std::thread 前,需要包含 <thread> 头文件: …...
酷瓜云课堂(内网版)v1.1.5 发布,局域网在线学习+考试系统
更新内容 更新layui-v2.9.10更新docker国内镜像地址增加导入镜像构建容器的方式教师不批阅非首次考试试卷轮播图增加专栏类型目标链接增加课程能否发布检查去除初始化kindeditor语言文件去除选择题EF选项优化富文本内容显示样式优化内容图片点击放大监听优化试题题干答案等图片…...
大数据之Hadoop部署
文章目录 服务器规划服务器环境准备1. 网络测试2. 安装额外软件包3. 安装基础工具4. 关闭防火墙5. 创建用户并配置权限6. 创建目录并设置权限7. 卸载JDK8. 修改主机名9. 配置hosts文件10. 重启服务器 配置免密登录安装Java安装Hadoop1. Hadoop部署2. 配置Hadoop3. 格式化Hadoop…...
Java异常处理中的“throw”与“throws”的区别
在Java中,throw 和 throws 是两个用于处理异常的关键词,它们的使用场景和目的有所不同 1. throw throw 关键字用于在Java程序中显式地抛出一个异常。当你检测到某些条件(通常是错误条件)时,你可以使用 throw 来抛出一…...
英语智汇学习系统
目 录 1 软件概述 1.1 项目研究背景及意义 2 系统相关技术 2.1 HTML、WXSS、JAVASCRIPT技术 2.2 Vanilla框架 2.3 uni-app框架 2.4 MYSQL数据库 3 需求分析 3.1 可行性分析 3.2 功能需求分析 3.3 系统用户及用例分析 3.4 非功能需求分析 3.5 数据流图…...
ExtractAItoTEXT 提取Adobe illustrator AI文件中的文字到文本文件翻译并写回到Adobe illustrator AI文件
Extract Text from Adobe illustrator to text for translate and write back to Adobe illustrator after translate in text file. Originally script from marceloliaohotmail.com during his work in SDL. Updated by me. 从Adobe illustrator中提取文本以进行翻译&#x…...
ms17-010 ms12-020 ms-08-067
MS17-010是一个由微软发布的安全公告编号,它指代了一个严重级别的安全漏洞,该漏洞存在于Microsoft Windows的Server Message Block 1.0 (SMBv1)协议处理中。这个漏洞被命名为“永恒之蓝”(EternalBlue),因为它最初是由…...
【海思Hi3403V100】多目拼接相机套板硬件规划方案
海思Hi3403V100 是专业超高清智能网络摄像头 SoC。该芯片最高支持四路 sensor 输入,支持最高 4K60fps 的 ISP 图像处理能力,支持 3F 、WDR、多级降噪、六轴防抖、硬件拼接、多光谱融合等多种传统图像增强和处理算法,支持通过AI 算法对输入图像…...
AI的赚钱风向,彻底变了!
从2023年3月起,生成式AI技术的浪潮席卷全球,让不少人开始焦虑中国AI技术与美国的差距。然而,最近的趋势显示,AI创业的盈利模式已经发生了根本性的变化。今年,我们见证了AIGC(人工智能生成内容)企…...
服务器重启后jenkins任务内容不见了,并且新建任务也不见了
服务器centos7.4 背景:服务器异常重启后,jenkins上面的任务只剩下一些前端项目,后端的任务都不展示了,jenkins版本是Jenkins 2.346.3 解决方案:根据显示,jenkins很多的插件引用失败,显示需要升…...
如何选择合适的WordPress主机?
选择合适的WordPress主机需要考虑多个因素,包括性能、速度、存储空间、带宽、硬件配置、操作系统、支持的软件版本以及安全性等。以下是一些详细的建议: 性能和速度:选择一个能够提供快速加载速度和稳定性能的主机至关重要。快速加载的网站不…...
面试突击:Java 集合知识体系梳理
本文已收录于:https://github.com/danmuking/all-in-one(持续更新) 前言 哈喽,大家好,我是 DanMu。在 Java 开发中,集合类对象绝对是被使用最频繁的对象之一。因此,深入了解集合类对象的底层数…...
AI智能管理系统设计文档
AI智能管理系统设计文档 1. 引言 本设计文档旨在开发一套全面的AI智能管理系统,以优化生产运营效率和决策质量。该系统将利用先进的AI技术和数据分析能力,提供自动化流程控制、预测性维护、智能决策支持等功能。 2. 需求分析与目标设定 2.1 业务需求…...
干涉阵型成图参数记录【robust】
robust 这个玩意经常忘记,就是取2的时候是更加显示大尺度的结构,取-2更加显示小尺度结果,一般取0就是正常就好了...
React Native工程运行时下载gradle超时问题
React Native工程在运行Android的时候会下载gradle,但是由于众所周知的问题,总是下载失败,这时可以通过修改 <APP_ROOT>/android/wrapper/gradle-wrapper.properties 文件中 distributionUrl 参数使用国内 gradle 镜像来提高下载速度。…...
本地离线模型搭建指南-LLaMA-Factory训练框架及工具
搭建一个本地中文大语言模型(LLM)涉及多个关键步骤,从选择模型底座,到运行机器和框架,再到具体的架构实现和训练方式。以下是一个详细的指南,帮助你从零开始构建和运行一个中文大语言模型。 本地离线模型搭…...
vi设计风格有哪些/关键词排名优化软件
首先,本地reset 到某次提交 git reset 9448fc0a8be4bbcc 如果是回退到上个版本 使用 git reset HEAD^ 注意:这里使用hard,将9448fc0a8be4bbcc之后的提交舍弃掉,否则,9448fc0a8be4bbcc之后的还会显示在工作区 然后将本地分支强…...
wordpress 域名访问/站长之家素材网
据悉,美国能源部SunShot计划将于9月25日前后公布一项针对光热海水淡化技术研究的资助公告(FOA),所拨款项将用于支持该项技术的研发和初期示范。 据介绍,该项光热海水淡化技术最大的优势是成本低,能耗少。使用该技术不但无需使用高…...
深圳福田区天气/游戏优化
我们项目配置了AvailabilityFilteringRule作为所有Ribbon调用的负载均衡规则,它有那些坑呢(理解歧义和注意点)? 首先来看com.netflix.loadbalancer.AvailabilityFilteringRule.java源码,核心是choose方法: …...
机械做卖产品网站/app推广平台有哪些
子接口到底是什么东东,咋回事?我这里就过多的解释,如果不懂单臂路由,请自行“补功课”,这样才会更容易理解SSG系列当中配置细节和问题。说下需求,在常见的企业组网当中,不少有一些“不专业”的网…...
点击图片进入网站怎么做/有友情链接的网站
从今天开始,Android Studio无法在styles.xml中找到AppCompat主题,但是例如代码中的AppCompatActivity确实得到了识别.我的Android Studio版本是2.2.2,Build#AI-145.3360264我已经尝试升级到最新的构建工具,编译sdk(25)版本等,但它没有解决问题.目前我安装了以下内容(来自sdk经理…...
山西省住房城乡建设厅门户网站/全球搜索引擎市场份额
2012年扑克牌训练日记之一 概述 训练时间:1个星期 时间是:2012年5月8日 成绩是:24分钟 方法 桩子:26个桩子 分别是: 桩子序号 桩子名称 1 头发 2 眼睛 3 鼻子 4 嘴巴 5 耳朵 6 脖子 7 肩膀 8 …...