当前位置: 首页 > news >正文

php序列化与反序列化

文章目录

  • 基础知识
    • 魔术方法:在序列化和反序列化过程中自动调用的方法
    • 什么是 `__destruct()` 方法?
    • 何时触发 `__destruct()` 方法?
    • 用途:
    • 语法示例:
  • 反序列化漏洞利用
    • 前提条件
    • 一些绕过策略
      • 绕过__wakeup函数
      • 绕过正则匹配
      • 绕过相等逻辑判断
      • 利用大S的ascll码绕过
      • 反序列化字符逃逸
  • 高级反序列化
    • phar反序列化
      • 什么是 PHAR 文件?
        • 特点
    • session反序列化

基础知识

序列化:将对象转化为一个可传输的字符串,serialize()
反序列化:将字符串重新转化为对象
只有类的属性可以序列化,方法不可以
如果属性权限为private,那么序列化后,存储的属性名字为%00+类名+%00+属性名
如果属性权限为protected,那么序列化后,存储的属性名字为%00+*+%00+属性名

<?php
类的属性可以是类
class ctf{public $name;
} 
class user{public $type='vip';
}
$c=new ctf();
$c->name=new user();
echo $c->name->type;

魔术方法:在序列化和反序列化过程中自动调用的方法

1. _sleep()方法在序列化时自动调用
2. _wakeup()方法在反序列化时自动调用 
3. 反序列化时自动调用_destruct析构方法,方法内恶意代码也会被执行
4. 执行类不存在的方法时自动调用_call方法,执行不存在的static方法时会调用_callstatic()方法
5. _get方法在访问不存在属性时自动调用,_set方法在写入不存在属性时自动调用
6. _isset()方法和_unset()方法
7. _tostring()方法,把对象和字符串拼接或者当字符串用时自动调用
8. _invoke()方法,当类的实例被当作函数调用
9.  __set_state 方法,文档中说执行 var_export时自动调用
10.  __debugInfo 方法的属性修饰符,执行var_dump时自动调用
11.  __clone方法,当使用clone关键字 ,clone一个对象时,会自动调用

在这里插入图片描述

什么是 __destruct() 方法?

__destruct() 是 PHP 中的一个魔术方法(magic method),它用于在对象销毁时自动执行一些清理操作,比如释放资源或关闭数据库连接。这个方法会在对象生命周期结束时自动调用,无需手动触发。

何时触发 __destruct() 方法?

__destruct() 方法在以下情况下被自动调用:

  1. 对象被销毁时:当对象不再被使用时,PHP 会自动调用 __destruct()
  2. 脚本结束时:当脚本执行结束时,所有未销毁的对象都会调用 __destruct()
  3. 手动销毁对象:当调用 unset() 或者赋值 null 给对象时,__destruct() 会被触发。

用途:

  • 释放资源:比如关闭数据库连接、关闭文件句柄、释放内存等。
  • 清理工作:可以用于日志记录、清理临时文件等。

语法示例:

class MyClass {public function __construct() {echo "对象创建了!\n";}public function __destruct() {echo "对象销毁了!\n";}
}$obj = new MyClass();  // 输出:对象创建了!
unset($obj);            // 输出:对象销毁了!

反序列化漏洞利用

前提条件

  • 存在反序列化提交的入口
  • 有被反序列化的类的魔术方法

一些绕过策略

绕过__wakeup函数

条件:

  1. php5至php5.6.25 之间的版本可以绕过
  2. php7到php7.0.10 直接的版本可以绕过

绕过方法:

反序列化字符串中表示属性数量的值大于大括号内实际属性的数量时 ,wakeup方法会被绕过

绕过正则匹配

参数有过滤,不让输入O:数字的形式,试图防止反序列化某个对象

O:数字 改为 O:+数字 就可以绕过上面的O:数字 过滤

绕过相等逻辑判断

eg $a->name=&$b

采用&符号,使得a的值与b的值恒相等

利用大S的ascll码绕过

大写S可以支持ascll值的字符,可以借助这个特性绕过一些被过滤的字符

O:8:"backdoor":1:{s:4:"name";s:10:"phpinfo();";}O:8:"backdoor":1:{S:4:"n\97me";s:10:"phpinfo();";}

反序列化字符逃逸

在一些关键词被替换后,描述中的字符数量是按照未替换之前的字符来计算,当替换后字符数量大于描述数量时,就可以逃逸出一些字符

高级反序列化

phar反序列化

什么是 PHAR 文件?

PHAR(PHP Archive)文件是一种将多个 PHP 文件、资源和其他数据打包成一个单一的归档文件的格式。它类似于 .tar.zip 文件,允许将整个 PHP 应用或库打包为一个文件,方便分发和部署。

特点
  • 自包含:PHAR 文件可以包含 PHP 脚本和其他资源(如图片、配置文件等),可以作为一个独立的文件运行。
  • 可执行:PHAR 文件可以像普通的 PHP 脚本一样执行,通过 php archive.phar 来运行。
  • 压缩支持:PHAR 文件支持压缩,可以通过 .tar, .gzip.bzip2 等格式进行压缩。

