记录笔记之前先说明一下什么叫做变量覆盖漏洞;
变量覆盖漏洞是指自定义的参数替换原有变量值的情况,如$$使用不当,extract函数使用不当,parse_str() 函数使用不当,import_request_variables() 使用不当,开启了全局变量注册等。
顾名思义是全局都可以使用的变量,任何的对象或者是函数都可以使用,与之对应的局部变量,只能在定义的类或方法内部使用。
在PHP中变量是以$符号开头命名的,所以$$可变变量就是以一个变量的值作为一个变量的名。直接说可能不是很好理解,举一个例子来说明。
<?php
$a="qwe";
$qwe=1232;
var_dump($$a);
?>
运行结果int(1232)
extract() 函数从数组中把变量导入到当前的符号表中。对于数组中的每个元素,键名用于变量名,键值用于变量值。
<?php
$b = array("a" => "one","b" => "tow");
extract($b);
echo "\$a = $a\n\$b = $b";
?>
运行结果
$a = one $b = tow
这里补充一下->和=> 的意义和区别
->用来引用对象的成员(属性与方法);=>符号来分隔键和值,左侧表示键,右侧表示值。简单来说就是给别人起一个外号,用外号来代表某个人,提起他的外号,就可以知道他是谁的意思。
parse_str() 函数用于把查询字符串解析到变量中,如果没有array 参数,则由该函数设置的变量将覆盖已存在的同名变量。
import_request_variables() 函数将 GET/POST/Cookie 变量导入到全局作用域中。该函数在最新版本的 PHP 中已经不支持。