序列化例子
定义几个类和对象,输出序列化的数据
<?php
class Stu{
public $name;
public $age;
public $sex;
public $score;
}
$stul= new Stu();
$stul->name="GuyoM";
$stul->age=24;
$stul->sex=true;
echo "<br \>";
echo serialize($stul);
?>
输出
显示的是已经被序列化的数据
反序列化自动调用计算器
<?php
class Stu{
public $name;
public $age;
public $sex;
public $score;
public function __wakeup(){
if(@$_GET['cmd']=="GuyoM"){
system('calc');
}
}
}
$stul= new Stu();
$stul->name="GuyoM";
$stul->age=24;
$stul->sex=true;
$a=serialize($stul);
@unserialize($a);
?>
访问
传参:?cmd=GuyoM
什么是反序列化漏洞?
序列化和反序列化本身不存在漏洞,之所以会有反序列化漏洞,是因为开发者在编写时,加入了一些恶意的代码。
PHP反序列化漏洞是一种安全漏洞,它允许攻击者利用未经验证的用户输入来执行恶意代码。这种漏洞通常出现在PHP应用程序中,特别是在使用了反序列化功能的情况下。
在PHP中,反序列化是将已经序列化的数据转换回原始的PHP对象或数据结构的过程。攻击者可以利用反序列化漏洞来注入恶意的序列化数据,从而执行任意的PHP代码,包括删除、修改或读取文件,执行系统命令,甚至获取完全的服务器控制权。
这种漏洞通常出现在应用程序接受并处理未经验证的用户输入时,比如从网络上接收的数据、从数据库中读取的数据等。攻击者可以构造恶意的序列化数据,然后将其发送给应用程序,触发反序列化操作并执行恶意代码。
序列化和反序列化本身是为了数据的完整传输
php的反序列化的过程中,魔术方法自动调用,魔术方法调用了别的方法,最终呈现一种链式调用