我是靠谱客的博主 过时大门,最近开发中收集的这篇文章主要介绍(37)【PHP反序列化】PHP反序列化原理、函数、利用过程一、简介:二、原理:三、常见的序列化格式:四、产生的原因:五、魔术方法(触发):六、利用:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一、简介:

二、原理:

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、输入执行

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

会产生弹窗

最后

以上就是过时大门为你收集整理的(37)【PHP反序列化】PHP反序列化原理、函数、利用过程一、简介:二、原理:三、常见的序列化格式:四、产生的原因:五、魔术方法(触发):六、利用:的全部内容,希望文章能够帮你解决(37)【PHP反序列化】PHP反序列化原理、函数、利用过程一、简介:二、原理:三、常见的序列化格式:四、产生的原因:五、魔术方法(触发):六、利用:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部