知识点:.git 变量覆盖
扫描
用御剑或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