宣武门网站建设/宁德市古田县
文章目录
- 1、序列化与反序列化
- 1.1、引入
- 1.2、序列化实例
- 1.2.1、定义一个类
- 1.2.2、创建 对象
- 1.2.3、反序列化
- 1.2.4、对象注入
- 2、漏洞何在
- 2.1、漏洞触发
- 2.1.2、定义一个类
- 2.1.3、定义一个对象
- 2.1.3、反序列化执行代码
- 2.2 为什么会这样
- 3、反序列化漏洞攻防
- 3.1、PHP反序列化实例
- 3.2、Java反序列化实例
- 3.3、反序列化漏洞防御
为什么要序列化?
序列化,“将对象的状态信息转换为可以存储或传输的形式的过程”,这种形式⼤多为字节流、字符串、json 串。在序列化期间内,将对象当前状态写⼊到临时或永久性的存储区。以后,就可以通过从存储区中读取或还原(反序列化)对象的状态,重新创建该对象。简单的说,序列化就是把⼀个对象变成可以传输的字符串,可以以特定的格式在进程之间跨平台安全的进⾏通信。
1、序列化与反序列化
以PHP 语⾔为例
1.1、引入
JSON 数据是数据的⼀种表达形式,与Python ⾥的字典类似
<?php
// json.php
$stu = array('name' => 'JayChou','age' => 18,'sex' => true,'score' => 89.9
);
// echo $stu;
// var_dump($stu);
$stu_json = json_encode($stu);
echo $stu_json;
echo "<hr />";
$stu_json = isset($_GET['stu'])?$_GET['stu']:$stu_json;
$stu = json_decode($stu_json);
var_dump($stu);
?>
验证:
?stu={"name":"jaychou","age":19,"sex":true,"score":89.9}
1.2、序列化实例
1.2.1、定义一个类
<?php// stu.class.phpclass Stu{public $name;public $age;public $sex;public $score;}
?>
1.2.2、创建 对象
创建⼀个对象,并对该对象进⾏序列化操作,将对象转化为可以存储、传输的字符串
<?php
//serialize.php
include "./stu.class.php";$stu1 = new Stu();$stu1->name = "JayChou"; #$stu1.name
$stu1->age = 18;
$stu1->sex = true;
$stu1->score = 68.99;//echo $stu1; 报错
// var_dump($stu1)$_stu1 = serialize($stu1);
echo $_stu1;
?>
序列化后的字符串:
O:3:"Stu":4:{s:4:"name";s:7:"JayChou";s:3:"age";i:18;s:3:"sex";b:1;s:5:"score";d:68.989999999999995;}
1.2.3、反序列化
将字符串转化为对象
<?php// unserialize.phpinclude "./stu.class.php";$stu1_ser = 'O:3:"Stu":4:{s:4:"name";s:7:"JayChou";s:3:"age";i:18;s:3:"sex";b:1;s:5:"score";d:68.989999999999995;} ';$stu1_obj = unserialize($stu1_ser);var_dump($stu1_obj);
?>
1.2.4、对象注入
如果反序列化字符串,Web ⽤⼾可以控制,则造成对象注⼊。
<?php// unserialize.phpinclude "./stu.class.php";// $stu1_ser = 'O:3:"Stu":4:{s:4:"name";s:7:"JayChou";s:3:"age";i:18;s:3:"sex";b:1;s:5:"score";d:68.989999999999995;} ';$stu1_ser = $_GET['obj']; #动态传参$stu1_obj = unserialize($stu1_ser);var_dump($stu1_obj);
?>
PHP 的反序列化漏洞也叫PHP 对象注⼊,是⼀个⾮常常⻅的漏洞,这种漏洞在某些场景下虽然有些难以利⽤,但是⼀旦利⽤成功就会造成⾮常危险的后果
2、漏洞何在
2.1、漏洞触发
2.1.2、定义一个类
<?php
// vul.class.phpclass Vul{public $str = 'JayChou';function __destruct(){@eval($this -> str);}
}
?>
2.1.3、定义一个对象
<?php
// test.php
include './vul.class.php';$s = new Vul();
echo serialize($s);
echo "<hr />";$_s =isset($_GET['s_ser'])?$_GET['s_ser']:'O:3:"Vul":1:{s:3:"str";s:7:"JayChou";}';$s= unserialize($_s);
var_dump($s);
?>
序列化后
O:3:"Vul":1:{s:3:"str";s:7:"JayChou";}
反序列化后
object(Vul)#2 (1) { ["str"]=> string(7) "JayChou" }
2.1.3、反序列化执行代码
?s_ser=O:3:"Vul":1:{s:3:"str";s:10:"phpinfo();";}
2.2 为什么会这样
__destruct()
,会被对象⾃动调⽤。
以__
开头的函数,是PHP 中的魔术⽅法。类中的魔术⽅法,在特定情况下会⾃动调⽤。即使魔术⽅法在类中没有被定义,也是真实存在的
魔术方法 | 触发条件 |
---|---|
__construct() | 在创建对象时⾃动调⽤,构造函数 |
__destruct() | 在销毁对象时⾃动调⽤,析构函数 |
__call();
__callStatic();
__get();
__set();
__isset();
__unset();
__sleep();
__wakeup(); 创建对象之前触发。
__toString();
__invoke();
__set_state();
__clone();
__debuginfo();
漏洞形成的根本原因就是程序没有对⽤⼾输⼊的反序列化字符串进⾏检测,导致反序列化过程可以被恶意控制,进而造成代码执⾏、GetShell 等⼀系列不可控的后果。反序列化漏洞并不是PHP 特有的
,也存在于Java
、Python
语⾔中,其原理基本相同
3、反序列化漏洞攻防
3.1、PHP反序列化实例
博客跳转
3.2、Java反序列化实例
- Weblogic < 10.3.6 ‘wls-wsat’ XMLDecoder 反序列化漏洞(CVE-2017-10271)
- S2-045 Remote Code Execution Vulnerablity(CVE-2017-5638)
- JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)
- fastjson 1.2.24 反序列化导致任意命令执行漏洞
- Fastjson 1.2.47 远程命令执行漏洞
- Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)
3.3、反序列化漏洞防御
- 升级组件到最新版本
- ⿊⽩名单过滤敏感字符
- 禁⽤反序列化功能
- 部署安全设备
相关文章:

