拿到题目后是一串PHP代码,给到提示是flag在变量中,接下来进行代码审计
error_reporting(0):关闭错误报告
include “flag1.php”:包含flag1.php文件
highlight_file(_file_):页面进行语法高亮显示
isset($_GET[‘args’]):判断有没有用get方法传一个args的参数,如果有才执行以下的if语句
preg_match()正则表达式匹配函数
/^\w+$/,\w表示任意一个数字、字母或下划线,+匹配前面的子表达式一次或多次,^和$用在一起表示整行匹配
var_dump()以更易识别的方式输出变量的类型和值
eval()函数将字符串当成php代码执行
$$args是一个可变变量,将$args的值当成另外一个变量的名称,所以给$args传递值就$$args就可以表示另外一个变量
我是这样理解的
因为源码已经提示了,flag在变量中,然后这里使用的GET的方式接受变量,又做了正则匹配,意思就是说如果传入的参数不是以字符,数字和下划线组成的就输入args error
理解完构造,因为提示说flag都存在于变量中,在PHP里有一堆预定义变量,是可以直接拿来使用的,预定义变量$GLOBALS就包含了当前脚本中已经定义的所有变量
所以我们可以构造?args=GLOBALS来回显当前脚本的所有变量信息
获得flag