变量覆盖

变量覆盖,第1张

    变量覆盖指的是 用我们自定义的参数值替换程序原有的变量值 ,一般变量覆盖漏洞 需要结合程序的其它功能 来实现完整的攻击。经常导致变量覆盖漏洞场景有:$$,extract()函数,parse_str()函数,import_request_variables()使用不当,开启了全局变量注册等。

变量覆盖漏洞能被利用的条件:变量名可控、变量值可控、注册的这个变量在危险函数中使用

    使用foreach来遍历数组中的值,然后再将获取到的数组键名作为变量,数组中的键值作为变量的值。因此就产生了变量覆盖漏洞。请求id=1 会将$id的值覆盖,$id=1

extract()接收一个数组(必须是数组), 键名作为变量名 , 值为变量值 (若变量名与之前变量名相同则覆盖)

参考beescms的变量覆盖漏洞:>

数组的根据类型来分,分为关联数组和数字索引数组。

1数组根据 维度来分分为一维数组、二维数组、多维数组,索引数组,数组下标全部为数字的数组称为索引数组,关联数组,数组的下标有一个是字符串的就称为关联数组。

2声明数组的方式,变量名=array(数组元素1,数组元素2,),例如:$arr=array(1,2,3,4,5,6),  $arr=array(‘zhangsan’,’lisi’)。

3变量名[]=值,例如:$arr=[]=10;   $arr[]=20, //此时数组$arr里有两个元素,分别是10和20,下标分别是0和1。

4 那么等号左边的就是数组的下标也叫索引也叫键,箭头指向的便是数组的值,索引数组在声明的时候可以不必指明下标,不指明的情况下,下标默认从0开始。

5关联数组,下标有一个是字符串的就是关联数组,以键值对方式存在的数组特点,就是你一看,有一个 ”=>“,但也不一定这样的都是关联。

array_values($arr); 获得数组的值

array_keys($arr); 获得数组的键名

array_flip($arr); 数组中的值与键名互换(如果有重复前面的会被后面的覆盖)

in_array("apple",$arr); 在数组中检索apple

array_search("apple",$arr); 在数组中检索apple ,如果存在返回键名

array_key_exists("apple",$arr); 检索给定的键名是否存在数组中

isset($arr[apple]): 检索给定的键名是否存在数组中

current($arr); 返回数组中的当前单元

pos($arr); 返回数组中的当前单元

key($arr); 返回数组中当前单元的键名

prev($arr); 将数组中的内部指针倒回一位

next($arr); 将数组中的内部指针向前移动一位

end($arr); 将数组中的内部指针指向最后一个单元

reset($arr; 将数组中的内部指针指向第一个单元

each($arr); 将返回数组当前元素的一个键名/值的构造数组,并使数组指针向前移动一位

list($key,$value)=each($arr); 获得数组当前元素的键名和值

数组和变量之间的转换

extract($arr);用于把数组中的元素转换成变量导入到当前文件中,键名当作变量名,值作为变量值

注:(第二个参数很重要,可以看手册使用)使用方法 echo $a;

compact(var1,var2,var3);用给定的变量名创建一个数组

等等 还有好多 ,看一一看

current

(PHP 4, PHP 5, PHP 7)

current — 返回数组中的当前单元

1说明

current ( array &$array ) : mixed

每个数组中都有一个内部的指针指向它“当前的”单元,初始指向插入到数组中的第一个单元。

2参数

array

这个数组。

3返回值

current() 函数返回当前被内部指针指向的数组单元的值,并不移动指针。如果内部指针指向超出了单元列表的末端,current() 返回 false。

警告

此函数可能返回布尔值 false,但也可能返回等同于 false 的非布尔值。请阅读 布尔类型章节以获取更多信息。应使用 === 运算符来测试此函数的返回值。

4注释

注意: 如果数组包含 boolean false 的单元则本函数在碰到这个单元时也返回 false,使得不可能判断是否到了此数组列表的末端。 要正确遍历可能含有空单元的数组,用 each() 函数。

5参见

end() - 将数组的内部指针指向最后一个单元

key() - 从关联数组中取得键名

each() - 返回数组中当前的键/值对并将数组指针向前移动一步

prev() - 将数组的内部指针倒回一位

reset() - 将数组的内部指针指向第一个单元

next() - 将数组中的内部指针向前移动一位

我们在学习PHP开发相关基础知识的时候,对于不同的开发原理以及代码的使用都是基本的能力要求。今天,天通苑电脑培训就一起来了解PHP开发基础知识中的函数代码都有哪些。

array()

array(value1,value2)创建数组

array_chunk(array,size,preserve_keys)把一个数分割成新的数组块[tk]

array_combine(keys,values)通过合并两个数组(键名数组,键值数组)组成一个新的数组

array_count_values(array)用于统计数组中所有值出现的次数

array_diff(array1,array2,)比较数组返回两个数组的差集(只比较键值)

array_diff_assoc(array1,array2,)比较数组返回两个数组的差集(比较键名和键值)

array_diff_key(array1,array2,)比较数组返回两个数组的差集(只比较键名)

array_fill(index,number,value)用给定的键值填充数组

array_filter(array,要用的回调函数)用回调函数过滤数组中的元素

array_flip(array)反转/交换数组中的键名和对应关联的键值[flp]

array_keys(array)返回数组中的所有键名

array_merge(array1,array2,)把一个或多个数组合并一个数组[m:rd]

array_pad(array,size,value)将指定数量的带有指定值的元素插入到数组中

array_pop(array)删除后一个元素

array_push(array)末尾添加数组

array_shift(array())删除数并返回被删除的元素值

array_unshift(array))组中的一个元素添加一个或多个元素

array_rand(array,number)从数组中随机选出一个或多个数组

array_replace(array1,array2)使用后面数组的值替换一个数组的值

array_reverse(array)数组反转并返回新的数组

array_search(value,array,strict(可选true,flase))搜索值返回键名。True搜索键名和值都一样的元素

array_slice(array,start,length,preserve)返回数组中的选定部分

array_splice(array,start,length,array)把指定的元素去掉并用其他的替换

array_unique(array)删除数组中的重复值美[junik]

array_values(array)返回数组中的所有值

array_key_exists(key,array)查找数组键名是否存在

count(array)返回数组中元素的数目美[kant]

in_array(‘值’,$array,bool)检查数组中是否存在指定的值设置为TRUE,则in_array

函数检查搜索的数据与数组的值的类型是否相同。

以上就是关于变量覆盖全部的内容,包括:变量覆盖、php中把数组的键拿出来作为新数组、php数组、键名、索引、键值有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9553432.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存