BUGKU-变量1
1、打开一道题,发现源码展示,先看源码
flag In the variable ! <?php
error_reporting(0);
include "flag1.php"; //// 引入flag1.php文件代码
highlight_file(__file__);
if(isset($_GET['args'])){ // 通过get方式传递 args变量才能执行if里面的代码
$args = $_GET['args'];
if(!preg_match("/^\w+$/",$args)){ // 这个正则表达式的意思是匹配任意 [A-Za-z0-9_] 的字符,就是任意大小写字母和0到9以及下划线组成
die("args error!");
}
eval("var_dump($$args);"); //此函数显示一个或多个表达式的信息,包括表达式的类型与值
}
?>
2、本题涉及的一些基础知识
get型传参,args要满足正则匹配的内容
-
^
:匹配输入字符串的开始位置 -
\w
:包含下划线的任意单词字符字符 -
+
:匹配前面的子表达式一次或多次 -
$
:匹配输入字符串的结束位置
isset: 用于检测变量是否已设置并且非 NULL。
prep_match: 用于执行一个正则表达式匹配。
error_reporting(0)关闭错误显示。
include “flag.php”页面包含flag.php页面。
highlight_file(_file_)页面进行语法高亮显示。
3、解题思路
flag In the variable ! 提示 flag 在变量中
根据!preg_match("/^\w+$/",$args)
得知,arg只能是任意字母,数字,下划线,汉字的字符组成
使用GLOBALS得到全部变量