暑期练习web1:MISC web1(i春秋)

题目的hint:flag就在某六位变量中。
我们打开题目:


include "flag.php"; //包含flag.php这个文件
$a = @$_REQUEST['hello'];//$a这个变量请求变量hello的值
if(!preg_match('/^\w*$/',$a )){//正则表达式,匹配字符串,\w表示字符+数字+下划线,*代表有若干个\w字符组成。 
  die('ERROR');//不匹配则输出ERROR
}
eval("var_dump($$a);");//如果匹配输出\$\$a的值 
show_source(__FILE__);
?>

先来一波知识点普及:

  1. include”flag.php” :则表示已经固定flag.php,这时候我们要去寻找其他我们能控制的东西,比如a
  2. 而$_REQUEST则具有POST[] 和GET[]的功能,但是REQUEST[]比较慢。通过post和get方法提交的所有数据都可以通过REQUEST数组获得
  3. if语句中是一个正则匹配,^是这个表达式的起始符号;\w表示任意一个字符(a-z、0-9); * 表示匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。 * 等价于{0,};最后的$表示末尾。所以这个判断语句就是输入到a中,的如果全是字符,则为真
  4. var_dump:显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进的数组形式显示其结构,例如:


$a = array(1, 2, array("a", "b", "c"));
var_dump($a);
?>

以上例程会输出:

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }
}

5.这个

$$a

估计就有很多同学搞不懂,$$为可变变量,简单说下他的用法就是这样:

$a = "b";
$b = "c";
echo $$a;`

结果输出为c

由于这题涉及到了可变变量,所以我们很容易就想到了用超全局变量$GLOBALS一次性查询所有的东西
给hello赋值后得到flag
暑期练习web1:MISC web1(i春秋)_第1张图片
总结:这题本身难度不大,主要是涉及到了许多陌生的东西,而且,不能看到flag.php就一股脑的想文件包含那些的去了,总之还是学到了许多东西

你可能感兴趣的:(ctf,web)