首页 > 技术文章 > Bugku-6.变量1

Linkas 2021-08-03 16:59 原文

变量1 - Bugku CTF

代码审计

image-20210803163555032

get型传参,args要满足正则匹配的内容

  • ^:匹配输入字符串的开始位置

  • \w:包含下划线的任意单词字符字符

  • +:匹配前面的子表达式一次或多次

  • $:匹配输入字符串的结束位置

因此args只要是字母和下划线组成就行

令args=flag,但是flag变量不存在

image-20210803164406129

令args=args,输出了args的属性和内容

image-20210803164440552

因此,如果存在这个变量,就会输出这个变量的属性,因此,接下来应该用哪一个变量呢?

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

image-20210803165720092

推荐阅读