php反序列化入门

news2024/11/15 1:57:03

一,php面向对象。

1.面向对象:

以“对象”伪中心的编程思想,把要解决的问题分解成对象,简单理解为套用模版,注重结果。

2.面向过程:

以“整体事件”为中心的编程思想,把解决问题的步骤分析出来,用函数依次实现,注重过程。

3.类:

将数据和数据上的操作封装在一起

内部构成:成员变量(属性)+成员函数(方法)

注:属性在外部是不可以直接看到的,但是可以访问。

(1)创建一个类

其中var的作用是声明变量

$this为预定义

(2)new

new的作用是讲之前定义的类实体化,类里先定义了,才能在后面赋值  

注意,之前的声明变量并不会执行出任何内容,包括上面的echo,因为上面定义的变量里面没有任何内容。只有将类实例化成对象,并给参数赋值,再打印输出,才会有值输出。

4.类的修饰符

分为三类。用了修饰符以后,可调用范围会改变,详情如下,可省略,默认为是public

 私有属性(privade)只有父类可以用

5.继承:

继承性是子类自动共享父类数据和方法的机制,如上hero2对父类hero的继承可以表达出身高

二.序列化基础知识

1.什么是序列化?

序列化是将对象或数组转化为方便存储、传输的字符串,php使用serialize()函数将对象序列化; 序列化只作用于对象的成员属性,不序列化成员方法

2.反序列化值

各类型值的serialize序列化:

空字符                null                ->                                        N;               空

整型                   123                ->                                        i:123;           int

浮点型                1.5                ->                                        d:1.5;           double

boolean型          true                ->                                        b:1;

boolean型          false              ->                                        b:0;

字符串               “haha”            ->                                        s:4:"haha";      string型6个单位长
 

 3.数组,对应规则如下。

        

4.对象序列化

只作用于对象的成员属性(变量),不序列化成员方法(函数),

 在如下代码比较中,我们可以看得到,对象pub的内容benben被输出,但是方法(函数)却没有任何改变。

5.私有属性的序列化

会在变量前加上%00(占一个位)+类名+%00,这里的%00不是空格,而是null空。        

 在下面的示例中,在原变量名pub之前加上了类名test,表面上看只有7个字符,但是实际加上了两个%00,就使得长度变为了9

假若你将内容用url编码输出,你就可以看到他的真实样子,在test前后都有%00

6.保护属性的序列化

会在变量名前加上%00*%00

7.成员属性调用对象过程及序列化(pop链序列化)

对象的成员属性是另一个对象,序列化值出现嵌套。

三,反序列化

1.反序列化后的内容是一个对象。

如下代码展示序列化

整个过程是:对象通过序列化变为字符串,而反序列化让字符串变为对象。

2.反序列化生成的对象的值,与原来的类的预定义无关,而是由反序列化的值提供。

在上面的示例中,$c输出的值没有按序列化的值(xxxxxx)输出,而是以反序列化的值hellow提供,因此,在输出的$c中,$c的值为hellow。

3.反序列化不能触发类里的成员方法,如果想用,需要调用(除魔术方法外)。

      在下面的示例中,我们调用了之前的成员方法,使得$c的输出  输出username的内容,但是在反序列化之后,username的内容改变了(上一条的原因)因此,最后输出的内容就是hellow

 

附:为什么会有反序列化漏洞?

因为在反序列化过程中unserialize()的值可控,通过更改这个值,得到需要的代码

8.反序列化漏洞的利用

eg1:

三.魔术方法

四.pop链的构造思路知识——构造代码写poc代码

五.反序列化逃逸

六.session反序列化漏洞

七.phar反序列化

[SWPUCTF 2021 新生赛]ez_unserialize

1.打开题目,只有一张动图,源码里也没有什么

2.用御剑扫一下,依次访问,在robot.txt中找到一个c145s.php

3.再次访问,出现真正的题目,是一串代码,意思是满足admin=admin&passwd=ctf,触发__destruct()函数,就可以得到flag

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

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

相关文章

美洽工作台3.0,全新发布!

美洽工作台3.0,全新发布 想要效率翻倍,就要一步到位! 工作台 3.0,为效率而生 1. 更丰富的外观选择,让界面焕然一新,新增导航主题色选择,深色 Dark、浅色 Light 随意切换 2. 自定义你的专属导…

基于STM32的位置速度环PID控制伺服电机转动位置及程序说明

PID控制原理 PID控制原理是一种广泛应用于工业自动化和其他领域的控制算法。PID控制器的名字来源于其三个主要组成部分:比例(Proportional)、积分(Integral)和微分(Derivative)。PID控制器实现…

C++数组实现推箱子游戏

前言 我是三天打鱼两天晒网的闲人,今天跟着课程视频学习c的数组的运用. 准备好游戏用到的图片资源 代码逻辑实现 #include<iostream> #include<graphics.h> #include<string> #include<conio.h>using namespace std;//设置画布大小 #define SCREEN…

【人工智能】第六部分:ChatGPT的进一步发展和研究方向

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

C++ | Leetcode C++题解之第120题三角形最小路径和

题目&#xff1a; 题解&#xff1a; class Solution { public:int minimumTotal(vector<vector<int>>& triangle) {int n triangle.size();vector<int> f(n);f[0] triangle[0][0];for (int i 1; i < n; i) {f[i] f[i - 1] triangle[i][i];for (…

Jmeter的几种参数化方式

