[新手入门] Bugku-变量1

[复制链接]
查看14315 | 回复0 | 2020-2-7 20:14:09 | 显示全部楼层 |阅读模式
首先看一下源码:
flag In the variable ! <?php   

error_reporting(0);                    // 关闭php错误显示
include "flag1.php";                   // 引入flag1.php文件代码
highlight_file(__file__);              //对文件进行语法高亮显示
if(isset($_GET['args'])){              // 条件判断 get方法传递的args参数是否存在
    $args = $_GET['args'];             //赋值给变量  $args
    if(!preg_match("/^\w+$/",$args)){  // /^开始, \w表示任意一个单词字符,即[a-zA-Z0-9_] ,+将前面的字符匹配一次或多次,$/结尾
        die("args error!");            //输出 args error!
    }
    eval("var_dump($$args);");         // 将字符串作为php代码执行结尾加分号 var_dump()函数 显示关于一个或多个表达式的结构信息,包括表达式的类型与 值。数组将递归展开值,通过缩进显示其结构。$$args 可以理解为$($args)
}
?>
$$args的意思是将变量$args的值作为一个变量
题目已经通过正则表达式对$args进行了过滤,不能上传一句话木马等思路
我们可以使用超全局变量$GLOBALS,因为PHP在$GLOBALS[index]数组中储存了所有全局变量,变量的名字就是数组的键;
var_dump($$args)=var_dump($GLOBALS),将所有的变量的以数组的方式输出,得到flag

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

27

主题

27

帖子

147

积分

小有名气

Rank: 3Rank: 3

积分
147