BUU-日刷-[BJDCTF2020]Mark loves cat_git泄露/变量覆盖

BUU-日刷-[BJDCTF2020]Mark loves cat_git泄露/变量覆盖

 

 一个普通的网站

BUU-日刷-[BJDCTF2020]Mark loves cat_git泄露/变量覆盖

 

拖到最下面有个类似上传联系方式的提交点,试了试发现没啥用。

这里仔细观察可以发现左下角有个dog,很奇怪吧。

看题目名字Mark loves cat,又是cat又是dog的,猜测这里应该暗藏玄机。

 

后面没思路了,稍微看了下提示。发现是git泄露。

这里没想到用扫描,因为现在最近的比赛貌似大都不给扫描,上去就提示题目不需要不允许暴力扫描(可能线下还要)

所以开始没想到扫描

 

dirmap跑一下

BUU-日刷-[BJDCTF2020]Mark loves cat_git泄露/变量覆盖

 

 

 发现存在git泄露

githacker跑一下,跑出两个php

flag.phg

<?php

$flag = file_get_contents(/flag);

 

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;

 

 

审计一下

flag.php里面有个变量就是flag值,

index.php包含了flag.php

看一下输出flag条件:

  1:get传入flag,post传入flag  

  2:get和post传入的flag的变量值不能为flag  

看前面的三个循环,会对flag参数的值改变

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);
    }
}

 

思路1:

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

这里get传入yds=flag,又因为没传入post参数,所以会输出yds

 

思路2:

get传入is=flag&flag=flag

和上面差不多这里是通过is输出

 

思路3:

a=flag&flag=a&handsome=flag

 

这种题目其实有点像脑筋急转弯,慢慢尝试分析即可

 

BUU-日刷-[BJDCTF2020]Mark loves cat_git泄露/变量覆盖

上一篇:想回味Windows95?模拟器+浏览器搞定


下一篇:注释以及格式化输出(%s以及format运用)