题目链接:Mark Loves cat
解题思路
访问靶机网站后得到如下页面:
先浏览网页,发现最下面有一个"dog"字样,此时翻看源码并没有什么发现
那就例行进行目录扫描,源码泄露扫描,用dirsearch目录扫描工具扫描网页目录:python3 dirserach.py -u [url]
发现/.git 源码,考虑是,git源码泄露问题
在kali中利用githacker工具拉取.git源码到result文件夹中:githacker --url [url] --output-folder [文件夹名]
得到flag.php和index.php文件
打开index.php,发现导入了flag.php文件
打开flag.php,发现flag变量被函数赋值,证明这里的flag变量就是我们要找的flag,那就会想有没有办法获取到这个值
审阅index.php文件,其中if判断有点多,我们审阅关键字段,发现有echo $flag
,尝试跨过i判断利用echo直接输出flag的值无果。
发现前面还有$$
,是典型的变量覆盖漏洞,阅读源码可知,只要用get方法传入yds=flag,即可利用exit()函数覆盖yds变量输出flag。
知识补充
php语法:
- 可变变量(可导致变量覆盖漏洞)
$cat = "miao";
$$cat = "hahaha";
echo $miao;//输出hahaha
$_GET
:与$_POST
类似,是php中的超全局变量,用于接收HTTP中GET方法传过来的参数数组- foreach
foreach($_GET as $x => $y){$$x = $$y;
}
//遍历HTTP的GET方法传过来的参数数组,key赋值给x,value赋值给y,大括号内是循环体
//例如传过来a=flag,则有$a = $flag,即将变量flag的值赋值给变量a
- exit()函数
exit($a);//打印变量a的值,中断程序并退出
- isset()函数
//用于检测变量是否被赋值且非null
$a = 1;
isset($a);//true