[BJDCTF2020]Mark loves cat

这题进去是一个网页,最后发现没有什么东西,最后查看源码发现,在源码的最后输出了一个dog

这里就断定肯定存在一些隐藏的文件,最后通过kali扫描也是发现了一些 .git 文件,然后就想到了git源码泄露,但是不知道为什么我的扫描不出,就只好在网上找了大佬的代码了
index.php

<?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'){
        exit($handsome);
    }
}

if(!isset($_GET['flag']) && !isset($_POST['flag'])){
    exit($yds);
}

if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){
    exit($is);
}

echo "the flag is: ".$flag;

看到了这个代码就想到了变量覆盖,这里有个需要注意的点:

foreach($_GET as $x => $y){
    if($_GET['flag'] === $x && $x !== 'flag'){
        exit($handsome);
    }
}

这里的代码要求传入的变量名flag=$x,但是不能使$x=flag,但是最后会返回$handsome
这段代码的意思也就是限定了变量覆盖的名字,只能使用handsome
最后的payload:
?handsome=flag&flag=handsome
最后查看源码滑倒最下面就可以拿到flag

posted @ 2024-09-14 19:08  lcmz  阅读(24)  评论(0)    收藏  举报