前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >变量覆盖

变量覆盖

作者头像
宸寰客
发布2020-09-07 15:13:51
4.3K0
发布2020-09-07 15:13:51
举报
文章被收录于专栏:yuancao博客yuancao博客

定义

什么是变量覆盖呢? 变量覆盖指的是用我们自定义的参数值替换程序原有的变量值, 一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击。

如果有下面的几个函数出现,就可能存在变量覆盖:

代码语言:javascript
复制
$$ 
extract()函数
parse_str()函数
import_request_variables()函数

用法

1.$$

$$就是将之前定义的变量的值重新定义新的变量

代码语言:javascript
复制
$a=b
$b=c
代码语言:javascript
复制
$$a = $($a) = $b = c

2.extract()函数

定义

将数组中的变量导入到当前的符号表

语法
代码语言:javascript
复制
extract(array,extract_rules,prefix) 

array 必需的,规定要使用的数组

extract_rules 可有可无,如果为空,则默认为EXTR_OVERWRITE

代码语言:javascript
复制
EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。
EXTR_SKIP - 如果有冲突,不覆盖已有的变量。
EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 prefix。
EXTR_PREFIX_ALL - 给所有变量名加上前缀 prefix。
EXTR_PREFIX_INVALID - 仅在不合法或数字变量名前加上前缀 prefix。
EXTR_IF_EXISTS - 仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。
EXTR_PREFIX_IF_EXISTS - 仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。
EXTR_REFS - 将变量作为引用提取。导入的变量仍然引用了数组参数的值

prefix可选。如果 extract_rules 参数的值是 EXTR_PREFIX_SAME、EXTR_PREFIX_ALL、 EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS,则 prefix 是必需的。它的值就是前缀,需要用

代码语言:javascript
复制
该参数规定了前缀。前缀和数组键名之间会自动加上一个下划线。

1.php

代码语言:javascript
复制
<?php
$a = "1";
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo "\$a = $a; \$b = $b; \$c = $c";
?>

这里只有“array”,后面两个参数为空。\a=a前面的\,是为了转义

在这里插入图片描述
在这里插入图片描述

如果不加\,就会显示这个

在这里插入图片描述
在这里插入图片描述

1.第二个参数的值是extr_skip,如果有冲突,不覆盖已有的变量。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  1. EXTR_PREFIX_ALL - 给所有变量名加上前缀wo。如果没有加前缀,那么输出的结果为空。
代码语言:javascript
复制
<?php
$a = "1";
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array, EXTR_PREFIX_ALL,"wo");
echo "\$a = $a; \$b = $b; \$wo_c = $wo_c; \$wo_a = $wo_a ";


?>
在这里插入图片描述
在这里插入图片描述
  1. EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 prefix。
代码语言:javascript
复制
<?php
$a = "1";
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array, EXTR_PREFIX_SAME, "wo");
echo "\$a = $a; \$b = $b; \$c = $c; \$wo_a = $wo_a ";
?>
在这里插入图片描述
在这里插入图片描述

4.…………

3.parse_str()

定义

parse_str()函数的作用是把传入的字符串放入变量数组中去。

语法

parse_str(string,array)

代码语言:javascript
复制
string 	必需。规定要解析的字符串。
array 	可选。规定存储变量的数组名称。该参数指示变量存储到数组中。
              如果未设置 array 参数,由该函数设置的变量将覆盖已存在的同名变量。

注意:php.ini 文件中的 magic_quotes_gpc 设置影响该函数的输出。如果已启用,那么在 parse_str() 解析之前,变量会被 addslashes() 转换。

addslashes()函数

在(",',/)前添加反斜杠,如果是闭合符,则不加。

代码语言:javascript
复制
<?php
$str = addslashes("W\hat does 'yolo'  me\an?");
$str1 = addslashes('W\hat does "yolo"  me\an?');
echo($str.'<br>');
echo($str1.'<br>');
?>
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
<?php
parse_str("name=Peter&age=43",$Array);
print_r($Array);
?>
在这里插入图片描述
在这里插入图片描述

4.import_request_variables()

定义

import_request_variables()函数将 GET/POST/Cookie 变量导入到全局作用域中。该函数在最新版本的 PHP 中已经不支持

版本要求:PHP 4 >= 4.1.0, PHP 5 < 5.4.0

语法

bool import_request_variables ( string types [, string prefix ] )

参数说明:

$types:指定需要导入的变量,可以用字母 G、P 和 C 分别表示 GET、POST 和 Cookie,这些字母不区分大小写,所以也可以使用 g 、 p 和 c 的任何组合。POST 包含了通过 POST 方法上传的文件信息。注意这些字母的顺序,当使用 gp 时,POST 变量将使用相同的名字覆盖 GET 变量。任何 GPC 以外的字母都将被忽略。

$prefix: 变量名的前缀,置于所有被导入到全局作用域的变量之前。所以如果有个名为 userid 的 GET 变量,同时提供了 pref_ 作为前缀,那么将获得一个名为 $pref_userid 的全局变量。虽然 prefix 参数是可选的,但如果不指定前缀,或者指定一个空字符串作为前缀,会获得一个 E_NOTICE 级别的错误。

参考资料:https://www.runoob.com/php/php-import_request_variables-function.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义
  • 用法
    • 1.$$
      • 2.extract()函数
        • 定义
        • 语法
      • 3.parse_str()
        • 定义
        • 语法
      • 4.import_request_variables()
        • 定义
        • 语法
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档