1.为什么要做参数化&#xff1f; 在用jmeter脚本进行压测的时候&#xff0c;为了更真实的模拟起到更好的效果&#xff0c;我们需要让参数动态变化起来&#xff0c;也就是参数化。通过参数化我们也可以更好、更灵活的维护我们的测试脚本。 2.参数化的方式 能够实现参数化的方式有…

6月4(信息差)

&#x1f30d;AI预测极端天气提速5000倍&#xff01;微软发布Aurora&#xff0c;借AI之眼预测全球风暴 &#x1f384;理解老司机&#xff0c;超越老司机&#xff01;LeapAD&#xff1a;具身智能加持下的双过程自驾系统&#xff08;上海AI Lab等&#xff09; 论文题目&#xf…

对boot项目拆分成cloud项目的笔记

引言&#xff1a;这里我用的是新版本的技术栈 spring-boot-starter-parent >3.2.5 mybatis-spring-boot-starter >3.0.3 mybatis-plus-boot-starter >3.5.5 spring-cloud-dependencies …

JMeter Plugins Manager---插件安装

参考文章&#xff1a;https://blog.51cto.com/u_14126/6291032 需求&#xff1a; 安装【jpgc - Standard Set】插件 常用插件&#xff1a; 点击下载–报错如下&#xff1a; Failed to apply changes:Cannotapplychanges:Haveno write accessforJMeterdirectories,notpossib…

iTerm2 携手 OpenAI,带来命令行的自然语言革新

在技术不断进步的今天&#xff0c;命令行工具的智能化已成为提升效率的关键。iTerm2&#xff0c;macOS 系统上广受欢迎的开源终端工具&#xff0c;通过最新版本 v3.5 的发布&#xff0c;实现了与 OpenAI 的集成&#xff0c;引领了这一变革。 iTerm2 简介 iTerm2 是一款功能强…

宝塔部署vue+springboot过程(图文)

宝塔是傻瓜式操作部署&#xff0c;xshell是用linux命令部署 &#xffe5;过程&#xffe5; 整个流程具体服务器开端口在阿里云服务器打开3306端口&#xff08;有用到的端口都要打开&#xff09;宝塔&#xff1a;添加数据库获取数据库名、用户名、密码&#xff1b;点击“工具”…

容器化部署Pig微服务快速开发框架

系统说明 基于 Spring Cloud 、Spring Boot、 OAuth2 的 RBAC 企业快速开发平台&#xff0c; 同时支持微服务架构和单体架构 提供对 Spring Authorization Server 生产级实践&#xff0c;支持多种安全授权模式 提供对常见容器化方案支持 Kubernetes、Rancher2 、Kubesphere、E…

iotdb时序库在火电设备锅炉场景下的实践【原创文字,IoTDB社区可进行使用与传播】

一.概述 1.1 说明 本文章主要介绍iotdb数据库在电站锅炉工业场景下&#xff0c;对辅助智能分析与预警的使用介绍。 【原创文字&#xff0c;IoTDB社区可进行使用与传播】 1.2 项目背景 随着人工智能算法在电力领域的发展&#xff0c;以及燃煤锅炉设备精细化调整需求的增加&…

君方船舶智能设计平台技术架构

1.整体架构 2.基础能力 2.1 测试工具 2.1.1 测试框架 2.1.2 调试工具 2.2 UI交互 2.2.1 通用属性面板 2.2.2 对象通用拷贝框架 2.2.3 命令交互操作框架 2.2.4 夹点编辑框架 2.2.5 对象捕捉 2.3 模型管理 2.3.1 对象数据管理 2.3.2 对象空间关系管理 2.3.3 对象依赖关系管理…

发现情绪背后的真实心理需求,选择适合你的情绪调节方式

一、教程描述 心态对人的生活质量以及身体健康等多方面&#xff0c;都会产生非常重要的影响&#xff0c;受到不良情绪的影响&#xff0c;人的心态也会发生一定的变化。对于处于不良情绪状态的人来讲&#xff0c;应该重视学会调整自己的情绪。在心理学上&#xff0c;人的每种情…

AR和AP重分类(Regroup)[FAGLF101/OBBU/OBBV]

一、为什么AR和AP科目需要重分类 1.1 执行操作的前提(重要) 存在AR的当月总余额在贷方&#xff08;客户贷项凭证、预收账款等&#xff09;或AP的当月总余额在借方&#xff08;供应商贷项凭证、预收账款等&#xff09;&#xff0c;这种情况下无法真实的反映出资产和负债情况&…

Window10磁盘的分盘和合并

注意&#xff1a; 当我们c盘不够大需要扩大磁盘空间时&#xff0c;当c盘后面没有未划分的磁盘时候&#xff0c;我们是无法进行扩充c盘的&#xff0c;此时&#xff0c;我们可以先删除后面一个磁盘&#xff0c;再进行扩大。 如下&#xff1a;c盘后没有未分配的空间&#xff0c;…

MySQL—多表查询—多表关系介绍

一、引言 提到查询&#xff0c;我们想到之前学习的单表查询&#xff08;DQL语句&#xff09;。而这一章节部分的博客我们将要去学习和了解多表查询。 对于多表查询&#xff0c;主要从以下7个方面进行学习。 &#xff08;1&#xff09;第一部分&#xff1a;介绍 1、多表关系 2、…

SpringBoot之静态资源

默认静态资源路径 classpath:/META-INF/resources/classpath:/resources/classpath:/static/classpath:/public/ 静态资源路径下的文件&#xff0c;可以通过根目录访问 resources 文件夹的文件如下图所示&#xff1a; 启动项目&#xff0c;分别访问以下路径&#xff1a; ht…

关于URL获取的参数,无法执行二选一查询

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…