Loading

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

 

 一个普通的网站

 

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

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

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

 

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

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

所以开始没想到扫描

 

dirmap跑一下

 

 

 发现存在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

 

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

 

posted @ 2021-09-04 23:36  Aninock  阅读(128)  评论(0)    收藏  举报