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

ops/2024/9/25 2:57:35/

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

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.ppmy.cn/ops/111949.html

相关文章

接口测试系列文章专题

在你眼中什么是接口 HTTP协议 什么是接口测试 接口测试之工具 fiddler工具的原理 fiddler工具界面详解 fiddler工具的基本使用 fiddler使如何对手机app进行抓包的呢 fiddler手机app抓包教程 Charles自定义接口返回的数据内容 常用接口工具postman的基本使用方式 pos…

什么是上拉,下拉?

上拉就是将引脚通过一个电阻连接到电源&#xff0c;作用&#xff1a;1.使IO口的不确定电平稳定在高点平&#xff0c;2、为了增加IO口拉电流的能力。 下拉就是将引脚通过一个电阻与GND相连&#xff0c;作用&#xff1a;1.从器件输出电流 2.当IO口为输入状态时&#xff0c;引脚的…

TCP 拥塞控制:一场网络数据的交通故事

从前有条“高速公路”&#xff0c;我们叫它互联网&#xff0c;而这条公路上的车辆&#xff0c;则是数据包。你可以把 TCP&#xff08;传输控制协议&#xff09;想象成一位交通警察&#xff0c;负责管理这些车辆的行驶速度&#xff0c;以防止交通堵塞——也就是网络拥塞。 第一…

软件测试学习笔记丨Docker 安装、管理、搭建服务

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32192 容器&#xff08;Docker&#xff09;技术的价值 保证环境一致性&#xff0c;只要使用相同镜像部署就可以保证一致性。轻量级虚拟化访问&#xff0c;运行更快&#xff0c;资源更小。同时…

MAVEN如何导入项目

工作中经常需要导入他人的项目&#xff0c;那么如何导入呢&#xff1f; 1&#xff0c; 选择Maven面板&#xff0c;点 2&#xff0c;选中对应项目的pom.xml&#xff0c;双击即可 3&#xff0c;如果没有maven面板&#xff0c;可以选择view->Appearnce->Tool Window Bars…

Gitea Action 简单配置(CI/CD)

线上pipeline,&#xff08;我使用是本地仓库的&#xff0c;你们使用切换成官网的即可&#xff09; # 工作流的名称name: Build and Push Docker Image deployment-k8s# 触发条件&#xff0c;只在 master 或 main 分支发送推送时触发 on:push:branches:- main# 作业&#xff0c…

江协科技STM32学习- P13 TIM定时器中断

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

★ C++进阶篇 ★ 多态

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C进阶篇第一章----多态 ~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页&#xff1a;椎名澄嵐-CSDN博客 C基础篇专栏&#xff1a;★ C基础篇 ★_椎名澄嵐的博客-CSDN博客 …