Spirit CTF 2023 热身赛题解 - www
#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
总体逻辑是酱:
- 可控参数为
ww
和www
w
要求ww
为字符串,且只包含字母和数字www
不能超过六个字符www
被eval
疑点:
ww
并未被使用(这算不算hint#0呢qwq)
目的是调用phpinfo
(hint#1),考虑到长度限制,ww
得用到。于是可以构造$www = '$ww();'
以及$ww = 'phpinfo';
,这样就能调用到phpinfo
了。
这里利用了php
的一个叫做可变函数的特性(hint#2),可以通过变量后跟括号的方式执行变量包含的函数名对应的函数。
/?ww=phpinfo&www=$ww();
flag在环境变量里~