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

Mac中Twig模版安装与SSTI漏洞学习

感谢大佬的文章参考学习。

SSTI:https://www.cnblogs.com/bmjoker/p/13508538.html

Homebrew:快速开始 - Homebrew 中文网

Homebrew安装

一键快捷安装:默认使用中科大的源
/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"

如果命令执行中卡在下面信息:

==> Tapping homebrew/core
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core'...

Control + C中断脚本执行如下命令:

cd "$(brew --repo)/Library/Taps/"
mkdir homebrew && cd homebrew
git clone https://mirrors.ustc.edu.cn/homebrew-core.git

成功执行之后重新执行安装命令。

Homebrew 4.0 版本后默认JSON API获取仓库信息,因此在大部分情况下都不再需要处理下面的cask

安装cask 同样也有安装失败或者卡住的问题,解决方法也是一样:

cd "$(brew --repo)/Library/Taps/"
cd homebrew
git clone https://mirrors.ustc.edu.cn/homebrew-cask.git

成功执行之后重新执行安装命令。

/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"

brew --version 验证是否成功安装

brew update 更新 # 这一步一定要做,不然安装可能会很慢

如果遇到 command not found brew,请执行下面脚本完成安装或者直接重新打开终端:

eval "$(/opt/homebrew/bin/brew shellenv)"

Homebrew安装转载来自快速开始 - Homebrew 中文网

 

安装Twig模版

(1)添加php仓库

brew tap shivammathur/php

(2)安装php

brew install php

(3)检验php是否成功安装

php -v

(4)安装composer

composer 是php的依赖管理工具,Twig需要composer来安装

brew install composer

检验composer是否成功安装 

composer --version

 

(5)切换phpstrom的php环境为8.3

上面有写我们的路径按照自己执行出来的路径在phpstrom页面输入command+,进入设置

切换自己的解释器即可

(6)初始化 composer项目

composer init

按照提示一步一步进行初始化

几个难懂的初始化选项:

# 一开始会让选择工作项目目录这里自己创建一个把绝对路径写上去即可

Minimum Stability []: 定义在安装依赖时所接受的最小稳定性级别,建议选择stable

Package Type (e.g. library, project, metapackage, composer-plugin) []: 选project即可

Lisense:CC BY 4.0

Would you like to define your dependencies (require) interactively [yes]?yes

Search for a package: twig

Enter package # to add, or the complete package name if it is not listed: twig/twig:1.42.5

Enter the version constraint to require (or leave blank to use the latest version): 回车即可

再次出现Search for a package: 直接回车即可

composer install直接一路按照提示不用再额外装东西了全部拒绝即可

Add PSR-4 autoload mapping? Maps namespace "Da\Twig" to the entered relative path. [src/, n to skip]: n

安装完成之后

composer dump-autoload 重新加载配置文件

我们选用1.42.5版本的twig即可

以后我们创建工作目录可以直接

# 进入项目目录
cd /Users/dw/PhpstormProjects/Twig

# 删除现有的 Twig
composer remove twig/twig

# 安装指定版本的 Twig
composer require twig/twig:1.42.5

类似于这样就可以

测试Twig模版

我们创建一个测试模版的文件,注意由于1.42.5已经有很多函数都已经弃用了,我们需要屏蔽弃用警告就可以了。

<?php
error_reporting(E_ALL & ~E_DEPRECATED);
require_once dirname(__FILE__) . '/vendor/twig/twig/lib/Twig/Autoloader.php';
Twig_Autoloader::register(true);

$twig = new Twig_Environment(new Twig_Loader_String());
$output = $twig->render("Hello {{name}}", array("name" => isset($_GET["name"]) ? $_GET["name"] : 'World'));  // 将用户输入作为模版变量的值

echo $output;
?>

 

可以看到这样的模版是没有注入的 模版引擎一般都默认对渲染的变量值进行编码和转义,所以并不会造成跨站脚本攻击(xss)