$phar->setmetadata($h);

metadata可以放一个类实例,生成phar后,会将这个类实例序列化字符串放到phar文件内,当使用phar协议加载phar文件时,会自动反序列化这个类的序列化字符串

include
file_get_contents
file_put_contents
.use.ini
等与文件相关的函数都可以包含phar协议,从而自动调用其魔术方法

phar协议哪里使用的多?

  • 存在文件上传点
  • 能找到file_exists()等文件读取函数,通过控制phar://头,就能解析phar包来自动进行反序列化

session反序列化

  • php的session是存放在文件中的 默认位置是/tmp/sess_PHPSESSID

  • session 是可以放字符串,数字,也可以放对象

    1. session里面存放对象时,会自动进行序列化,存放序列化后的字符串
    2. session里面拿取对象时,会自动进行反序列化,执行对象的魔术方法

u|O:4:“user”:2:{s:8:“username”;N;s:8:“password”;N;} 属于php处理器
以数组类型来存,属于php_serialize处理器
如果用php_serialize处理器来存,就可以在username中注入|,但是如果用php处理器来取时,就会把|右边的内容进行反序列化,反序列化之后就会调用恶意类的实例,在销毁时就会调用析构方法

相关文章:

php序列化与反序列化

文章目录 基础知识魔术方法&#xff1a;在序列化和反序列化过程中自动调用的方法什么是 __destruct() 方法&#xff1f;何时触发 __destruct() 方法&#xff1f;用途&#xff1a;语法示例&#xff1a; 反序列化漏洞利用前提条件一些绕过策略绕过__wakeup函数绕过正则匹配绕过相…...

视频级虚拟试衣技术在淘宝的产品化实践

作为一种新的商品表现形态&#xff0c;内容几乎存在于手淘用户动线全流程&#xff0c;例如信息流种草内容、搜索消费决策内容、详情页种草内容等。通过低成本、高时效的AIGC内容生成能力&#xff0c;能够从供给端缓解内容生产成本高的问题&#xff0c;通过源源不断的低成本供给…...

音视频-WAV格式

1. WAV格式说明&#xff1a; 2. 格式说明&#xff1a; chunkId&#xff1a;通常是 “RIFF” 四个字节&#xff0c;用于标识文件类型。&#xff08;wav文件格式表示&#xff09;chunkSize&#xff1a;表示整个文件除了chunkId和chunkSize这 8 个字节外的其余部分的大小。Forma…...

c++ std::array使用笔记

c array使用笔记 1. 构造2. 成员类型3. 元素访问4. 容量相关5. 填充与交换6. 比较操作7. 迭代器总结 array 是 C 标准库中的一个容器模板&#xff0c;它封装了一个固定长度的内建数组&#xff0c;并提供了类似于其他 STL 容器的接口。与内建数组相比&#xff0c; array 提供了…...

第39天:安全开发-JavaEE应用SpringBoot框架Actuator监控泄漏Swagger自动化

时间轴&#xff1a; Java知识点&#xff1a; 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;序列化数据&#xff0c;身份验证&#xff0c;框架开发&#xff0c;第三方组件使用等. 框架库&#xff1a;MyBatis&#xff0c;SpringMVC&#xff0c;SpringBoot&#xf…...

浏览器JS打不上断点,一点就跳到其他文件里。浏览器控制台 js打断点,指定的位置打不上断点,一打就跳到其他地方了。

关闭JavaScript 源代码映射&#xff0c;F12开发者模式 设置->偏好设置->源代码/来源->JavaScript 源代码映射。 肯定不是这个原因导致的&#xff0c;但这个办法可以暂时解决问题&#xff0c;点完这个东西就隐藏了webpack&#xff0c;有懂的来讲讲。 又浪费一个小时…...

conda环境管理 kernel注册到jupyter notebook

本文核心目的&#xff1a;解决jupyter notebook找不到自己想要的指定conda环境 首先安装anaconda&#xff0c;在win搜索框打开anaconda prompt 按下ctrlc终止操作的时间很长。需要输入y来确认操作。 国内镜像源不能使用代理服务访问。要尝试代理服务的打开与关闭 下面是cond…...

【SpringBoot】【log】 自定义logback日志配置

前言&#xff1a;默认情况下&#xff0c;SpringBoot内部使用logback作为系统日志实现的框架&#xff0c;将日志输出到控制台&#xff0c;不会写到日志文件。如果在application.properties或application.yml配置&#xff0c;这样只能配置简单的场景&#xff0c;保存路径、日志格…...

15.7 LangChain 版智能销售顾问实战:构建企业级知识驱动型对话系统

