本文主要是介绍[BJDCTF2020]Mark loves cat 1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
知识点:.git 变量覆盖
目录
- 扫描
- 拿源码
- 变量覆盖
- 00x0
- 00x1
- 00x2
扫描
用御剑或dirsearch扫可以扫到.git/
拿源码
用githack拿源码。
用的时候可能会遇到扫到php文件,但拿不到php源码的情况,这时可以用git init初始化一下,然后不停的试,总有一次会拿到。
我称之为看脸,如果还有其他方法,望各位大佬告之。
变量覆盖
可以在本地实验
<?php$flag = 'buuctf';$yds = "dog";
$is = "cat";
$handsome = 'yds';foreach($_POST as $x => $y){$$x = $y;echo "POST:"."<br>";echo "\$x=".$x."<br>";echo "y=".$y."<br>";}
echo "<br>";
foreach($_GET as $x => $y){$$x = $$y;echo "GET:"."<br>";echo "\$x=".$x."<br>";echo "\$y=".$y."<br>";
}
foreach($_GET as $x => $y){if($_GET['flag'] === $x && $x !== 'flag'){echo "handsome"."<br>";exit($handsome);}
}
echo "<br>";
if(!isset($_GET['flag']) && !isset($_POST['flag'])){echo "yds"."<br>";exit($yds);//yds=flag
}
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){echo "is"."<br>";exit($is);
}echo "the flag is: ".$flag;
?>
00x0
这个判断是要get中键值为flag的值强等于$x,且$x要不等于flag,有一点可以确定,就是要在这边输出flag,必须要传handsome=flag,这样传进去后变为$handsome=$flag,然后此时:
$_GET[‘flag’] === handsome && handsome !== ‘flag’
其中后面的条件达成,在传一个flag=handsome就行了。
?handsome=flag&flag=handsome
00x1
(buuctf为本地设置的flag值)
当get中flag和post中的flag都不存在,则输出$yds,我们可以传个get为yds=flag,经过变量覆盖则会变为$yds=$flag
?yds=flag
00x2
这边要post中flag值强等于flag,或者get中flag值强等于flag。
post中的flag不能变,因为一动就变为$flag=flag,flag值都被我们搞没了。
而get可以搞,传入flag=flag,会变为$flag=$flag,这样if条件就达成了,最后只要把$is=$flag就行了。
?is=flag&flag=flag
这篇关于[BJDCTF2020]Mark loves cat 1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!