简介

变量覆盖:是指用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其他功能来实现完整的攻击。
一般由函数使用不当导致。经常引发变量覆盖漏洞的函数有:​​​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);

变量覆盖-学习笔记_数组_02