unserialize3-攻防世界

题目名字为反序列化,可知这题的关键时反序列化,具体的漏洞为:
PHP反序列化漏洞:执行unserialize()时,先会调用__wakeup()。当序列化字符串中属性值个数大于属性个数,就会导致反序列化异常,从而跳过__wakeup()。
这篇帖子详细讲述了反序列化的原理及其可利用的漏洞
序列化就是一个对象变成一个字符串
反序列化就是一个字符串变成一个对象
题目中定义了一个public变量flag
序列化的格式为:
O:<类名的长度>:"<类名>":<成员属性的个数>:{S:<成员属性名的长度>:"<成员属 性名>";......}
所以这个地方我们要绕过_wakeup()函数,就要构造超过1个变量的序列化
原序列化的结果为:
O:4:"xctf":1:{S:4:"flag";S:3:"111";}
构造后的payload为:
O:4:"xctf":2:{S:4:"flag";S:3:"111";}
表示有两个变量,就能跳过payload,得到flag


浙公网安备 33010602011771号