渗透测试漏洞原理之---【不安全的反序列化】
文章目录 1、序列化与反序列化1.1、引入1.2、序列化实例1.2.1、定义一个类1.2.2、创建 对象1.2.3、反序列化1.2.4、对象注入 2、漏洞何在2.1、漏洞触发2.1.2、定义一个类2.1.3、定义一个对象2.1.3、反序列化执行代码 2.2 为什么会这样 3、反序列化漏洞攻防3.1、PHP反序列化实例…...

建站系列(四)--- Web服务器之Apache、Nginx
目录 相关系列文章前言一、简介二、Apache与Nginx(1)Apache与Nginx的区别(2)Nginx相对于Apache的优点(3)Apache相对于Nginx 的优点(4)选择 三、反向代理与正向代理 相关系列文章 建…...

TCP和UDP的区别
TCP和UDP的区别 1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接 2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复&…...

MBR、GPT、LVM分区
GPT分区(支持大于2T的空间分区UEFI系统) 支持128个主分区 (parted) mklabel New disk label type? gpt (parted) mkpart Partition name? []? vdb1 File system type? [ext2]? ext4 Start? 0% End? 40% (parted) mkpart Partition name? []…...

uniapp 下拉刷新
需求:我使用一个滚动列表,需要下拉刷新页面的功能 下拉刷新的情况取决于滚动列表使用的技术 第一 种:页面滚动 产生页面很简单,只需要列表长度超过页面高度,就直接产生了滚动条。 处理页面滚动的下拉刷新。 1. 配置…...

