变量覆盖 | 代码审计

变量覆盖--代码审计php

这是个薄弱地方,因此此次学习一下,总结一下。html

 

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

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

 

 

$$致使的变量覆盖学习

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

 

<?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 来遍历数组中的值,而后再将获取到的数组键名做为变量,数组中的键值做为变量的值。所以就产生了变量覆盖漏洞。code

 

<?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。就形成了变量覆盖。htm

 

 

extract()函数致使的变量覆盖blog

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

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

 

 

 

parse_str函数致使的变量覆盖

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

相关文章
相关标签/搜索