PHP变量覆盖
原创 嗜心 嗜心 2024-04-08 11:07 河南
当PHP开发者在编写代码时,很多时候为了方便会直接完全信任用户的输入,不做校验地赋值到自己程序的变量中。如果这时变量被传到了某些危险函数上,就会产生一些意想不到的后果。
变量覆盖的危害在于它能改变变量的值,一般都是配合其他函数/漏洞组合进行使用。
下面是php变量覆盖的一些用法举例:
<?php
$a=yuiop;
$b=world;
$$a=$b;
echo($yuiop);
?>
在以上的PHP语句中,首先把字母yuiop赋值给$a,再把world值赋予给$b,这时再定义一个变量$$a,这个时候呢,$$a会被解析成$yuiop;因为world值传给了$b,而$b的值赋值给了$$a,也就相当于把world值赋值给了$yuiop,这个时候进行echo yuiop也就相当于输出值world;
但是变量覆盖它在以下两种情况是会报错的:"$"符号后面紧跟着数字或者特殊符号的时候,也就是说$后面的第一位字符不能是数字或者特殊符号,否则变量就不会被覆盖。
这是因为php中变量的定义,$后面第一位可以跟汉字和字母,不能是数字或者特殊符号,不然就是非法变量。
在PHP中有以下几种变量覆盖方式,(1)php语法导致的变量覆盖,(2)PHP函数导致的变量覆盖(extra,parse_str,mb_parse_str,import_request_variables).(3)PHP配置项导致的变量覆盖(register_globals:php中的一个配置项,配置为true之后传入GET/POST参数都会被赋值成变量)。
下面是PHP变量覆盖
漏洞利用的方法:
首先是语法方面的:就像上面举得例子一样,这就不再说,步骤同上面的例子一样。
函数方面的话:extra函数可以接受三个参数:第一个参数():类型是数组,分为key和value。key是变量名,value是变量值,如果没有定义value值为null
第二个参数:是一些可选的配置,如EXTR_OVERWRITE,假设变量已存在依旧覆盖,具体参数可以查看PHP文档。
第三个参数:前缀,仅在第二个参数为EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID或EXTR_PREFIX_EXISTS时生效
配置项导致的覆盖的话,需要在php.ini中设置register_globals =On,需要注意的是,这个配置项的话在5.3.0起废弃不用,在5.4.0起就被移除了。这个参数项就是把GET/POST参数注册为变量
标签:php,变量,覆盖,--,参数,PHP,EXTR From: https://www.cnblogs.com/o-O-oO/p/18122313