“百度杯”CTF比赛 2017 二月场
1、类型:MiscWeb 题目名称:爆破-1
题目内容:
<?php
include "flag.php";
$a = @$_REQUEST['hello'];
if(!preg_match('/^\w*$/',$a )){//正则表达式^匹配一行的开头,$表示结束。\w表示匹配包括下划线的任何单词字符,等价于'[A-Za-z0-9_]'。*号:匹配前面的子表达式零次或多次。
die('ERROR');
}
eval("var_dump($$a);");
show_source(__FILE__);
?>
这个代码的作用是如果匹配正则表达式/^\w*
/
,
就
打
印
变
量
/,就打印变量
/,就打印变量$a
a
是
h
e
l
l
o
,
a是hello,
a是hello,
a
是
六
位
变
量
a是六位变量
a是六位变量hello
由于$a在函数中,所以函数之外无法访问。如果要访问,将hello修改为超全局变量GLOBALS。
在URL后加?hello=GLOBALS,将参数hello修改为Globals
实际执行语句:
eval("var_dump($$a);")
eval("var_dump($hello);")
eval("var_dump($GLOBALS);")
payload:http://2a1038c49f204eebb6a6dcc63101a813720dd25d6d5044a4.changame.ichunqiu.com/?hello=GLOBALS
效果图:
$GLOBALS的作用:引用全局作用域中可用的全部变量。
这样就会打印出当前定义的所有变量,也包括 include 的文件中的变量,flag 也存在在这些变量中。
var_dump()函数:会返回数据变量的类型和值