反序列化基础学习

发布时间:2026/10/7 20:47:37

反序列化基础学习 PHP(1)php变量PHP中变量用来存储数据比如文件路径、文件名、接收参数等变量必须以开头比如开头比如开头比如name、uplaoddir、uplaod_dir、uplaodd​ir、file_name、$file_path等且变量名区分大小写变量可直接赋值不需要声明类型如$upload_dir./uploads/;//字符串类型$age20//数字类型其中若要声明全局变量则设为global $upload_dir即可若要声明不删除的局部变量静态变量则设为static $upload_dir即可(2)php echo/printecho - 可以输出一个或多个字符串print - 只允许输出一个字符串返回值总为 1(3)php字符串拼接php与python不同点之一在于其具有拼接功能拼接两个字符串仅需要使用.即可也是文件上传漏洞的核心语法核心案例如下:$upload_dir./uploads/;$file_nametest.php;$file_path$upload_dir.$filen_ame(4)php超级全局变量php官方内置全局变量可以在任何域内使用所有超全局变量均是大写的数组形式专门接收用户从浏览器传递给服务器的数据是后端接收前端参数的核心方式也是Web漏洞数据入口。$_FILES文件上传专属超全局变量专门用来接收用户上传文件的所有信息的变量核心语法$_FILES[表单名称][属性名]常用$_FILES[file][name]:获取用户上传文件的原始文件名,攻击方常改$_FILES[file][tmp_name]:获取用户上传文件在服务器的临时文件名临时文件路径攻击方没法改$_GET专门接收用户通过get请求传递的所有数据数据来源于浏览器url中例如访问http://www.xxx.com/index.php?useradminpwd123$user$_GET[user];//接收的值为admin$pwd$_GET[pwd];//接受的值为123$_POST专门接收用户通过POST请求传递的所有数据数据藏在请求体中URL中不可见核心语法$_POST[参数值]后端会接收参数所有敏感数据、文件、表单信息等都是通过post传参(5)php类型比较松散比较使用两个等号 比较只比较值不比较类型。严格比较用三个等号 比较除了比较值也比较类型。?phpif(4242){echo1、值相等;}echoPHP_EOL;// 换行符if(4242){echo2、类型相等;}else{echo3、类型不相等;}?输出1、值相等 3、类型不相等(6)php运算符运算符名称功能示例x y加x 和 y 的和2 2x - y减x 和 y 的差5 - 2x * y乘x 和 y 的积5 * 2x / y除x 和 y 的商15 / 5x % y模除法的余数x 除以 y 的余数5 % 2 10 % 8 10 % 2-x设置负数取 x 的相反符号?php $x 2; echo -$x; ?~x取反x 取反按二进制位进行取反运算。运算规则~1-2; ~0-1;?php $x 2; echo ~$x; ?a . b并置连接两个字符串“Hi” . “Ha”x xor y异或如果 x 和 y 有且仅有一个为 true则返回 truex6y3(x6 xor y3) 返回 false(7)php if-else if-else与switch语句?phpif(条件){if条件成立时执行的代码;}elseif(条件){elseif条件成立时执行的代码;}else{条件不成立时执行的代码;}??phpswitch(expression){casevalue1:// 代码块1break;casevalue2:// 代码块2break;// 更多的 case 语句default:// 如果没有匹配的值}?(8)php数组在 PHP 中array() 函数用于创建数组array();在 PHP 中有三种类型的数组数值数组- 带有数字 ID 键的数组关联数组- 带有指定的键的数组每个键关联一个值多维数组- 包含一个或多个数组的数组1)PHP 数值数组自动分配 ID 键ID 键总是从 0 开始$carsarray(Volvo,BMW,Toyota);人工分配 ID 键$cars[0]Volvo;$cars[1]BMW;$cars[2]Toyota;获取数组的长度 - count() 函数count() 函数用于返回数组的长度元素的数量count($cars);2)PHP 关联数组关联数组是使用您分配给数组的指定的键的数组。有两种创建关联数组的方法$agearray(Peter35,Ben37,Joe43);or:$age[Peter]35;$age[Ben]37;$age[Joe]43;3)php多维数组array(array(elements...),array(elements...),...)三维数组array(array(array(elements...),array(elements...),...),array(array(elements...),array(elements...),...),...)(9)php面向对象(同C)类− 定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。对象− 是类的实例。成员变量− 定义在类内部的变量。该变量的值对外是不可见的但是可以通过成员函数访问在类被实例化为对象后该变量即可成为对象的属性。成员函数− 定义在类的内部可用于访问对象的数据。类定义?phpclassphpClass{var$var1;var$var2constant string;functionfunc1($arg1,$arg2){[..]}functionfunc2($arg1,$arg2){[..]}functionfunc3($arg1,$arg2){[..]}[..]}?类使用class关键字后加上类名定义。类名后的一对大括号({})内可以定义变量和方法。类的变量使用var来声明, 变量也可以初始化值。函数定义类似 PHP 函数的定义但函数只能通过该类及其实例化的对象访问。对象定义$anewSite;$bnewSite;$cnewSite;调用成员方法在实例化对象后我们可以使用该对象调用成员方法该对象的成员方法只能操作该对象的成员变量$a-func1();$b-func2();$c-func3();php反序列化将php序列化后的数据恢复为内存中原始对象的过程(1)基本函数serialize()函数就是典型的序列化函数专门用于将php对象转换成一串结构化的、可传输的纯字符串的过程serialize($obj);unserialize就是典型的反序列化函数将序列化生产的字符串还原为序列化之前的完整php对象unserialize($str);(2)序列化后字符串解析序列化字符串由类型标识长度内容组成⚪表示这是对一个对象的序列化结果分隔符用于分隔标识、长度、内容数字标识后续内容长度“字符串”标识类名、属性名、属性值{}包裹对象的所有属性键值对o:4:Show:1;{s:3:cmd;s:3:calc;}O:4:Show标识这是个对象长度为4类名为Show:1表示该方法包含1个属性{}内s:3:cmd该属性的键名是字符串类型长度为3键名为cmds:4:calc该属性的键名是字符串类型长度为4键名为calc(3)漏洞触发要素(1反序列化参数完全可控且无校验服务器端的unserialize函数的参数是由前端用户传递的且开发者没有对传入序列化字符串进行任何校验不校验字符串来源、不校验序列化字符串对应类名是否合法、不校验序列化字符串的内容是否被篡改(2目标类中存在可自动触发的魔术方法目标服务器代码中被反序列化类中定义了__wakeup、__destruct等魔术方法反序列化操作化自动触发这些魔术方法无需手动调用开发者无法感知该过程(3魔术方法调用高危函数魔术方法的函数体内部调用了system、eval、exec等可以直接执行系统命令或php代码的高危函数、且危险函数的参数是类的可控属性。魔术方法名触发条件漏洞利用场景__wakeup当PHP执⾏unserialize函数对⼀个序列化字符串进⾏反序列化操作时⽴刻⾃动触发该⽅法。反序列化漏洞最主要的触发点常⽤于恢复数据库连接、重新初始化对象若此处调⽤危险函数则直接漏洞__destruct当⼀个PHP对象的⽣命周期结束时⾃动触发该⽅法。反序列化漏洞的第⼆核⼼触发点优先级甚⾄⾼于wakeup即使__wakeup被过滤脚本执⾏结束时仍会触发该⽅法隐蔽性极强是代码审计的重点。__construct当使⽤new关键字实例化⼀个对象时⾃动触发该⽅法。构造⽅法⽤于对象的初始化若初始化逻辑中包含危险函数攻击者可通过实例化对象触发漏洞注意反序列化操作不会触发该⽅法。(4)漏洞利用攻击者通过抓包⼯具将数据包请求体中原有的合法序列化字符串替换为⾃⼰构造的恶意载荷发送请求到服务器服务器接收到请求后读取参数中的恶意字符串执unserialize反序列化反序列化的瞬间⾃动触发Show类中的魔术⽅法魔术⽅法执⾏内部的system函数将攻击者传⼊的恶意命令作为参数执⾏最终服务器执⾏了攻击者的命令攻击者实现对服务器的远程控制
延伸阅读

