变量覆盖

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

变量覆盖漏洞能被利用的条件:变量名可控、变量值可控、注册的这个变量在危险函数中使用

(1)$$覆盖

    使用foreach来遍历数组中的值,然后再将获取到的数组键名作为变量,数组中的键值作为变量的值。因此就产生了变量覆盖漏洞。请求?id=1 会将$id的值覆盖,$id=1

(2)extract(array ,extract_rules ,prefix)

extract()接收一个数组(必须是数组),键名作为变量名值为变量值(若变量名与之前变量名相同则覆盖)

参考beescms的变量覆盖漏洞:https://www.freesion.com/article/8527645153/#_130


(3)parse_str(string ,array)

    string必需。规定要解析的字符串。

    array可选。规定存储变量的数组的名称。该参数指示变量将被存储到数组中。

功能:parse_str() 函数把查询字符串解析到变量中(结果:注册普通变量/数组变量

注释:如果未设置 array 参数,则由该函数设置的变量将覆盖已存在的同名变量

tips:parse_str()类似的函数还有mb_parse_str(),用法基本一致。

注册两个变量
注册一个数组变量

你可能感兴趣的:(变量覆盖)