一,变量覆盖漏洞
参考:https://www.cnblogs.com/xiaozi/p/7768580.html
通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞。经常导致变量覆盖漏洞场景有:
1,$$使用不当,
2,extract()函数使用不当,
3,parse_str()函数使用不当,
4,import_request_variables()使用不当,
5,开启了全局变量注册等。
1,$$使用不当
$key='text'; $$key =200 的意思是 将 $key 的值作为变量 并赋值为 200
$$ 导致的变量覆盖问题在CTF代码审计题目中经常在foreach中出现,如以下的示例代码,使用foreach来遍历数组中的值,然后再将获取到的数组键名作为变量,数组中的键值作为变量的值。因此就产生了变量覆盖漏洞。请求?name=test 会将$name的值覆盖,变为test。
<?php
$name=’thinking’;
foreach ($_GET as $key => $value)
$$key = $value;
var_dump($key);
var_dump($value);
var_dump($$key);
echo $name;
?>
//?name=test
//output:string(4) “name” string(4) “test” string(4) “test” test
例题一:
<?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 $key => $value)
$$key = $$value;
foreach ($_POST as $key => $value)
$$key = $value;
if ( $_POST["flag"] !== $flag )
die($_403);
15.echo “This is your flag : “. $flag . “\n”;
16.die($_200);
17.?>
题目分析:
源码包含了flag.php文件,并且需要满足3个if里的条件才能获取flag,题目中使用了两个foreach并且也使用了$$.两个foreach中对