漏洞简介
通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞。经常导致变量覆盖漏洞场景有: $$
使用不当,extract()
函数使用不当,parse_str()
函数使用不当,import_request_variables()
使用不当,开启了全局变量注册等。
本篇收集了几个CTF中的题目作为例子,对$$
,extract()
,parse_str()
的问题进行总结。
$$导致的变量覆盖问题
$$
导致的变量覆盖问题在CTF代码审计题目中经常在foreach
中出现,如以下的示例代码,使用foreach
来遍历数组中的值,然后再将获取到的数组键名作为变量,数组中的键值作为变量的值。因此就产生了变量覆盖漏洞。请求?name=test
会将$name
的值覆盖,变为test
。
CTF中$$导致的变量覆盖问题的例题1:
题目源码
<?php
include "flag.php";
$_403 = "Access Denied";
$_200 = "Welcome Admin";
if ($_SERVER["REQUEST_METHOD"] != "POST")
die("BugsBunnyCTF is here :p...");
if ( !isset($_POST["flag"]) )
die($_403);
foreach ($_GET as