bugku web 变量1

打开环境,这里发现flag在变量中,那不就是要在变量中寻找flag嘛

解题思路

php代码解读

1.error_reporting(0); 这行代码设置错误报告级别为0,也就是禁用错误报告。

2.include “flag1.php”; 这行代码用于包含一个名为"flag1.php"的文件。

3.highlight_file(_file_); 这行代码用于将当前文件的源代码进行语法高亮并输出到浏览器。

4.die(“args error!”); 这行代码输出错误信息"args error!"并终止程序的执行。

5.if(isset($_GET[‘args’])){} 这个条件判断语句检查是否存在名为"args"的GET参数。如果存在,则执行后面的代码块。

6.$args = $_GET[‘args’]; 这行代码将GET参数"args"的值赋给变量$args。

明显的 get传参,而需要一个args参数来接受“ /?args=”

7.eval(“var_dump( $ $ args);”); 这行代码使用eval()函数将变量$args的值作为PHP代码执行,也就是通过var_dump()函数将$ args变量的值输出

eval函数是php中的危险函数,允许执行任意php代码

$$args表示以$args变量的值为变量名的变量(也就是$args的值应该是另一个变量的变量名)

8.if(!preg_match("/^\w+ / " , /", /",args)){ } :这个条件判断语句使用正则表达式检查$args变量的值是否符合\w+这个模式,也就是是否只包含字母、数字和下划线。如果不符合,则执行后面的代码块

/^\w+$/中

  • 两个/ / 表明正则表达式的开始与结束,
  • ^是开始字符,
  • $是结束字符,
  • \w 包含【a-z, A-Z, ,0-9】中的字符,
  • +代表可以有一个或多个。

 总的加起来意思就是 以[a-z,A-Z,,0-9]中的其中一个字符开始,中间可以有任意个[a-z, A-Z, ,0-9]字符,最后再以[a-z,A-Z,,0-9]中的一个字符结束 这是对args传入的参数的要求。题目这里就相当于以所有字母数字模式,匹配args变量。也就是说我们赋值的args变量的值(可能包含字母和数字)要出现在PHP文件中(但是我想不到是去找PHP文件中的变量)

要找变量只有尝试用全局变量,下面是php九大超级全局变量,然后一个一个尝试,会发现用GLOBALS该全局变量包括全局组合数组

1.$_POST [用于接收post提交的数据]
2.$_GET [用于获取url地址栏的参数数据]
3.$_FILES [用于文件就收的处理img (最常见)]
4.$_COOKIE [用于获取与setCookie()中的name 值]
5.$_SESSION [用于存储session的值或获取session中的值]
6.$_REQUEST [具有get,post的功能,但比较慢]
7.SERVER[是预定义服务器变量的一种,所有SERVER[是预定义服务器变量的一种,所有_SERVER [是预定义服务器变量的一种,所有_SERVER开头的都
8.$GLOBALS [一个包含了全部变量的全局组合数组]`变量的名字就是数组的键`[不出意外就是你啦]
9.$_ENV [ 是一个包含服务器端环境变量的数组。它是PHP中一个超级全局变量,我们可以在PHP 程序的任何地方直接访问它]

 传入?args=GLOBALS参数就可以得到1,php文件下的全局变量了,而flag就在其中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值