了解变量覆盖漏洞
什么是变量覆盖漏洞?
自定义的参数值替换原有变量值的情况称为变量覆盖漏洞
经常导致变量覆盖漏洞场景有:$使用不当,extract()函数使用不当,parse_str()函数使用不当,import_request_variables()使用不当,开启了全局变量注册等。
- 全局变量覆盖
- extract()变量覆盖
- 遍历初始化变量
- import_request_variables变量覆盖
- parse_str()变量覆盖
变量覆盖的种类
一、全局变量覆盖(PHP5.3.0废弃,PHP5.4.0移除)
当register_global=ON时,变量来源可能是各个不同的地方,比如页面的表单,Cookie等。
二、extract()变量覆盖
PHP extract()函数从数组中把变量导入到当前的符号表中。对于数组中的每个元素,键名用于变量名,键值用于变量值。int extract ( array & $array [, int $flags = EXTR_OVERWRITE [, string sprefix = NULL ]])
三、遍历初始化变量($$变量覆盖)
常见的一些以遍历的方式释放变量的代码,可能会导致变量覆盖。
四、import_request_variables变量覆盖
import_request_variables(’G’)指定导入GET请求中的变量,从而导致变量覆盖。
五、parse_str()变量覆盖
parse_str将字符串解析成多个变量,如果参数str是URL传递入的查询字符串(query string),则将它解析为变量并设置到当前作用域。
$类型变量覆盖
1.php
2.php
parse_str()变量覆盖
Parse_str1.php
Parse_str2.php