PHP反序列化漏洞

序列化与反序列化

seriallization 序列化 : 将对象转化为便于传输的格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串。

deseriallization 反序列化:将序列化的数据恢复为对象的过程。

PHP反序列化

serialize();      将对象序列化成字符串

unserialize();  将字符串反序列化回对象

序列化

对象转换成字符串

方便传输

创建类

class Stu{

public $name;

public $age;

public $sex;

public $score;

}

创建对象(序列化)

$stu1 = new Stu();

$stu1->name = "xiu";

$stu1->age = 18;

$stu1->sex = true;

var_dump($stu1);

echo "<hr />";

echo serialize($stu1);

反序列化

字符串转换成对象

O:object

 

反序列化漏洞

以 __ 开头的函数,是PHP 中的魔术方法。

类中的魔术方法,在特定情况下会自动调用。即使魔术方法在类中没有被定义,也是真实存在的。

两个下划线

__construct()           在创建对象时自动调用

__destruct()             在销毁对象时自动调用

__wakeup()             unserialize()时会自动调用这个函数

__sleep()                     serialize()时会自动调用这个函数

例子

<?php

class animal{
	public $name;
	public $age;
	
	public function __sleep(){
	if(@$_GET['cmd']=="xin"){
		system('calc');
	}
	}
	
}

$an1=new animal;

$an1->name="dog";
$an1->age=3;

//var_dump($an1);

@serialize($an1);

?>

什么是反序列化漏洞?

序列化和反序列化本身是为了实现数据在网络上完整高效的传输,但是由于反序列化过程中,对象的魔术方法会自动调用,魔术方法本身调用了别的方法,最终呈现一种链式调用,直到执行任意的代码或者命令,

修改序列化后的数据,目的是什么?

为了满足一定的条件以后实现链式调用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值