LangChain 版智能销售顾问实战:构建企业级知识驱动型对话系统 关键词:LangChain 销售系统、知识图谱集成、对话状态管理、生产级部署、多链协同优化 1. LangChain 销售系统架构设计 1.1 模块化架构全景图 #mermaid-svg-42MLuD3aMcpX0y8c {font-family:"trebuchet ms&q…...

计算机网络基础:揭开网络世界的神秘面纱

计算机网络基础&#xff1a;揭开网络世界的神秘面纱 前言一、计算机网络的定义与基本概念1.1 计算机网络的定义1.2 计算机网络的基本组成 二、计算机网络的分类2.1 按地域范围分类2.2 按拓扑结构分类 三、计算机网络体系结构3.1 OSI 参考模型3.2 TCP/IP 参考模型 四、网络通信协…...

工会考试知识点分享

工会考试涵盖工会基础知识、劳动法及相关法律法规、时政等内容&#xff0c;以下是一些常见的知识点分享&#xff1a; 工会基础知识 工会的性质与职能&#xff1a;工会是职工自愿结合的工人阶级的群众组织&#xff0c;基本职责是维护职工合法权益&#xff0c;同时还具有组织、…...

az devops login报错:Failed to authenticate using the supplied token.

PowerShell&#xff0c;az devops login报错&#xff1a; Failed to authenticate using the supplied token. 检查了一下PAT token是对的。 检查命令&#xff1a; az devops login --organization https://dev.azure.com/xxxxxxxx/ 乍一看好像没问题问题&#xff0c;然后想…...

Halcon图像预处理算子 sobel算子、傅里叶变换算子、卷积算子

滤波类型算子适用噪声特点均值滤波mean_image高斯噪声平滑均匀&#xff0c;可能额模糊边缘中值滤波median_image椒盐噪声保留边缘&#xff0c;抑制脉冲噪声高斯滤波gauss_filter高斯噪声加权平均&#xff0c;边缘更平滑 均值滤波 mean_image(Image,ImageMean,MaskWidth,MaskHe…...

Java Web应用中获取客户端的真实IP地址

Java Web应用中获取客户端的真实IP地址,尤其在存在代理服务器的情况下。 代码示例: public static String getClientIP(HttpServletRequest request) {String ip = parseCommaSeparatedIPs(request.getHeader("X-Forwarded-For"));if (isInvalid(ip)) {ip = pars…...

洛谷————P11559 【MX-X7-T0】[LSOT-3] 嗯欧哎

P11559 【MX-X7-T0】[LSOT-3] 嗯欧哎 题目背景 原题链接&#xff1a;MXOJ Next。 嗯欧哎是欧哎界的知名比赛。本题可以用来检验嗯欧哎是否发挥出了真实水平。 此名称纯属虚构&#xff0c;不影射任何现实中的比赛或机构的名称。如有雷同&#xff0c;纯属巧合。 题目描述 一…...

2020年SCI1区TOP:异质综合学习和动态多群体粒子群算法HCLDMS-PSO,深度解析+性能实测

目录 1.摘要2.改进策略3.结果展示4.参考文献5.代码获取 1.摘要 本文提出了一种异质综合学习和动态多群体粒子群算法&#xff08;HCLDMS-PSO&#xff09;&#xff0c;该算法在综合学习&#xff08;CL&#xff09;策略的基础上&#xff0c;通过利用整个种群的全局最优经验来生成…...

FinRobot:一个使用大型语言模型进行金融分析的开源AI代理平台

文章目录 前言一、生态系统1. 金融AI代理&#xff08;Financial AI Agents&#xff09;2. 金融大型语言模型&#xff08;Financial LLMs&#xff09;3. LLMOps4. 数据操作&#xff08;DataOps&#xff09;5. 多源LLM基础模型&#xff08;Multi-Source LLM Foundation Models&am…...

【windows driver】 开发环境简明安装教程

一、下载路径 https://learn.microsoft.com/en-us/windows-hardware/drivers/other-wdk-downloads 二、安装步骤&#xff1a; 1、安装Visual Studio IDE 笔者建议安装最新版本&#xff0c;可以向下兼容。发文截止到目前&#xff0c;VS2022是首选&#xff0c;当前笔者由于项…...

强制完整性级别(MIL)和用户账户控制(UAC)的联系与区别

强制完整性级别&#xff08;MIL&#xff09; 和 用户账户控制&#xff08;UAC&#xff09; 都是 Windows 操作系统中的安全机制&#xff0c;旨在增强系统的安全性并防止恶意软件和攻击者在系统中获得更高的权限。尽管它们有共同的目标&#xff0c;但它们的工作原理、应用范围和…...

性能附录:如何计算并发用户数(摘自高楼老师《性能30讲》)

高楼老师《性能30讲》: 性能测试实战30讲-极客时间 感兴趣的同学可以去读一下&#xff0c;个人感觉写的非常好 目录 什么是并发? 在线用户数、并发用户数怎么计算 总结 什么是并发? 我们假设上图中的这些小人是严格按照这个逻辑到达系统的&#xff0c;那显然&#xff0c;…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...