BugkuCTF-Web9

    打开题目环境,代码如下:

    1. flag In the variable ! <?php
    2. error_reporting(0);
    3. include "flag1.php";
    4. highlight_file(__file__);
    5. if(isset($_GET['args'])){
    6. $args = $_GET['args'];
    7. if(!preg_match("/^\w+$/",$args)){
    8. die("args error!");
    9. }
    10. eval("var_dump($$args);");
    11. }
    12. ?>

    代码解析:

    flag in the variable: flag在变量中

    error_reporting(0): 设置 PHP 的报错级别并返回当前级别 (0):关闭错误报告

    include “flag1.php”: include 语句包含并运行指定文件

    highlight_file(file): highlight_file() 函数对文件进行语法高亮显示

    $_GET: 变量用于收集来自 method=”get” 的表单中的值,直观的的就是浏览器中可以看到的参数

    isset: 检测变量是否设置,并且不是 NULL

    preg_match : 函数用于执行一个正则表达式匹配。

    “/^\w+BugkuCTF-Web9-题目已修复 - 图1 表示结束,是转义字符,使用时在前面加””

    \w 任意一个字母或数字或下划线,也就是 AZ,az,0~9,_ 中任意一个

    这段正则表达式的意思就是字符全部由【AZ,az,0~9,_ 】组成,肯定不能为空

    die() 函数输出一条消息,并退出当前脚本

    eval() 函数把字符串按照 PHP 代码来计算。

    var_dump() 函数用于输出变量的相关信息

    根据提示,flag在变量里,猜想args很有可能是一个数组,应该想到的就是超全局变量args很有可能是一个数组,应该想到的就是超全局变量GLOBALS,它是用存储全局变量的,全局变量的值在这个超级全局变量里面是一个键值,全局变量可以通过$GLOBALS[index]访问。

    构造url:http://114.67.246.176:17478/?args=GLOBALS,获得flag。

    BugkuCTF-Web9-题目已修复 - 图2