php新手入门

首页 > 教育培训 > 作者:YD1662023-06-20 17:21:21

序列化

搞懂反序列化漏洞的前提,先搞懂什么是序列化:

序列化说通俗点就是把一个对象变成可以传输的字符串。

序列化实际是为了传输的方便,以整个对象为单位进行传输, 而序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。如果了解底层的同学可以知道,类中的方法本就不在类中。

而在php中,使用函数serialize()来返回一个包含字节流的字符串来表示

比如:

class S{

public $test="sd";

}

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

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

序列化的结果是:

O:1:"S":1:{s:4:"test";s:2:"sd";}

代表的含义依次是:

顺便说一下PHP 对不同类型的数据用不同的字母进行标示

反序列化

就是把被序列化的字符串还原为对象,然后在接下来的代码中继续使用。

使用unserialize()函数

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

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

反序列化安全

序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题

有哪些php常见的魔法函数:

有面向对象编程基础的同学应该很多都能看懂,比如__contruct():c 中的构造函数,java中的构造器;__destruct():c 中的析构函数.java的自动回收机制:finalize()

靶场实战

了解了序列化、反序列化、php魔法函数,先来看一个靶场,尝试反序列化构造payload

payload

看一下题目,已知反序列化入口

php新手入门,(1)

先随便输点东西看看

php新手入门,(2)

这里既然是反序列化接口,就需要输入我们序列化的字符串,比如插入我们刚刚的payload

O:1:"S":1:{s:4:"test";s:2:"sd";}

php新手入门,(3)

不仅于此,构造xss

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

php新手入门,(4)

首页 12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.