反序列化之绕过wakeup()
今天在写web题时遇到了一道这样的题目,扫描目录后,访问index.phps,找到了源代码
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
?code=
由于我这个新手不懂代码审计,问ai之后发现这是php代码,得知wakeup函数为魔术方法。当对象被反序列化时,就会调用wakeup函数,最后输出"bad repuests"。
查询该函数我发现这个函数是可以绕过的。
O:4:"xctf":1:{s:4:"flag";s:3:"111";}构造出该payload
补充:这里我是第一次遇到payload的使用,
Payload是什么?
是包含在你用于一次漏洞利用(exploit)中的ShellCode中的主要功能代码
那么这个payload是什么意思呢?
其中O表示对象,4是类名xctf的长度,1表示对象中有一个属性,s表示字符串,4是属性名flag的长度,3是属性值111的长度。
当序列化字符串中表示对象属性个数的值大于实际属性个数时,__wakeup()函数将不会被调用。
因此这里我们将对象属性个数从1修改为2,这样在反序列化时可能会绕过__wakeup()方法,从而成功反序列化对象。
我们再将构造的payload(O:4:"xctf":2:{s:4:"flag";s:3:"111";})传给code,这样就解决了这道题
菜鸡一枚~~欢迎大佬纠正 指导

浙公网安备 33010602011771号