一. 分析代码
代码解读:
preg_match用于执行一个正则表达式匹配。
eval() 函数把字符串按照 PHP 代码来执行。
var_dump() 打印变量的相关信息
[\w+]表示匹配数字、字母、下划线和加号本身字符
二. 解题思路
用户可控的变量只有args,但是经过了过滤,只允许是数字,字母与下划线的组合。
这里我们看到eval("var_dump($
a
r
g
s
)
;
"
)
;
语
句
中
,
v
a
r
d
u
m
p
中
的
变
量
有
两
个
args);");语句中,var_dump中的变量有两个
args);");语句中,vardump中的变量有两个符,说明var_dump中的变量名由
a
r
g
s
指
定
,
而
题
目
提
示
说
f
l
a
g
在
变
量
里
,
考
虑
到
可
以
利
用
args指定,而题目提示说flag在变量里,考虑到可以利用
args指定,而题目提示说flag在变量里,考虑到可以利用GLOBALS变量。
访问http://114.67.246.176:16937/?args=GLOBALS 就得到flag
三. 考题要点
1.代码执行漏洞
2.$GLOBALS — 是一个数组,包含了全局作用域中可用的全部变量。变量的名字就是数组的键。