WEB渗透—PHP反序列化(二)

Web渗透—PHP反序列化        课程学习分享(课程非本人制作,仅提供学习分享)


靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场

课程地址:PHP反序列化漏洞学习_哔哩哔_bilibili


三、序列化基础知识

1.序列化的作用

序列化(Serialization)是将对象的状态信息(属性)转换可以存储或传输的形式的过程。

对象 —(序列化)—> 字符串

将对象或数组转化为可以存储/传输的字符串

2.序列化之后的表达方式/格式

所有格式第一位都是数据类型的英文字母简写(字符串中 s: 后跟的是字符串的长度)。

<?php
$a = null;                       //空字符
$b = 666;                        //整形
$c = 66.6;                       //浮点型
$d = true;                       //Boolean型
$e = false;
$f = 'benben';                   //字符串
echo serialize($a)."\n";
echo serialize($b)."\n";
echo serialize($c)."\n";
echo serialize($d)."\n";
echo serialize($e)."\n";
echo serialize($f);
?>输出结果:
N;                            -> 空字符
i:666;                        -> 整形
d:66.6;                       -> 浮点型
b:1;                          -> Boolean型
b:0;
s:6:"benben";                 -> 字符串

数组的序列化

<?php
$a = array('benben','dazhuang','laoliu');
echo $a[0]."\n";
echo serialize($a);
?>输出结果:
benben
a:3:{i:0;s:6:"benben";i:1;s:8:"dazhuang";i:2;s:6:"laoliu";}

array:3 参数数量:{i:0 编号;s:6:"benben";i:1;s:8:"dazhuang";i:2;s:6:"laoliu";}

3.对象序列化的详细讲解

不能序列话 '类' ,可以序列化 '对象'

<?php
class test{public $pub = 'benben';function jineng(){echo $this->pub;}
}
$a = new test();
echo serialize($a);         //只序列化成员变量,不序列化成员函数
?>输出结果:
O:4:"test":1:{s:3:"pub";s:6:"benben";}

Oobject:4类名长度:"test"类名:1变量数量:{s:3变量名字长度:"pub"变量名字;s:6值的长度:"benben"变量值;}

私有修饰符

private私有属性序列化是在变量前加%00类名%00

<?php
class test{private $pub='benben';function jineng(){echo $this->pub;}
}
$a = new test();
echo serialize($a);         //echo urlencode(serialize($a));(可使用url编码来反序列化)
?>                          //00隔开,’pub’是’test’的私有属性输出结果:
O:4:"test":1:{s:9:"testpub";s:6:"benben";}

O:4:"test":1:{s:9变量名字长度:"testpub"%00类名%00变量名(%00占一位);s:6:"benben";}

保护修饰符

protedted受保护属性序列化时在变量名前加%00*%00

<?php
class test{protected $pub='benben';function jineng(){echo $this->pub;}
}
$a = new test();
echo serialize($a);         //echo urlencode(serialize($a))(可使用url编码来对反序列化编码)
?>输出结果:
O:4:"test":1:{s:6:"*pub";s:6:"benben";}

O:4:"test":1:{s:6变量名字长度:"*pub"%00*%00变量名(%00和*都只占一位);s:6:"benben";}

成员属性调用对象(在对象里调用对象)

<?php
class test{var $pub='benben';function jineng(){echo $this->pub;}
}
class test2{var $ben;function __construct(){$this->ben=new test();}
}
$a = new test2();
echo serialize($a);
?>输出结果:
O:5:"test2":1:{s:3:"ben";O:4:"test":1:{s:3:"pub";s:6:"benben";}}
<?php
class test{var $pub='benben';function jineng(){echo $this->pub;}
}
class test2{var $ben;
}
$b = new test();
$a = new test2();
$a->ben = $b;
echo serialize($a);
?>输出结果:
O:5:"test2":1:{s:3:"ben";O:4:"test":1:{s:3:"pub";s:6:"benben";}}

实例化后的对象 $a 的成员变量 'ben' 调用实例化后的对象 $b


四、反序列化的特性

1)反序列化之后的内容为一个对象;

2)反序列化生成的对象里的值,由反序列化里的值提供;与原有类预定义的值无关;

3)反序列化不触发类的成员方法;需要调用方法后才能触发;

反序列化的作用

