当前位置:实例文章 » PHP实例» [文章](37)【PHP反序列化】PHP反序列化原理、函数、利用过程;

(37)【PHP反序列化】PHP反序列化原理、函数、利用过程;

发布人:shili8 发布时间:2022-12-11 22:34 阅读次数:42

目录

一、简介:

二、原理:

2.1、函数:

2.1.1、serialize()序列化

2.1.2、unserialize()反序列化

三、常见的序列化格式:

四、产生的原因:

4.1、无类:

4.2、有类:

五、魔术方法(触发):

六、利用:

6.1、分析

6.2、构造序列化

6.3、输入执行


(智者千虑,必有一失)


一、简介:

序列化就是将数据转化成一种可逆的字符串,字符串还原原来结构的过程叫做反序列化

序列化后,方便保存和传输(保留成员变量,不保留函数方法)

数据(对象)--------序列化---------->字符串-----------反序列化-------->数据(对象)

二、原理:

2.1、函数:

2.1.1、serialize()序列化

将一个对象转换成可以传输的一个字符串

序列化对象后,可以方便的将它传递到其他需要它的地方,且其类型和结构不会改变

eg:

class S{

public $test="pikachu";

}

$s=new S(); //创建一个对象

serialize($s); //把这个对象进行序列化

2.1.2、unserialize()反序列化

将序列化后的字符串还原成一个对象,或数组(即进行反序列化),并返回原始的对象结构

并在后面的代码中继续使用,加密后的字符串如下所示

对字符串代码进行分析:

$u=unserialize("O:1:"S":1:{s:4:"test";s:7:"pikachu";}");

echo $u->test; //得到的结果为pikachu

O:1:"S":1:{s:4:"test";s:7:"pikachu";} //这是序列化结果

O:代表object 1:代表对象名字长度为一个字符 S:对象名称 1:代表对象里面有一个变量 s:数据类型 4:变量名长度 test:变量名称 s:数据类型 7:变量值的长度 pikachu:变量值


三、常见的序列化格式:

二进制格式

字节数组

json字符串

xml字符串

……

布尔型(bool):b

整数型(int):i

字符串型(str):s

数组型(array):a

对象型(object):O

NULL型:N


四、产生的原因:

对用户的输入检测不严

4.1、无类:

当未检测出攻击者输入的序列化字符串中包含的恶意执行语句

攻击者从而达到控制反序列化过程,进而进行恶意代码的执行(好比SQL注入,目录遍历等操作)

4.2、有类:

当进行反序列化的时候就有可能会触发对象中的一些魔术方法


五、魔术方法(触发):

(前提:有可利用的类)

__construct() //创建对象时触发

__destruct() //对象销毁时触发

__call() //在对象中调用不可访问的方法时触发

__callStatic() //在静态中调用不可访问的方法时触发

__get() //用于从不可访问的属性读取数据

__set() //用于将数据写入不可访问的属性

__isset() //在不可访问的属性上调用isset()或empty()触发

__unset() //在不可访问的属性上使用unset()时触发

__invoke() //当脚本尝试将对象调用为函数时触发

__wakeup() //执行unserialize()时,先会调用这个函数

__sleep() //执行serialize()时,先会调用这个函数


六、利用:

6.1、分析

因为这是反序列化API

所以要先把包含执行语句的php序列化

6.2、构造序列化

编写包含恶意语句的php

下面是一个弹窗

-------------------------------------------

< php

class S{
var $test = "<script>alert('xss')</script>";
}

$a = new S();
echo serialize($a);
>

------------------------------------------

构造出来是:

O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

并将其进行序列化(网上的在线工具都可)

6.3、输入执行

将序列化后的复制到输入框提交

会产生弹窗

相关标签:

免责声明

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱290110527@qq.com删除。

其他信息

其他资源

Top