<?php
error_reporting(E_ALL & ~E_DEPRECATED);
require_once dirname(__FILE__) . '/vendor/twig/twig/lib/Twig/Autoloader.php';
Twig_Autoloader::register(true);
$twig = new Twig_Environment(new Twig_Loader_String());
$output=$twig->render("Hello {$_GET['name']}");// 将用户输入作为模版内容的一部分
echo $output;?>

但是如果我们直接将用户传入的数值作为模版的数值就会产生XSS漏洞造成SSTI攻击

 

由此可知如果在我们开发的时候出现没有将某个传参作为变量输入而是直接传入模版时很有可能产生SSTI漏洞。

试一下XSS呢? 

可以看到成功弹出。

如果服务端将用户的输入作为了模板的一部分,那么在页面渲染时也必定会将用户输入的内容进行模版编译和解析最后输出。

由此可见SSTI产生的原因可能就是因为服务端将用户输入作为了模版的一部分,导致用户输入和模版一起编译解析输出了。

在大多数模版中都符合

1. {{ }}

	•	用途:用于输出变量的值。
	•	示例:{{ user.name }} 会渲染出 user 对象的 name 属性值。

2. {% %}

	•	用途:用于执行逻辑操作,如循环、条件判断、宏等。
	•	示例:{% if user.is_admin %} Admin {% endif %} 用于根据 user 对象的 is_admin 属性来判断是否输出 “Admin”。


3. {# #}

	•	用途:用于注释,注释内容不会被渲染到输出中。
	•	示例:{# This is a comment #} 在模板渲染时不会显示。

4. {{% %}} 和 {%{{ }}}

	•	用途:某些模板引擎可能会使用变体来混合变量输出和逻辑控制,不过这些用法较少见,并且可能取决于特定的模板引擎和其实现。
	•	示例:这通常不是标准语法,但在某些自定义模板引擎中,可能会看到这些变体。
5. 其他常见标记

	•	Jinja2(Python):
	•	{{ variable }}:输出变量。
	•	{% for item in items %} ... {% endfor %}:循环。
	•	{% if condition %} ... {% endif %}:条件判断。
	•	Mustache:
	•	{{ variable }}:输出变量。
	•	{{#section}} ... {{/section}}:循环或条件。
	•	Handlebars:
	•	{{ variable }}:输出变量。
	•	{{#if condition}} ... {{/if}}:条件判断。
	•	{{#each items}} ... {{/each}}:循环。

于此Twig模版搭建完成并顺便简单说明了Twig模版中SSTI漏洞产生的原因:服务端将用户的输入作为了模板的一部分,并且在解析模版时将用户输入一并解析。


http://www.kler.cn/news/305698.html

相关文章:

  • 探索Go语言中的随机数生成、矩阵运算与数独验证
  • 【隐私计算】Cheetah安全多方计算协议-阿里安全双子座实验室
  • java的内存分配和回收机制
  • openssl的使用
  • opencv使用videocapture打开视频时,依赖opencv_ffmpeg***.dll,默认必须放到执行目录,自定义目录需要重新编译opencv库
  • 【R语言】删除数据框中所有行中没有大于200的数值的行
  • EasyExcel 快速入门
  • AMD 宣布统一 GPU 架构为 UDNA
  • lvs-dr模式实验详解
  • 看Threejs好玩示例,学习创新与技术(三)
  • PPT技巧:如何在幻灯片中生成目录?
  • 在grafana上配置显示全部node资源信息概览
  • 如何在YoloV8中添加注意力机制(两种方式)
  • GIS在线监测SF6密度微水传感器免焊接格兰头航插插头
  • Mac 上终端使用 MySql 记录
  • 绩效考核自动化:SpringBoot月度管理
  • ubuntu24.04 lts 更新后无法登录, 更新前待机无法恢复.
  • Qt Model/View之代理
  • 排序《数据结构》
  • 面试问题001
  • 力扣第200题 岛屿数量
  • 前端工程化3:使用lerna管理多包
  • 一图读懂 若依后端
  • JavaScript web API part3
  • PCIe进阶之TL:Address Spaces, Transaction Types, and Usage
  • Java多线程1
  • Android13 Launcher3屏蔽桌面指示器
  • 外包干了半年,快要废了。。。
  • 【c++】类和对象详解
  • React18快速入门