• [BJDCTF2020]Mark loves cat


    Githack获取源码

    <?php
    include 'flag.php';
    $yds = "dog";
    $is = "cat";
    $handsome = 'yds';
    
    foreach($_POST as $x => $y){
        $$x = $y;
    }
    
    foreach($_GET as $x => $y){
        $$x = $$y;
    }
    
    foreach($_GET as $x => $y){
        if($_GET['flag'] === $x && $x !== 'flag'){	//GET方式传flag只能传一个flag=flag
            exit($handsome);
        }
    }
    
    if(!isset($_GET['flag']) && !isset($_POST['flag'])){	//GET和POST其中之一必须传flag
        exit($yds);
    }
    
    if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){	//GET和POST传flag,必须不能是flag=flag
        exit($is);
    }
    
    

    php动态变量
    $a="b";
    $b="c";
    echo $$a;
    结果输出:c;
    解释:$$a=${$a}=$b=c

    首先post:$flag=flag

    foreach($_POST as $x => $y){
        $$x = $y;
    }
    

    这样就变成了$$flag = flag

    然后GET:?yds=flag

    foreach($_GET as $x => $y){
        $$x = $$y;
    }
    

    $x为yds,$y为flag,所以$$x就是$yds,$$y也就是$flag,$flag就是真正的flag{XXXXXX}。$$x = $$y,也就是$yds=flag{XXXXXX}。
    看源码

    只要没有flag参数,就会exit($yds),就可以得到flag了。

  • 相关阅读:
    迪杰斯特拉算法简单分析
    华科机考:二叉排序树(改)
    华科机考:八进制
    华科机考:阶乘
    华科机考:找位置
    华科机考:回文字符串
    华科机考:a+b
    华科机考:N阶楼梯上楼
    华科机考:大整数排序
    iOS 适配iOS9
  • 原文地址:https://www.cnblogs.com/buchuo/p/12657978.html
Copyright © 2020-2023  润新知