web / 爆破-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__当前运行文件的完整路径和文件名。
?>

这个代码的作用是如果匹配正则表达式/^\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

转载自简书:https://www.jianshu.com/p/f7055d3f3bb0

猜你喜欢

转载自blog.csdn.net/zz_Caleb/article/details/83994510