代码审计
get型传参,args要满足正则匹配的内容
-
^
:匹配输入字符串的开始位置 -
\w
:包含下划线的任意单词字符字符 -
+
:匹配前面的子表达式一次或多次 -
$
:匹配输入字符串的结束位置
因此args只要是字母和下划线组成就行
令args=flag,但是flag变量不存在
令args=args,输出了args的属性和内容
因此,如果存在这个变量,就会输出这个变量的属性,因此,接下来应该用哪一个变量呢?
PHP: $GLOBALS
很明显,我们可以用超全局变量
超全局变量是在全部作用域中始终可用的内置变量。
PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 来访问它们。
PHP设计者提供这些超全局数组的目的是为了让PHP程序员可以更方便快捷的编写程序
PHP中预定义超全局变量有:
-
$_GET : 通过 URL 参数传递给当前脚本的变量的数组。
-
$_POST : 通过 HTTP POST 方法传递给当前脚本的变量的数组
-
$_REQUEST :
-
$_SERVER: 主要包含了Http请求行和消息头的信息,同时还有服务器自己的一些信息,比如DOCUMENT_ROOT, SCRIPT_FILENAME ..
-
$_ENV : 当我们希望获取服务器端的环境信息时,可以使用 $ENV
-
$_FILES : 与文件上传相关
-
$_COOKIE : 与COOKIE 相关
-
$_SESSION : 与SESSION相关
-
$GLOBALS : 一个包含了全部变量的全局组合数组。变量的名字就是数组的键,同时一个自定义的全局变量,也会自动的被$GLOBALS 管理
与所有其他超全局变量不同,$GLOBALS在PHP中总是可用的。
因此使用万能的$GLOBALS,获得flag