CTF || [“百度杯”CTF比赛 2017 二月场]爆破-1

题目内容: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 也存在在这些变量中。

参考:
PHP 全局变量 - 超全局变量
超全局变量
$GLOBALS
百度杯-二月场(Misc-Web)爆破-1

你可能感兴趣的:(CTF || [“百度杯”CTF比赛 2017 二月场]爆破-1)