将序列化后的参数还原成实例化的对象。

对象  —(序列化)—>  字符串

对象  <—(反序列化)—  字符串

实例演示

<?php
class test {public  $a = 'benben';protected  $b = 666;private  $c = false;public function displayVar() {echo $this->a;}
}
$d = new test();                        //将test类实例化为对象$d
$d = serialize($d);                     //将$d序列化为字符串,并重新赋值给$d
echo $d."\n";                           //输出$d(已经进行了序列化)
echo urlencode($d)."\n";                //输出进行url编码后的$d
$a = urlencode($d);                     //将url编码后的$d赋值给$a
$b = unserialize(urldecode($a));        //将url解码并反序列化后的$a赋值给$b
var_dump($b);                           //查看$b内的值
?>输出结果:
O:4:"test":3:{s:1:"a";s:6:"benben";s:4:" * b";i:666;s:7:" test c";b:0;}
O%3A4%3A%22test%22%3A3%3A%7Bs%3A1%3A%22a%22%3Bs%3A6%3A%22benben%22%3Bs%3A4%3A%22%00%2A%00b%22%3Bi%3A666%3Bs%3A7%3A%22%00test%00c%22%3Bb%3A0%3B%7D
object(test)#1 (3) {["a"]=>string(6) "benben"["b":protected]=>int(666)["c":"test":private]=>bool(false)
}

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

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

相关文章

配电房电力智能运维系统

配电房电力智能运维系统是一种采用先进的信息技术手段&#xff0c;对配电房的电力设备进行实时监控、数据分析和管理的系统。它能够提高电力设备的安全性和效率&#xff0c;降低运维成本&#xff0c;为用户提供更加优质、高效的电力服务。 该系统依托智能运维工具-电易云&#…

PCL点云处理之反算两块点云的放缩比例 (二百二十三)

PCL点云处理之反算两块点云的放缩比例 (二百二十三) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 在 PCL点云处理之等比例放大与缩小点云尺寸(七十二)一章中,介绍了如何等比例放大缩小一块点云,这里介绍如何反算得到两片经过放缩的点云之间的比例,这种计算方法应…

关系型数据库和非关系型数据库有什么区别?

一、什么是数据库&#xff1f; 数据库是一个结构化的数据集合&#xff0c;用于存储、管理和组织数据。它是一个电子化的文件柜&#xff0c;可以存储大量的数据&#xff0c;并提供了一种高效地检索、更新和管理数据的方法。数据库可以用于存储各种类型的数据&#xff0c;例如文…

【排序算法】之归并排序

归并思想 先拆分后合并 也就是分治&#xff1b; 拆分合并思想具体讲解可以参考以下链接&#xff1a; b站链接&#xff1a; 点这里&#xff1a;b站归并思想具体讲解 看代码 代码中的例子参考上图和下图 public class MergeSort {//一、拆分部分public static void split(i…

springcloud getway 网关之过滤器filter

1. Filter的使用 filter是Gateway的三大核心之一&#xff0c;路由过滤器可用于修改进入HTTP请求和返回的HTTP响应&#xff0c;路由过滤器只能指定路由进行使用。Gateway内置了多种路由过滤器&#xff0c;他们都由GatewayFilter工程 2. Filter的作用 当我们有很多个服务时&am…

【机器学习 | 假设检验系列】假设检验系列—卡方检验(详细案例,数学公式原理推导),最常被忽视得假设检验确定不来看看?

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

2024 年,新程序员如何与AI共赢!!

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

如何在Facebook Business Manager进行企业认证

Facebook Business Manager&#xff0c;简称BM&#xff0c;按照字面意思理解就是Facebook官方的商务管理平台&#xff0c;是供广告主团队去使用的一个管理工具。BM可以绑定Facebook公共主页、广告账户等一系列Facebook账号。通过BM&#xff0c;企业就可以在一个后台&#xff0c…

Amazon SageMaker: 拓展机器学习边界,塑造未来创新趋势

授权说明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 近期在 re:Invent 2023 大会上&#xff0c;亚马逊云科技发布了一…

Stable Diffusion 源码解析(1)

参考1&#xff1a;https://blog.csdn.net/Eric_1993/article/details/129393890 参考2&#xff1a;https://zhuanlan.zhihu.com/p/613337342 1.StableDiffusion基本原理1.1 UNetModel、FrozenCLIP 模型1.2 DDPM、DDIM、PLMS算法 2. Runwayml SD 源码2.1 Img2Img Pipeline2.2 DD…

