今天做了一道题,顺便整理下这两者的区别~

flag In the variable ! 
<?php
error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
    $args = $_GET['args'];
    if(!preg_match("/^\w+$/",$args)){
        die("args error!");
    }
    eval("var_dump($$args);");
}
?>

首先理解正则”/^\w+$/”,’^’表示以什么什么开始,’$’表示以什么什么结尾,’\w’表示所有大小写字母和数字,’+’表示一个或多个,所以这个正则就是只允许字母和数字出现
题目提示了说flag在一个变量里,而哪个变量我们又不知道,这时就回到了标题上的一个内容$GLOBALS ,那么这个东东是啥了, $GLOBALS 其实 一个包含了全部变量的全局组合数组 也就是说 $GLOBALS 包含PHP中所有的 全局变量!在实际环境始终测测看


a,b,c变量都显示出来了

a,b显示;c不显示

所以这道题可以使用如下payload:?args=GLOBALS~,即可得到结果因为源代码有双’$’~

那么标题中的另一个global又是啥了 ,其实她就像是一个申明,申明的变量为全局变量,没错就是这么简单