BugkuCTF-Web9
打开题目环境,代码如下:
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() 函数用于输出变量的相关信息
根据提示,flag在变量里,猜想args很有可能是一个数组,应该想到的就是超全局变量args很有可能是一个数组,应该想到的就是超全局变量GLOBALS,它是用存储全局变量的,全局变量的值在这个超级全局变量里面是一个键值,全局变量可以通过$GLOBALS[index]访问。
构造url:http://114.67.246.176:17478/?args=GLOBALS,获得flag。