蚁群优化算法ACO

蚁群优化算法模拟了自然界中蚂蚁的觅食行为&#xff0c;信息素浓度的大小表征路径的远近&#xff0c;信息素浓度越高&#xff0c;表示对应的路径距离越短。同时&#xff0c;路径上的信息素浓度会随着时间的推进而逐渐衰减。 1.过程 &#xff08;1&#xff09;初始化参数 蚁群…

Nginx+Tomcat实现负载均衡和动静分离

目录 前瞻 动静分离和负载均衡原理 实现方法 实验&#xff08;七层代理&#xff09; 部署Nginx负载均衡服务器(192.168.75.50:80) 部署第一台Tomcat应用服务器&#xff08;192.168.75.60:8080&#xff09; 多实例部署第二台Tomcat应用服务器&#xff08;192.168.75.70:80…

8080端口被占用怎么解决,并结束释放8080端口

8080端口是被用于WWW代理服务的&#xff0c;可以实现网页浏览&#xff0c;经常在访问某个网站或使用代理服务器的时候&#xff0c;Win10 8080端口被占用解决方法吧。 1、按【 Win r】 2、运行窗口&#xff0c;输入【cmd】命令&#xff0c;按【确定或回车】&#xff0c;打开命…

基于SpringBoot 校园招聘系统设计与实现(源码+文档+可视化HTML+数据库)

摘 要 基于SpringBoot 校园招聘系统是一种基于Java技术的校园招聘和可视化展示的系统。该系统通过采集和整合各类招聘网站、社交媒体等渠道的数据&#xff0c;对招聘岗位进行深入分析&#xff0c;并将分析结果以直观、易懂的可视化形式呈现。系统能够自动从多个数据源获取招聘…

google-guava工具包常用工具类详解(持续更新)

文章目录 一、google-guava工具包简介1、概述2、引包 二、常用工具类1、LoadingCache 缓存2、RateLimiter限流器3、EventBus事件总线&#xff08;1&#xff09;基本使用&#xff08;2&#xff09;多消费者&#xff08;3&#xff09;DeadEvent&#xff08;4&#xff09;AsyncEve…

电子学会C/C++编程等级考试2023年03月(五级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:拼点游戏 C和S两位同学一起玩拼点游戏。有一堆白色卡牌和一堆蓝色卡牌,每张卡牌上写了一个整数点数。C随机抽取n张白色卡牌,S随机抽取n张蓝色卡牌,他们进行n回合拼点,每次两人各出一张卡牌,点数大者获得三颗巧克力,小者获…

Flutter:web项目跨域问题解决

前后端解决系列 文章目录 一、Flutter web客户端解决本地环境调试跨域问题二、Flutter web客户端解决线上环境跨域问题 一、Flutter web客户端解决本地环境调试跨域问题 就一句命令【--web-browser-flag "--disable-web-security"】&#xff0c;用来屏蔽浏览器域名请…

大模型时代-让AI自己开发自己

一、前言 AI能自己开发自己或者开发和一个很像自己的东西吗&#xff1f;显然是可以的&#xff01;因为AI模型的算法&#xff0c;基本就是学习和递归 二、大模型的算法实现例子 本例子就是通过AI模型来写 大模型的实现通常涉及到深度学习框架和大量的计算资源。具体的算法代…

AI元素深化人类发展之路:挑战与趋势

AI元素深化人类发展之路&#xff1a;挑战与趋势 前言&#xff1a;1.AI元素推动人类发展的方面&#xff1a;2.AI元素引发的挑战与焦虑&#xff1a;3.人类与AI的未来趋势&#xff1a; 前言&#xff1a; 随着AI技术的迅猛发展&#xff0c;人工智能的各种元素逐渐融入我们的生活&a…

elasticsearch和springboot对应版本

网上找了半天没找到&#xff0c;最后还是得上官网找 https://docs.spring.io/spring-data/elasticsearch/reference/elasticsearch/versions.html Spring Data Release TrainSpring Data ElasticsearchElasticsearchSpring FrameworkSpring Boot 2023.1 (Vaughan) 5.2.x 8.…