原文链接:https://www.yuque.com/ni4n/blogs/yo8czq 作者Ni4n
变量覆盖漏洞
变量覆盖是指可以用我们自定义的参数值替换程序原有的变量值,该漏洞通常要和程序的其他的功能结合实现攻击。
extract()函数覆盖
其意思就是将键值对注册成变量,其是否会实现变量覆盖要看第二个参数。
当第二个参数为空,或者为EXTR_OVERWRITE
或EXTR_IF_EXISTS
时会导致变量覆盖。
demo
<?php
$b=3;
$a=array('b'=>'1');
extract($a);
print_r($b);
?>
//output:1
parse_str()函数覆盖
该函数会将字符串解析注册成变量,当第二个参数存在时,注册的变量会放到该数组中,但是如果该数组原本就存在相同的键,则会覆盖掉原有的键值。
注意
demo
<?php
$b=1;
parse_str('b=2');
print_r($b);
?>
//output:2
import_request_variables()函数变量覆盖
demo
<?php
$b=1;
import_request_variables('GP');
print_r($b);
?>
$$变量覆盖
直接看例子
<?php
$a=1;
foreach (array('_COOKIE','_POST','_GET') as $_request) {
#传入的a=2;变为'a'=>2
foreach ($$_request as $_key => $_value) {
echo $_key.'<br />';
$$_key = addslashes($_value);
}
}
echo $a;
?>