New BugKu web9

web9

bugku出了一个新的平台

出了挺久了

做到web9才想起来要写笔记

所以就从web9开始写了

进入环境

一窜英文

翻译过来就是flag在变量里

error_reporting函数的意思是屏蔽所有php的报错信息

包含flag.php文件

highlight_file(/file)高亮文件代码

<?php
if(isset($_GET['args'])){
    $args = $_GET['args'];
    if(!preg_match("/^/w+$",$args)){
        die("args error!");
    }
    eval("var_dump($$args);")
}
?>

代码大致意思是:

如果args的get请求不为空就$args等于args的get请求传过去的参数

再如果正则匹配如果传入的参数里有除了大小写字母以外的字符串,就打印args error的字符串

否则就执行打印$$args的相关信息。

此中的难点是$$args刚开始看的时候有点懵,查了一下有两个美元符的变量是可变变量

可变变量是php的一个特性

官方文档没有详情请看这

然后题目里说flag再变量里

然后这又是个可变变量

我太菜了,就使用了穷举法

把php所有的固定变量都试了一遍

然后全局变量就打印出了flag

补充:

** **这一题请教了一下老师,为什么用GLOBALS可以打印出flag

因为这一题已经给固定的几个变量设有指定的值了,而GLOBALS是包含了全局变量的全局组合数组,var_dump函数则把GLOBALS的详细信息打印出来,就相当于把包含了所有的变量的数组给打印出来

_GET是args

_POST是空

_COOKIE是空

** **_FILES是空

ZFkwe3就是flag