天天看点

皮卡丘(pikachu)PHP反序列化

PHP反序列化

在PHP中:

序列化使用serialize()将对象变成一个可传输的字符串

反序列化则是使用unserialize()将字符串反序列化为对象。

序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题

分为有类和无类

有类看魔术方法,不同方法会影响传入参数或操作

常见的几个魔法函数:

_construct()当一个对象创建时被调用

_destruct()当一个对象销毁时被调用

_toString()当一个对象被当作一个字符串使用

_sleep()在对象被序列化之前运行

_wakeup()将在序列化之后立即被调用

反序列化是要先知道源代码的,所以我们查看源代码

皮卡丘(pikachu)PHP反序列化

发现源码中有payload,显然是出题者给我们的

若果没有这行 O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

我们需要现根据源代码的方式自己生成一个反序列化字符串,网上有在线的工具

皮卡丘(pikachu)PHP反序列化

之后运行我们的payload: O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

皮卡丘(pikachu)PHP反序列化

结果竟然是一个JS的弹窗,这样我们相当于通过反序列化发现了XSS漏洞。

所以我们能得知反序列化并不是漏洞,而是一种途径,通过反序列化可找到其他漏洞,拿sql注入来说,如果我们通过反序列化找到了sql注入的漏洞,那么我们就不能再用sqlmap了,只能手工注入,或者自己做个插件来进行注入。

继续阅读