2019-11-08——PHP安全之变量覆盖

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

全局变量覆盖

register_globals的意思就是注册为全局变量,所以当On的时候,传递过来的值会被直接的注册为全局变量直接使用,而Off的时候,我们需要到特定的数组里去得到它。

extract()变量覆盖

extract函数:extract(array,extract_rules,prefix)。该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。

第二个参数指定函数将变量导入符号表时的行为:EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量;EXTR_SKIP - 如果有冲突,不覆盖已有的变量。

遍历初始化漏洞($$)(参考https://www.jianshu.com/p/a4d782e91852)

$$这种写法称为可变变量

一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。

import_request_variables变量覆盖

import_request_variables—将 GET/POST/Cookie 变量导入到全局作用域中,把参数注册成变量

用在register_globals被禁止的时候

import_request_variables(‘G’)指定导入GET请求中的变量,造成变量覆盖

parse_str()变量覆盖

parse_str() 函数把查询字符串解析到变量中,如果没有array参数,该函数设置的变量将覆盖已存在的同名变量。

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

常用于URL中参数的解析,类似的函数还有mb_parse_str()

你可能感兴趣的:(2019-11-08——PHP安全之变量覆盖)