更多相关文章

2026/10/7 3:18:57

DeepSeek Harness:AI编程助手从聊天到工程化的11个核心技能实战

如果你最近在关注 AI 编程助手,可能会发现一个现象:很多工具号称能帮你写代码,但实际用起来,要么是简单的代码补全,要么是“一问一答”式的聊天,离真正的“工程化”协作还有很大距离。你需要的不是一个只会…

2026/10/7 13:33:44

基于ESP32与Wi-Fi的实时语音通信系统:从I2S音频采集到UDP网络传输

1. 项目概述:用ESP32打造你的数字对讲机几年前,我在一个大型仓库改造项目中,需要为分散在不同区域的施工小组提供临时、可靠的短距离通信工具。传统的模拟对讲机要么信号穿透力不够,要么成本太高。当时我就想,能不能用…

2026/10/7 20:49:11

收藏必备!大模型学习路线图:小白也能轻松入门进阶

本文详细介绍了大模型学习的完整路线图,从基础准备、AI基础、Transformer与大模型原理,到应用开发、智能体(Agent)和工程实践,帮助读者逐步建立大模型知识体系。强调学习顺序的重要性,理解技术存在的原因和…

2026/10/8 4:28:02

基于C#与MySQL的艾宾浩斯记忆曲线背单词软件设计

