原文链接:https://www.yuque.com/ni4n/blogs/yo8czq 作者Ni4n

变量覆盖漏洞

变量覆盖是指可以用我们自定义的参数值替换程序原有的变量值,该漏洞通常要和程序的其他的功能结合实现攻击。

extract()函数覆盖

变量覆盖漏洞(转载) - 图1
其意思就是将键值对注册成变量,其是否会实现变量覆盖要看第二个参数。
变量覆盖漏洞(转载) - 图2
当第二个参数为空,或者为EXTR_OVERWRITEEXTR_IF_EXISTS时会导致变量覆盖。

demo

  1. <?php
  2. $b=3;
  3. $a=array('b'=>'1');
  4. extract($a);
  5. print_r($b);
  6. ?>
  7. //output:1

parse_str()函数覆盖

变量覆盖漏洞(转载) - 图3

该函数会将字符串解析注册成变量,当第二个参数存在时,注册的变量会放到该数组中,但是如果该数组原本就存在相同的键,则会覆盖掉原有的键值。

注意

变量覆盖漏洞(转载) - 图4

demo

  1. <?php
  2. $b=1;
  3. parse_str('b=2');
  4. print_r($b);
  5. ?>
  6. //output:2

import_request_variables()函数变量覆盖

变量覆盖漏洞(转载) - 图5

demo

  1. <?php
  2. $b=1;
  3. import_request_variables('GP');
  4. print_r($b);
  5. ?>

当我们对其传参时,就对其进行了变量覆盖。
变量覆盖漏洞(转载) - 图6

$$变量覆盖

直接看例子

  1. <?php
  2. $a=1;
  3. foreach (array('_COOKIE','_POST','_GET') as $_request) {
  4. #传入的a=2;变为'a'=>2
  5. foreach ($$_request as $_key => $_value) {
  6. echo $_key.'<br />';
  7. $$_key = addslashes($_value);
  8. }
  9. }
  10. echo $a;
  11. ?>

变量覆盖漏洞(转载) - 图7