打开一看提示说有备份网站习惯,用工具扫一下发现了www.zip得到了网站备份。
得到了3个php 直接看到了flag.php打开一看
结果错误,怎么可能这么简单,orz
直接看另外两个php中的源码
index.php和class.php
一看就是反序列化
index.php在传入select时会将select进行反序列化,而class.php中的wekeup会在select被序列化的时候执行,把你传入的username改为guest导致无法访问
O:4:"Name":2:{s:14:"%00Name%00username";s:5:"asdfa";s:14:"%00Name%00password";i:100;}
读代码可以看见username必须为admin&password必须为100
username和password是私有变量,变量中的类名前后会有空白符,而复制的时候会丢失,所以要加上%00
因为私有和protect序列化之后格式不一样所以要加入%00Name%00
然后%00不可以替换为空格,应为这里的%00表示不可见字符
这时候可以看见
没有绕过_wakeup替换成了guest而导致无法访问
__wakeup()函数漏洞原理:当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行
这里只需要将Name后面2改为大于2的就行了