php审计基础四:变量覆盖

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

当代码是:

<?php
$b=3;
$a=array('b'=>'1');
extract($a);
print_r($b);
b的值被覆盖,输出的值变成1

当缺陷代码为:
<?php
$b=3;
$a=$_GET["a"];
extract($a);
print_r($b);

当浏览器传入:http://localhost:8000/fugai.php?a[b]=10000 时
b的值被覆盖,输出值变成 10000
当extract的第二个参数变为:EXTR_SKIP,即:extract($a,EXTR_SKIP);
就可以不覆盖变量的值了


当extract的第二个参数为EXTR_REFS变量也会被覆盖

当实验代码为

<?php 
$b=3;  
$a=array('b'=>'1');  
extract($a, EXTR_REFS);
print_r($b);  

输出为1

当实验代码为:

<?php 
$b=3;  
$a=$_GET['a'];
extract($a, EXTR_REFS);
print_r($b);  

当输入test.php?a[b]=123时

输出为123


(2)parse_str函数
parse_str() 函数把查询字符串解析到变量中。
注释:如果未设置 array 参数,则由该函数设置的变量将覆盖已存在的同名变量。
当代码是:
<?php
$b=3;
$a="b=200";
parse_str($a);
print_r($b);

b的值同样会被覆盖,然后b输出200
当缺陷代码为:
<?php
$b=3;
$a=$_GET["a"];
parse_str($a);
print_r($b);

当浏览器访问这样的url:http://localhost:8000/fugai.php?a=b=10000 时,就会把b的值覆盖,从而输出 10000


(3)import_request_variables:
import_request_variables 函数可以在 register_global = off 时,把 GET/POST/Cookie 变量导入全局作用域中。
将 GET/POST/Cookie 变量导入到全局作用域中。如果你禁止了 register_globals,但又想用到一些全局变量,那么此函数就很有用。
Ps:这个只用于:php4.1到5.4之间

当缺陷代码为:

<?php
$b=1;
import_request_variables('GP');
print_r($b);

在浏览器传入http://localhost:8000/fugai.php?b=22
就会覆盖b的值

(4)$$变量覆盖
PHP 的引用允许你用两个变量来指向同一个内容
考虑一个代码:
$a="ABC"; 
$b =&$a; 
echo $a;//这里输出:ABC 
echo $b;//这里输出:ABC 
$b="EFG"; 
echo $a;//这里$a的值变为EFG 所以输出EFG echo $b;//这里输出EFG 

这里的$a和$b都指向同一个变量了
在考虑一个缺陷代码:

$a=1;
foreach (array('_COOKIE','_POST','_GET') as $_request)
{
    foreach ($$_request as $_key=>$_value)
    {
        echo $_key;
        
        $$_key=  addslashes($_value);
        echo "<br>";
    }
}
echo $a;

当浏览器传递访问:http://localhost:8000/fugai.php?a=555
输出的的值为555

为什么会导致变量覆盖呢?重点在$$符号,从代码中我们可以看出$_key为COOKIE,POST,GET中的参数,比如提交?a=1,则$key的值为a,而还有一个$在a的前面,结合起来则是$a=addslashes($_values);所以这样会覆盖已有的变量$a的值
在这段代码之前的变量都可以覆盖掉

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值