这题进去是一个网页,最后发现没有什么东西,最后查看源码发现,在源码的最后输出了一个dog
这里就断定肯定存在一些隐藏的文件,最后通过kali扫描也是发现了一些 .git 文件,然后就想到了git源码泄露,但是不知道为什么我的扫描不出,就只好在网上找了大佬的代码了
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;
看到了这个代码就想到了变量覆盖,这里有个需要注意的点:
foreach($_GET as $x => $y){
if($_GET['flag'] === $x && $x !== 'flag'){
exit($handsome);
}
}
这里的代码要求传入的变量名flag=$x,但是不能使$x=flag,但是最后会返回$handsome
这段代码的意思也就是限定了变量覆盖的名字,只能使用handsome
最后的payload:
?handsome=flag&flag=handsome
最后查看源码滑倒最下面就可以拿到flag