Bugku---web---变量1

本文讲述了在BugkuCTF中的一个代码挑战,通过分析包含错误处理和正则验证的PHP脚本,发现关键在于理解超全局变量如$_GET、$_POST等的作用,最终利用$GLOBALS找到隐藏的flag。
摘要由CSDN通过智能技术生成

题目出处:首页 - Bugku CTF 

✨打开链接后你将会看到一段代码,如下所示:

✨首先,第一句话就提示你,flag就在这段代码中!!!

✨其次,对这段代码进行分析!!!

  1. error_reporting(0);:这行代码是用来关闭错误报告的,这样在执行脚本时就不会显示任何错误信息。

  2. include "flag1.php";:这行代码是用来包含一个名为"flag1.php"的文件。这个文件可能包含了一些重要的设置或者变量。

  3. highlight_file(__file__);:这行代码是用来高亮显示当前文件的源代码。__file__是一个魔术常量,它返回当前文件的路径。

  4. if(isset($_GET['args'])){...}:这是一个条件判断语句,它检查是否设置了名为'args'的GET请求参数。如果设置了,就执行大括号内的代码。

  5. $args = $_GET['args'];:这行代码将GET请求参数'args'的值赋给变量$args。

  6. if(!preg_match("/^\w+$/",$args)){...}:这是另一个条件判断语句,它使用正则表达式检查$args是否只包含字母、数字和下划线。如果不是,就执行大括号内的代码。

  7. die("args error!");:这行代码用于终止脚本的执行,并输出一条错误信息"args error!"。

 ✨接下来,你就应该了解到args应该满足的正则匹配的内容是!!!

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

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

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

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

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

     ✨所以我令args=flag,竟然发现NULL!!!

       ✨然后我令args=args,又发现输出了args的属性和内容---string(4) "args"!!!

 ✨最后就该考虑应该用哪一个变量了!!!

  • PHP中预定义超全局变量有:

        $_GET : 通过 URL 参数传递给当前脚本的变量的数组。

        $_POST : 通过 HTTP POST 方法传递给当前脚本的变量的数组

        $_REQUEST :是 PHP 中的一个超全局变量,它包含了通过 HTTP GET、POST 和 COOKIE 方法发送的所有变量。

        $_SERVER: 主要包含了Http请求行和消息头的信息,同时还有服务器自己的一些信息,比如DOCUMENT_ROOT, SCRIPT_FILENAME ..

        $_ENV : 当我们希望获取服务器端的环境信息时,可以使用 $ENV

        $_FILES : 与文件上传相关

        $_COOKIE : 与COOKIE 相关

        $_SESSION : 与SESSION相关

        $GLOBALS : 一个包含了全部变量的全局组合数组。变量的名字就是数组的键,同时一个自定义的全局变量,也会自动的被$GLOBALS 管理

       发现GLOBALS这个超全局变量(它在php中的作用还是很大的,记住这个变量,在bugku中做题会常用到),然后我就一试!!!

OK  !!!     成功找出flag

  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值