PHP变量覆盖

admin 2024年4月20日00:00:19评论1 views字数 1062阅读3分32秒阅读模式

当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变量覆盖

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月20日00:00:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PHP变量覆盖http://cn-sec.com/archives/2637442.html

发表评论

匿名网友 填写信息