题目内容:flag就在某六位变量中。
题目
include "flag.php";
$a = @$_REQUEST['hello'];
if(!preg_match('/^\w*$/',$a )){//正则表达式^匹配一行的开头,$表示结束。\w表示匹配包括下划线的任何单词字符,等价于'[A-Za-z0-9_]'。*号:匹配前面的子表达式零次或多次。
die('ERROR');
}
eval("var_dump($$a);");//var_dump — 打印变量的相关信息
show_source(__FILE__);//__FILE__当前运行文件的完整路径和文件名。
?>
分值:10分
这个代码的作用是如果匹配正则表达式/^\w*$/
,就打印变量$$a
$a
是hello,$$a
是六位变量$hello
由于$a
在函数中,所以函数之外无法访问。如果要访问,将hello修改为超全局变量GLOBALS。
在URL后加?hello=GLOBALS
,将参数hello修改为Globals
实际执行语句:
eval("var_dump($$a);")
eval("var_dump($hello);")
eval("var_dump($GLOBALS);")
$GLOBALS的作用:引用全局作用域中可用的全部变量。
这样就会打印出当前定义的所有变量,也包括 include 的文件中的变量,flag 也存在在这些变量中。