简介:这是一款基于C#与MySQL开发、采用艾宾浩斯记忆曲线算法的WinForm背单词应用,适合计算机相关专业学生完成课程设计或毕业设计参考。应用将词典、题库与记忆单词功能整合,按遗忘规律动态安排复习计划,帮助用户科学高效地扩充词…

2026/10/8 4:28:02

从Prompt到Skill:打造可复用的AI编程技能框架

过去一年我一直在折腾 AI 编程,从给大模型写一段 Prompt 让它帮忙补全代码,到把整套代码审查流程封装成 Skill 让 Agent 自动跑。我最大的感受是:Prompt 解决的是“单次对话”问题,Skill 解决的是“可复用能力”问题。这篇东西把我…

2026/10/8 4:28:02

32GB显卡LoRA微调显存估算与实战避坑指南

1. 先算清楚账:LoRA微调的显存到底花在哪几项先聊一个很多刚上手的人容易产生的错觉:LoRA只训练一小部分参数,所以显存占用应该比全参微调小很多——这个判断方向是对的,但幅度往往被严重低估。实际跑起来之后,很多人发…

2026/10/8 4:28:02

VSC HVDC柔性直流输电建模仿真与系统运行优化全解析

前阵子帮一个做新能源配套的团队看仿真模型,对方拿来的VSC HVDC算例老是直流侧电压振荡,一查居然是MMC子模块电容参数按经验填的,完全没有按能量损耗比去校核。这种问题在柔性直流输电项目里太常见了——大家知道VSC HVDC好,知道它…

2026/10/8 4:28:02

N5181A射频信号发生器深度评测:从锁相环原理到EMC测试实战

1. 为什么N5181A能撑起“射频性能标杆”这两个字做射频测试这些年,我手里过的信号发生器不算少,从百元级DDS小板子到几十万的台式射频源都摸过。说实话,大多数时候我们不需要多顶级的仪表,一个能出正弦波、能调幅度、能扫频的盒子…

2026/10/8 4:23:02

JavaWeb图书馆系统:Servlet+JDBC实战项目源码解析

简介:本资源是一套完整的基于JavaWeb技术开发的图书馆管理系统项目源码,面向Java初学者、Web开发入门者及高校课程设计学生,解决图书借阅、用户管理、数据持久化等典型Web应用开发问题。压缩包共199个文件,含64个Java业务逻辑类、…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/7 8:18:33

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/6 17:46:51

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 0:02:17

自然数立方等于连续奇数之和:从证明到编程验证

十几年来我一直游走在数学科普和编程教学这两块内容之间,对“看起来像魔法、拆开全是数学”的结论总是格外敏感。最近翻资料时又撞见一句话:任何一个自然数 m 的立方,都可以写成 m 个连续奇数之和。2 的立方等于 3 加 5,3 的立方等…

2026/10/8 0:02:17

C#上位机SSH连接实战:用SSH.NET补齐超时、批量与密钥认证

简介:这是一份基于 C# 开发的 SSH 连接功能半成品工程,原本作为另一个主项目的子功能模块,现独立打包分享。工程采用 WinForms 界面,包含源码、解决方案、安装部署工程、NuGet 依赖包及说明文档,适合正在做远程连接、网…

2026/10/8 0:02:17

Java SpringBoot一体化智能售后系统设计与实现全解析

毕业设计年年做,Java Web 方向的题目翻来覆去就那么几个,但“一体化智能售后系统”这个题,每次看到我都觉得值得认真聊一聊。它不是一个简单 curd 堆出来的管理系统,而是把客户、工单、派单、处理、回访、统计整条链路串起来的一套…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