变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击。
相关函数:extract(),import_request_variables,parse_str()
extract
extract() 函数能够将变量从数组导入到当前的符号表,其定义为
int extract ( array $var_array [, int $extract_type [, string $prefix ]] )
其中,第二个参数指定函数将变量导入符号表时的行为,最常见的两个值是 EXTR_OVERWRITE
和 EXTR_SKIP
。
当值为 EXTR_OVERWRITE
时,在将变量导入符号表的过程中,如果变量名发生冲突,则覆盖所有变量;值为 EXTR_SKIP
则表示跳过不覆盖。若第二个参数未指定,则在默认情况下使用 EXTR_OVERWRITE
。
当 extract() 函数从用户可以控制的数组中导出变量时,可能发生变量覆盖。
import_request_variables
import_request_variables 将 GET、POST、Cookies 中的变量导入到全局,使用这个函数只用简单地指定类型即可。
<?php
$auth = "0";
import_request_variables("G");
if ($auth == 1) { echo "private!";
} else { echo "public!";
}
?>
import_request_variables("G")
指定导入 GET 请求中的变量,提交 test.php?auth=1
出现变量覆盖。
parse_str()
parse_str() 函数通常用于解析 URL 中的 querystring,但是当参数值可以被用户控制时,很可能导致变量覆盖。
// var.php?var=new 变量覆盖
$var = "init";
parse_str($_SERVER["QUERY_STRING"]);
print $var;
与 parse_str() 类似的函数还有 mb_parse_str()。
原文始发于微信公众号(赛博之眼CyberEye):【安全笔记】Web安全之-变量覆盖
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论