变量覆盖-学习笔记
原创
©著作权归作者所有:来自51CTO博客作者小龙在山东的原创作品,请联系作者获取转载授权,否则将追究法律责任
简介
变量覆盖:是指用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其他功能来实现完整的攻击。
一般由函数使用不当导致。经常引发变量覆盖漏洞的函数有:extract()
, parse_str()
,import_request_variable()
。
单独变量覆盖一般难以利用,要和其他漏洞结合起来才能完成攻击。
常见变量覆盖方法
$$
<?php
$a = 1;
//var_dump($a);
echo "a = ".$a."<br>";
if($_GET) {
foreach($_GET as $key => $value) {
$$key = $value;
}
}
//var_dump($a);
echo "a = ".$a;
?>
extract 函数
漏洞点:使用 extract
来处理数组变量,会以数组键名为变量名,键值为变量值来赋值。
<?php
highlight_file(__file__);
$a = 1;
var_dump($a == 1);
@extract($_GET);
var_dump($a == 1);
parse_str 函数
使用 parse_str 来处理查询字符串,会将查询字符串中的键值分别作为变量名和变量值进行设置。
<?php
highlight_file(__file__);
$a = 1;
var_dump($a == 1);
@parse_str($_SERVER['QUERY_STRING']);
var_dump($a == 1);