title: 初识php反序列化
��:Understanding PHP Object Injection](https://securitycafe.ro/2015/01/05/understanding-php-object-injection/)

php基础提要:

php允许保存一个对象方便以后重用,这就是序列化。
场景:变量值需要跨脚本传递。

序列化

反序列化

下面演示php反序列化。
建立logfile.php(定义了一个类,可以进行文件删除),use.php(使用这个类,生成序列化字符串)。
1.php(之后演示删除该脚本)
test.php(接受序列化字符串,删除1.php)

use.php指定了一个文件,进行删除。
O:7:"LogFile":1:{s:8:"filename";s:5:"1.php";}
复制生成的这个序列,之后要用到。

之后,建立一个test.php,其中定义一个新的类 User。
此时图一建立的1.php还存在。


划重点,test.php因为接受了用户给出的变量usr_serialized,而用户的输入不可控。导致php脚本解析并执行了删除1.php的操作。

而test.php本来设计的功能,是传递“O:4:”User”:2:s:3:”age”;i:20;s:4:”name”;s:4:”John”;}”

于是页面会显示“User John is 20 years old.”

在跨页面传递变量的时候,没有设计好,就导致了这个命令执行。