Loading

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

posted @ 2021-10-17 11:28  Nanne1ess  阅读(157)  评论(0)    收藏  举报