题目
flag In the variable ! <?php
error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
$args = $_GET['args'];
if(!preg_match("/^\w+$/",$args)){
die("args error!");
}
eval("var_dump($$args);");
}
?>
分析
- 题目提示 :
flag In the variable !
- 分析代码
要求输入变量args
, 然后正则匹配args
只能出现字母数字和下划线, 然后将args中的字符作为变量名用vardump
查看其值. - 用
?args=flag
?args=flag1
测试都提示NULL
, 那么就查看一下所有变量即可.
解题
?args=GLOBALS
注意GLOBALS
是关键字, 必须大写
基础补充
php知识
-
preg_match()
: 正则匹配函数, 第一个参数位正则表达式, 第二个参数是需要进行匹配操作的字符串, 在第一次匹配后返回0次, 或1次, 也就是0和1分别代表无匹配和匹配一次 -
eval()
: 属于危险函数, 将输入的字符串作为命令来执行 -
vardump()
: 看名字就可以了解其大意, 输出变量的信息 -
$GLOBALS
: php预定义变量, 当前页保存的所有全局变量信息
正则表达式
- 以
/
开始和结束, 如/[0-9]/
, 结尾的/
后面还可以加参数 - 关键字
\w
: 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]' -
+
: 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,} -
^
和$
: 分别匹配字符串的开始和结束位置
则该题中的表达式/^\w+$/
的含义为 : 从开始到结束之间出现字母,数字或下划线(即不能出现这三种以外的字符) 的字符串, 将会被匹配到.
网友评论