原理
变量覆盖指的是可以用我们的传参值替换程序原有的变量值
常出现位置
经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当,开启了全局变量注册等。
函数解析
经常引发变量覆盖漏洞的函数有:extract() parse_str()
extract()函数(作用:将数组中将变量导入到当前的符号表)
列题:
$test =******;
extract($_GET);
if(isset($gift)){ $content = trim($test);
if($gift == $content){echo 'flag is:'.$flag;} else{ echo error}}
分析源码我们可以知道,
1、文件将get方法传输进来的值通过extrace()函数处理。
2、通过两个if语句分别判断是否存在gift变量,和变量gift的值和变量content的值是否相等。变量content的值是通过读取变量test的值获取到的。如果两个变量相等输出flag。如果不相等,输出错误。
似乎逻辑上没啥问题,但是如果我们传参了test呢?
第一开始test在php中已经定义了,但是因为extrace()函数,我传参test时相当于重新给test赋值对不对?因为php执行语句是自上而下,那我传的参数完全可以覆盖掉之前所定义的
那么当我传参gift=a&test=a,相当于$gift=a;$test=a 那么这里是不是就直接输出flag了呢 (因为$content是由$test决定,$gift和$test都是我可以决定的)
标签:变量,gift,覆盖,content,漏洞,test,extract,函数 From: https://www.cnblogs.com/Crushz-2024/p/18390458