分析
漏洞出现在apps\home\controller\ParserController.php的parserIfLabel
函数,漏洞有关的代码在1835到1848行,其中1848行出现了eval
函数。
这段函数采用了两次正则匹配的过滤方式,第一次正则需要构造形如{pboot:if(payload)}{/pboot:if}
这样的字符串。
第二次正则需要payload中不能出现字母+()这样形式的函数,直接使用形如phpinfo(1)
的payload即可。
然后回溯函数可以看到parserIfLabel
函数被parserCommom
函数所引用,继续回溯可发现该函数出现在如图位置,其中可利用的位置非常多,前台的搜索、留言,后台的各项信息修改等位置都可以传参执行。
以下以留言板举例:
构造这样的留言表单提交,即可成功执行代码。
因其余位置任意代码执行利用同理,此处不再赘述。
修复
系统的高版本对此漏洞进行了修复,增加了安全校验过滤。