
变量覆盖指的是 用我们自定义的参数值替换程序原有的变量值 ,一般变量覆盖漏洞 需要结合程序的其它功能 来实现完整的攻击。经常导致变量覆盖漏洞场景有:$$,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数组、键名、索引、键值有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)