「配枪朱丽叶。」

RootのCTF学习笔记。

RCTF2019Web-nextphp(暂未完成)

开局一篇简短的代码

<?php
if (isset($_GET['a'])) {
    eval($_GET['a']);
} else {
    show_source(__FILE__);
}

尝试构造/?a=phpinfo();
得到禁用函数如下:

set_time_limit,ini_set,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,system,exec,shell_exec,popen,proc_open,passthru,symlink,link,syslog,imap_open,ld,mail,putenv,error_log,dl

最主要的system,exec,shell_exec,popen,proc_open,passthru等被禁用了,无法读取文件。
通过学习glob()函数,掌握了一个绕过姿势:

/?a=print_r(glob("*"));

返回:Array ( [0] => index.php [1] => preload.php)
读取preload.php里的内容

?a=show_source("preload.php");

 <?php
final class A implements Serializable {
    protected $data = [
        'ret' => null,
        'func' => 'print_r',
        'arg' => '1'
    ];

    private function run () {
        $this->data['ret'] = $this->data['func']($this->data['arg']);
    }

    public function __serialize(): array {
        return $this->data;
    }

    public function __unserialize(array $data) {
        array_merge($this->data, $data);
        $this->run();
    }

    public function serialize (): string {
        return serialize($this->data);
    }

    public function unserialize($payload) {
        $this->data = unserialize($payload);
        $this->run();
    }

    public function __get ($key) {
        return $this->data[$key];
    }

    public function __set ($key, $value) {
        throw new \Exception('No implemented');
    }

    public function __construct () {
        throw new \Exception('No implemented');
    }
}

因为太菜了做到这我要哭了T T又了解了新姿势。
phpinfo()中有:

opcache.preload = /var/www/html/preload.php
这是是 PHP 7.4的新特性,可以利用其在服务器启动时加载一些类和函数,然后就可以在之后如同 PHP 的内部实体一样直接调用。

官方文档里写道:

In conjunction with ext/FFI (dangerous extension)

phpinfo里搜索了一哈也开了这个扩展。
戳我深入了解一下FFI
后面没太弄懂,先马克师傅们的wp,过两天补上:
RCTF 2019 web - p0pl4r - 博客园
RCTF 2019 Web Writeup - 先知社区