绕过__wakeup(写了几次了都不记得),私有变量 - 图1

拿到这道题,提示他会备份文件,首先访问index.php.bak

什么都没有,404没有这个

拿来扫描嘛,这网站又不给扫,直接429请求过多。直接拿网上的wp,后面有个www.zip将他下载下来看

绕过__wakeup(写了几次了都不记得),私有变量 - 图2

绕过__wakeup(写了几次了都不记得),私有变量 - 图3

代码审计:

绕过__wakeup(写了几次了都不记得),私有变量 - 图4

绕过__wakeup(写了几次了都不记得),私有变量 - 图5

也就是说可以GET传入一个参数,但是后面包含了class.php

这里讲一下知识点

__wakeup是在反序列化的时候会调用的函数,他有漏洞

__destruct是析构函数,就是请求结束后会销毁变量

说一下大致的流程,就是你传入参数,他会把它反序列化,然后调用__wakeup讲username=guest,然而我们需要username=admin才行。那就是不能让他执行,绕过他,并且password=100

绕过__wakeup(写了几次了都不记得),私有变量 - 图6

传入

绕过__wakeup(写了几次了都不记得),私有变量 - 图7O:4:”Name”:2:{s:14:”Nameusername”;s:5:”admin”;s:14:”Namepassword”;i:100;}

修改了前面变量的值,绕过了__wakeup还是错

执行了

绕过__wakeup(写了几次了都不记得),私有变量 - 图8

绕过__wakeup(写了几次了都不记得),私有变量 - 图9

原来是因为。这俩是私有变量,要加上%00,私有变量在被反序列化的时候要加两个字节

O:4:”Name”:3:{s:14:”%00Name%00username”;s:5:”admin”;s:14:”%00Name%00password”;i:100;}

绕过__wakeup(写了几次了都不记得),私有变量 - 图10

总结:私有变量两个字节,在反序列化的时候记得给他戴上,绕过wakeup