ifstream之seekg/tellg
声明:我个人特别讨厌:收费专栏、关注博主才可阅读等行为,推崇知识自由分享,推崇开源精神,呼吁你一起加入,大家共同成长进步! 在文件读写的时候,一般需要借助fstream来进行文件操作&a…...

OpenCV 01(图像加载与显示)
一、机器视觉 现在说的机器视觉(Machine Vision)一般指计算机视觉(Computer Vision), 简单来说就是研究如何使机器看懂东西。就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传…...

1-Pytorch初始化张量和张量的类型
1-Pytorch初始化张量和张量的类型 1 导入必备库 import torch import numpy as np2 初始化张量 # 初始化张量 t torch.tensor([1,2])#.type(torch.FloatTensor) print(t) print(t.dtype)输出: tensor([1, 2]) torch.int643 创建float型张量 # 创建float型张量…...

诊断网络卡的原因
首先,通过ipconfig和ping命令来诊断。 手头要有一台Windows电脑。在dos窗口下,输入ipconfig,可以查看到本机“手动设置”或者“自动获取”的IP地址。 这里有几种可能性: IP地址和网关地址都正确。(不存在问题…...

100万级连接,爱奇艺WebSocket网关如何架构
说在前面 在40岁老架构师 尼恩的读者社区(50)中,很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 最近,尼恩指导一个小伙伴简历,写了一个《高并发网关项目》,此项目帮这个小伙拿到 字节/阿里/微…...

当电脑遇到msvcp110.dll丢失怎么办?最新解决方法分享
在使用电脑过程中,我们经常会遇到一些系统文件丢失的问题。其中,msvcp110.dll是Windows操作系统中的一个重要的动态链接库文件,它包含了许多与C运行库有关的函数和类。当系统中缺少或损坏这个文件时,可能会导致一些应用程序无法正…...

微信小程序自动化测试pytest版工具使用方法
-mini https://github.com/zx490336534/pytest-mini 微信小程序自动化测试pytest插件/工具 基于MiniTest进行pytest改造 使用方法 准备测试小程序 根据miniprogram-demo项目介绍运行一次项目 成功运行后关闭 安装&更新 pip install pytest-mini --upgrade引入插件…...

React 与 TS 结合使用时的技巧总结
使用 TS 泛型来定义通用参数 有些时候会遇到有些业务页面结构是通用的,只是传入页面组件的参数略有不同,这样我们可以使用 TS 的泛型来定义通用参数。具体的实例如下: type GenericPropsData<T> {items: T[];onClick: (value: T) &g…...

【深入解析spring cloud gateway】07 自定义异常返回报文
Servlet的HttpResponse对象,返回响应报文,一般是这么写的,通过输出流直接就可以将返回报文输出。 OutputStream out response.getOutputStream(); out.write("输出的内容"); out.flush();在filter中如果发生异常(例如…...

如何写一个sh脚本将一个本地文件通过 scp命令上传到远程的 centos服务器?
如何写一个sh脚本将一个本地文件通过 scp命令上传到远程的 centos服务器? 1.1 背景需求1.2 解决方案1.3 附录1.3.1 scp命令用法与示例1.3.1.1 scp命令用法与解释1.3.1.2 scp 命令用法示例1.3.1.2.1 示例一:从本地复制文件到远程计算机1.3.1.2.2 示例二&a…...

【CMake工具】工具CMake编译轻度使用(C/C++)
目录 CMake编译工具 一、CMake概述 二、CMake的使用 2.1 注释 2.1.1 注释行 2.1.2 注释块 2.2 源文件 2.1.1 共处一室 2.1.2 VIP包房 2.3 私人定制 2.2.1 定义变量 2.2.2 指定使用的C标准 2.2.3 指定输出的路径 2.4 搜索文件 2.3.1 方式1 2.3.2 方式2 2.5 包含…...

用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
今天用Navicat进行数据备份的时候,发现由于数据库连接数目过多导致连接锁定,这种情况在多人协同开发的场景中很常见。当然我这里也因为多个应用使用了数据库连接,所以出现了Too Many Connections。 可能是超过最大连接数了。 1、进入Navicat…...

知识储备--基础算法篇-矩阵
2.矩阵 2.1第54题螺旋矩阵 第一题上来就跪了,看了官方答案感觉不是很好理解,找了一个比较容易理解的。 class Solution(object):def spiralOrder(self, matrix):""":type matrix: List[List[int]]:rtype: List[int]"""…...

Zabbix -- QQ邮箱报警
目录 一、创建监控项及触发器 1.1创建监控项 1.2 创建监控项的触发器 1.3 测试触发器 二、邮箱媒介设置 2.1 设置报警媒介类型 2.2 创建用户群组和用户 三、动作绑定 3.1 创建动作 3.2 动作操作 3.3 动作测试(发送邮件测试) 四、问题总结 4.1 邮件发送…...

eclipse链接MySQL数据库
在MySQL官网下载驱动 MySQLhttps://www.mysql.com/cn/点击下载: 页面滚动到最下方选择社区版: 选择Java版本: 接下来,需要选择操作系统,我们选择平台独立: eclipse 接下来,我们打开eclipse,新建…...

ansible 使用roles简单部署LAMP平台
目录 一、了解roles目录 二、基于构建LAMP平台创建roles目录 1、在192.168.115.148创建目录 2、书写php的测试页面 3、编写httpd角色的main.yml文件 4、编写mysql角色的main.yml文件 6、编写lamp的playbook 7、启动剧本 8、访问 一、了解roles目录 在Ansible中&#…...

如何使用Web Storage对页面中数据进行监听?
当使用Web Storage存储的数据发生变化时,会触发Window对象的storage事件,我们可以监听该事件并指定事件处理函数,当其他页面中的localStorage或 sessionStorage中保存的数据发生改变时,就会执行事件处理函数。 监听storage事件的…...

GO语言网络编程(并发编程)runtime包
GO语言网络编程(并发编程)runtime包 1. runtime包 1.1.1. runtime.Gosched() 让出CPU时间片,重新等待安排任务(大概意思就是本来计划的好好的周末出去烧烤,但是你妈让你去相亲,两种情况第一就是你相亲速度非常快,见…...

MR源码解析和join案例
MR源码解析 new Job(): 读取本地文件, xml配置job.start(): 启动线程job的run():线程方法 runTasks(): 传入对应的接口,启动map或者reduceMapTask类的run(): 设置map阶段的参数,初始化任务,创建上下文对象 创建读取器LineRecordReader判断是…...

ML+LLMs:利用LLMs大语言模型赋能或者结合ML机器学习算法进行具体应用的简介、具体案例之详细攻略
ML+LLMs:利用LLMs大语言模型赋能或者结合ML机器学习算法进行具体应用的简介、具体案例之详细攻略 目录 利用LLMs赋能或者结合ML算法进行具体应用的简介...

python GIL锁
1、GIL是什么 GIL:Global Interpreter Lock又称全局解释器锁。简单来说是一个互斥锁,每个线程在执行的过程中都需要先获取GIL,作用就是限制多线程同时执行,使得在同一进程内任何时刻仅有一个线程在执行。 由于GIL的存在࿰…...

git打tag和版本控制规范
我们在开发中经常会遇到要打tag的情况,但这个tag应该如何打呢?我不知道大家平时是怎么打的,但我基本就是从1.0.0开始进行往上递增,至于如何递增,基本凭感觉。今天同事新打了一个tag进行发版,然后被架构点名…...

php版 短信跳转微信小程序
实现这功能首先,小程序端添加业务域名 php代码 <?php declare (strict_types1);namespace app\controller\Admin;use app\model\Set; use app\Request;class Admin_Url_Scheme {public function getScheme(Request $request) {$appid 小程序appid;$secret 小…...

leetcode127单词接龙刷题打卡
127. 单词接龙 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> ... -> sk: 每一对相邻的单词只差一个字母。对于 1 < i < k 时,每个 si 都在 wordList 中。注意&am…...

基于SSM的物流管理系统
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...