www.md

#Web #PHP #可变函数 #bypass

/
<?php
error_reporting(0);
highlight_file(__FILE__);
$w = function ($ww) {
    if (!is_string($ww)) {
        die('www');
    }
    if (preg_match('/[^a-zA-Z0-9]/', $ww)) {
        die('www');
    }
    return $ww;
};

if (!isset($_GET['ww'])) {
    die('www');
}
$ww = $w($_GET['ww']);

if (!isset($_GET['www'])) {
    die('www');
}
$www = $_GET['www'];

if (strlen($www) > strlen('www' . 'www')) {
    die('www' . 'www');
}
eval($www);
www

总体逻辑是酱:

  1. 可控参数为wwwww
  2. w要求ww为字符串,且只包含字母和数字
  3. www不能超过六个字符
  4. wwweval

疑点:

目的是调用phpinfo(hint#1),考虑到长度限制,ww得用到。于是可以构造$www = '$ww();'以及$ww = 'phpinfo';,这样就能调用到phpinfo了。

这里利用了php的一个叫做可变函数的特性(hint#2),可以通过变量后跟括号的方式执行变量包含的函数名对应的函数。

/?ww=phpinfo&www=$ww();

flag在环境变量里~