[题目信息]:
题目名称 | 题目难度 |
---|---|
PHP-parse_str变量覆盖 | 1 |
[题目考点]:
变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击。
经常导致变量覆盖漏洞场景有:$$,extract()函数,parse_str()函数等.
[Flag格式]:
SangFor{M2WVKvkITidpS6dr}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:2010
[题目writeup]:
访问题目,右键查看源代码,得到提示信息
<!--
$he ='Spring';
$flag = "**********";
parse_str($_GET['SangFor']);
if ($he =="Moon"){
echo $flag;
}
-->
前置知识
parse_str(string,array)
把查询字符串解析到变量中
参数 | 描述 |
---|---|
string | 必需。规定要解析的字符串。 |
array | 可选。规定存储变量的数组的名称。该参数指示变量将被存储到数组中。 |
例如:
$a = "name=SangFor&age=666";
parse_str($a,$b);
echo $b['name']."\n";
echo $b['age'];
#输出结果
//SangFor
//666
分析代码可知,需要以POST方法传入v1,以GET方法传入v3
变量he值为字符串“Spring”,然后通过parse_str将通过GET方式传递的Moon参数的字符串解析到变量中。
由于parse_str存在变量覆盖漏洞,尝试输入?SangFor=he=Moon获得flag。
http://localhost/?SangFor=he=Moon