首先用dirsearch扫描一下目录,发现/.git源码泄露,使用githack将源码下载下来,在github里面搜lijiejie的githack,真的很好用,点一大波赞,下面是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;
可以利用yds就是原值为cat的那个
1.这里的判断语句为
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
exit($yds);
}
get或post的其中之一的键为flag就可以了.
2.利用get的值进行变量覆盖,foreach语句为
foreach($_GET as $x => $y){
$$x = $$y;
}
$x => $y
似乎是个用来代表键值对的一个形式,例如我们传入?yds=flag就是$x=yds,$y=flag
.
然后再向下进行语句就是$yds=$flag
,上面有个exit($yds)
命令,这就可以输出flag啦.
post的$flag应该可以随便设置值的,只要键为flag就可以了.
就这?就这?
最终payload
get
: ?yds=flag
post
: $flag=*