反序列化漏洞
什么是序列化和反序列化?
PHP反序列化漏洞也叫PHP对象注入,是一个非常常见的漏洞,这种类型的漏洞虽然有些难以利用,但一旦利用成功就会造成非常危险的后果
漏洞的形成的根本原因是程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行getshell等一系列不可控的后果。
反序列化漏洞并不是PHP特有,也存在于java,python等语言中,但其原理基本相同
为什么存在反序列化?
1.大型网站中类创建的对象多的时候会占用大量的空间,反序列化就是将这些对象转换为字符串来保存,当用到的时候在转换危对象,由字符串重新转换为对象的时候就是反序列化。
2.部分配置文件通过序列化进行文件存储或者传递,然后再进行对象化会比较方便,一次采用序列化存储数据
序列化和反序列化的函数
PHP中由两个函数serialize()和unserialize()
1.serialize()
当在PHP中创建了一个对象后,可以通过serialize()把这个对象转变成一个字符串,保存对象的值之后方便之后的传递与使用
2.unserialize()
与serialize()对应,unserialize()可以从已存储的表示中创建PHP的值,可以从序列化后的结果中恢复对象(object)
认识PHP中的serialize()函数
<?php
class testClass{
var