美文网首页
bugku_ctf, web第10题 变量1

bugku_ctf, web第10题 变量1

作者: 飞速遗忘 | 来源:发表于2020-04-20 09:56 被阅读0次

    题目

    flag In the variable ! <?php  
    
    error_reporting(0);
    include "flag1.php";
    highlight_file(__file__);
    if(isset($_GET['args'])){
        $args = $_GET['args'];
        if(!preg_match("/^\w+$/",$args)){
            die("args error!");
        }
        eval("var_dump($$args);");
    }
    ?>
    

    分析

    • 题目提示 : flag In the variable !
    • 分析代码
      要求输入变量args, 然后正则匹配args只能出现字母数字和下划线, 然后将args中的字符作为变量名用vardump查看其值.
    ?args=flag
    ?args=flag1
    

    测试都提示NULL, 那么就查看一下所有变量即可.

    解题

    ?args=GLOBALS
    

    注意GLOBALS是关键字, 必须大写

    基础补充

    php知识

    • preg_match() : 正则匹配函数, 第一个参数位正则表达式, 第二个参数是需要进行匹配操作的字符串, 在第一次匹配后返回0次, 或1次, 也就是0和1分别代表无匹配和匹配一次
    • eval() : 属于危险函数, 将输入的字符串作为命令来执行
    • vardump() : 看名字就可以了解其大意, 输出变量的信息
    • $GLOBALS : php预定义变量, 当前页保存的所有全局变量信息

    正则表达式

    • /开始和结束, 如/[0-9]/, 结尾的/后面还可以加参数
    • 关键字\w : 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'
    • + : 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}
    • ^$: 分别匹配字符串的开始和结束位置
      则该题中的表达式/^\w+$/的含义为 : 从开始到结束之间出现字母,数字或下划线(即不能出现这三种以外的字符) 的字符串, 将会被匹配到.

    相关文章

      网友评论

          本文标题:bugku_ctf, web第10题 变量1

          本文链接:https://www.haomeiwen.com/subject/qqrlihtx.html