变量覆盖 | 代码审计

变量覆盖--代码审计

这是个薄弱地方,所以这次学习一下,总结一下。

 

变量覆盖漏洞:自定义的参数值替换原有变量值的情况称为变量覆盖漏洞

经常导致变量覆盖漏洞场景有:$$ 使用不当,extract() 函数使用不当,parse_str() 函数使用不当,import_request_variables() 使用不当,开启了全局变量注册

 

 

$$导致的变量覆盖

$$介绍
$$这种写法称为可变变量
一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。

 

<?php 
$a = "hello";
echo "$a"; //输出hello
$a="world";
echo "$a"; //输出hello
echo "$$a"; //输出word
echo "$a ${$a}"; //输出hello world
echo "$a $hello"; //输出hello world
?>

 

漏洞产生
使用 foreach 来遍历数组中的值,然后再将获取到的数组键名作为变量,数组中的键值作为变量的值。因此就产生了变量覆盖漏洞。

 

<?php
foreach ($_GET as $key => $value) {
${$key} = $value;
}
echo $a;
?>

 

get得到的数据$key和$value,关键第3行,${$key}用get传进来的$key做为新的变量,将get传进来的$value赋值给它。
get ?a=1 第3行会解析为$a=1。就造成了变量覆盖。

 

 

extract()函数导致的变量覆盖

extract() 该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。 

extract()的用法参考:http://www.runoob.com/php/func-array-extract.html

 

 

 

parse_str函数导致的变量覆盖

parse_str() 函数用于把查询字符串解析到变量中,如果没有array 参数,则由该函数设置的变量将覆盖已存在的同名变量。

 

posted on 2018-05-14 08:23  Oran9e  阅读(449)  评论(0编辑  收藏  举报