[BJDCTF2020]Mark loves cat

 

打开后没发现什么,代码最后输出一个“dog”

直接输入/.git/时返回403,输入/.git/head可以下载文件,发现git泄漏

使用GitHack下载源码

<?php

$flag = file_get_contents('/flag')
<?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'){et型flag参数值等于$x的值,$x的值不等于flag  
        exit($handsome);
    }
}

if(!isset($_GET['flag']) && !isset($_POST['flag'])){//不存在get型flag参数,且不存在post型flag参数   
    exit($yds);
}

if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){//post型flag参数值等于flag,或get型flag参数值等于flag   
    exit($is);
}

可以看到有三个有输出的exit:

exit($handsome);
exit($yds);
exit($is);

而在初始化中,存在dog,猜测上面网页源代码输出的正是$yds

$yds = "dog";
$is = "cat";
$handsome = 'yds';

$flag = file_get_contents('/flag') $flag存在flag文件

网页输出$yds

只要在令$yds=$flag,将原来$yds变量的值进行覆盖,同时符合退出条件“不给flag传值”,就可以得到flag

通过get传值,构造?yds=flag

查看源代码

也可以使用其他exit

知识点($和$$)

php  https://www.php.cn/php-weizijiaocheng-415613.html

https://blog.csdn.net/wenxiukeke/article/details/87790232

 

posted @ 2021-09-13 14:49  凇岳  阅读(124)  评论(0)    收藏  举报