CVE-2018-19127漏洞分析
2019-07-30 18:54:36 Author: mp.weixin.qq.com(查看原文) 阅读量:53 收藏

山东新潮信息

专业|专注|卓越|安全

声明:Tide安全团队原创文章,转载请声明出处!文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

一、    漏洞背景

2018年11月,国家信息安全漏洞共享平台(CNVD)安全公告,PHPCMS 2008版本的/type.php远程GetShell 0day利用攻击,攻击者利用该漏洞,远程通过代码注入,可在未经授权的情况下,向网站上路径可控的缓存文件写入任意内容,进而可能在目标网站上植入后门,实现在未经授权的情况下,对目标网站进行远程命令执行攻击等一系列严重问题。这个漏洞由阿里云安全首次捕获。

二、    漏洞概要

谁应该读这个  PHPCMS 2008的开发者和用户  
漏洞的影响  主要利用/type.php构造payload实现任意文件写入  
危害程度  高危  
建议  升级到官方最新版本。  
受影响的软件  PHPCMS2008SP4版本及以下  
CVE标识符  CVE-2018-19127  

三、    搭建环境

安装漏洞影响范围内的PHPCMS2008版本。

四、    触发条件

检查PHPCMS的版本号是否为受影响版本。

五、    漏洞分析

首先对phpcms目录下的type.php进行分析,发现type.php包含了template变量,template变量是用户能够通过传入参数控制的,同时可以看到该变量之后会被传入template()方法。而template()方法在/include/global.func.php文件中定义,包含如下代码:

$template变量在这里是完全可控的,且默认开启模版缓存自动刷新。当template变量输入为

template=tag_(){};@unlink(FILE);assert($_POST[1]);{//../rss时,$compiledtplfile=”data/cache_template/phpcmstag(){};@unlink(FILE);assert($_POST[1]);{//../rss.tpl.php” .此时,可自然进入判断 ,调用template_compile函数,次函数定义在include/template.func.php。

在templatecompile函数中,$template变量是我们可控的,而$content变量当我们的输入为”template=tag(){};@unlink(FILE);assert($_POST[1]);{//../rss”自然会选择前者,而content内容中$template变量可控,最后file_put_contents函数写入任意代码,需要注意的是,file_put_contents路径为data/cache_template/phpcmstag(){};@unlink(FILE);assert($_POST[1]); {//../rss.tpl.php时,php会将其路径解析为data/cache_template/rss.tpl.php。

六、    修复建议

临时解决可以在/type.php文件中对template变量进行过滤,避免用户输入的含有”(“、”{“等符号的内容混入,并被当做路径和脚本内容处理。

PHPCMS 2008 官方已不再维护,建议升级到 2008 以上的版本(包括PHPCMS V9等):http://www.phpcms.cn/v9/。

七、    参考链接

https://www.yunaq.com/news/5bfe2bea796db4113efa3a80/

https://yq.aliyun.com/articles/673603

http://cve.mitre.org/cgi-bin/cvename.cgi?name=2018-19127

E

N

D

gūan

zhù

men

Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,目前聚集了十多位专业的安全攻防技术研究人员,专注于网络攻防、Web安全、移动终端、安全开发、IoT/物联网/工控安全等方向。

想了解更多Tide安全团队,请关注团队官网: http://www.TideSec.net 或长按二维码关注公众号:


文章来源: https://mp.weixin.qq.com/s/GbIDbXUQ4tuxo_ysiFoEgg
如有侵权请联系:admin#unsafe.sh