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: flag在变量中
-
error_reporting(0): 设置 PHP 的报错级别并返回当前级别 (0):关闭错误报告
-
include “flag1.php”: include 语句包含并运行指定文件
-
highlight_file(file): highlight_file() 函数对文件进行语法高亮显示
-
$_GET: 变量用于收集来自 method=”get” 的表单中的值,直观的的就是浏览器中可以看到的参数
-
isset: 检测变量是否设置,并且不是 NULL
-
preg_match : 函数用于执行一个正则表达式匹配。
-
“/^\w+$/” : 正则表达式
^ 表示开头,是转义字符,使用时在前面加""
$ 表示结束,是转义字符,使用时在前面加""
\w 任意一个字母或数字或下划线,也就是 AZ,az,0~9,_ 中任意一个
这段正则表达式的意思就是字符全部由【AZ,az,0~9,_ 】组成,肯定不能为空
正则表达式 -
die() 函数输出一条消息,并退出当前脚本
-
eval() 函数把字符串按照 PHP 代码来计算。
-
var_dump() 函数用于输出变量的相关信息
重点
var_dump($$args);
中是两个$符号:PHP中变量可以当作另一个变量的变量名
我们只需要传入php中的全局变量即可: $GLOBALS:一个包含了全部变量的全局组合数组
即:
构造参数
http://123.206.87.240:8004/index1.php?args=GLOBALS