在本节中,将讨论什么是服务器端模板注入,并概述利用服务器端模板注入漏洞的基本方法。另外还将提出一些方法,确保模板的使用不会暴露在服务器端模板注入中。
什么是服务器端模板注入?
服务器端末班注入是指攻击者能够使用本地模板语法将恶意的payload注入到模板中,然后在服务器端执行。
模板引擎旨在通过将固定模板与变化数据相结合来生成网页。当用户的输入直接连接到模板中而不是作为数据传入时,可能会发生服务器端模板注入攻击。
这使得攻击者能够注入任意模板指令来操纵模板引擎,从而能够完全控制服务器。
顾名思义,服务器端模板注入的payload是在服务器端传递和使用的,这就比典型的客户端模板注入更危险。
SaaS的出现使得一些模板库可以直接“暴露”在互联网上,这些看似非常有限的模板库其实比许多开发者想象的要强大很多。
服务器端模板注入的影响是什么?
服务器端模板注入漏洞会使网站受到各种攻击,这跟所涉及的模板引擎以及应用程序如何使用它们有关。在某些情况下,这些漏洞不会构成真正的安全风险。
然后,在大多数时候,服务器端模板注入的影响可能是灾难性的。
在比较严重的情况下,攻击者可以实现远程代码执行,完全控制后端服务器并利用它对内部基础设施进行其他攻击。
即使在不能远程执行代码的情况下,攻击者往往任然可以利用服务器端模板注入作为许多其他攻击的基础,并有可能获得对服务器上敏感数据和任意文件的读取权限。
服务器端模板注入漏洞是如何产生的?
当用户的输入被连接到模板中而不是作为数据传入时就会出现服务器端模板注入漏洞。
简单地提供动态内容呈现到其中占位符的静态模板通常不易收到服务器端模板注入的攻击。最典型的例子是一封电子邮件,通过名字来遍历每个用户,例如下面Twig模板的摘录:
$output = $twig->render("Dear {first_name},", array("first_name" => $user.first_name) );
这不会受到服务器端模板注入的影响,因为用户的名字只是作为数据传入模板。
然后,由于模板只是字符串,Web开发人员有时会在渲染之前直接将用户输入的输入连接到模板中。举一个类似于上面的例子,只不过这次,用户可以在发送电子邮件之前自定义电子邮件的部分内容,比如可以选择使用的名称:
$output = $twig->render("Dear " . $_GET['name']);
在这个例子中,不是将静态值传递到模板中,而是使用GET参数名称动态生成模板本身的一部分。由于模板语法是在服务器端计算的,这潜在地允许攻击者在name参数中放置一个服务器端模板注入的payload,如下所示:
http://vulnerable-website.com/?name={{bad-stuff-here}}
像这样的漏洞有时是由于不熟悉安全问题的人在设计模板时不小心造成的。就像上面的例子,可能会看到不同的组件,其中一些包含用户输入,并将其连接嵌入到模板中。
从某些方面来说,这类似于编写糟糕的语句中出现的SQL注入漏洞。
然后,有时这种行为实际上是有意的。例如一些网站故意允许某些有特权的用户(如内容编辑人员),通过设计编辑来提交定制模板。但如果攻击者能够盗取这些特权的账户,这显然会带来巨大的安全风险。
编程语言对应的潜在模板引擎
目前,已经存在大量的模板库。实际上,可以在每种编程语言中找到几十个库,在实践中,如果把自己限制在最流行的库中,当知道使用的语言时,就可以将注意力集中在2到3个潜在库上,下面是对应的模板引擎表:
如何预防服务器端模板注入漏洞?
防止服务器端模板注入的最好方法是不允许任何用户修改或提交新版本。但是,由于业务需要是不可能完全禁止的。
避免引入服务器端模板注入漏洞最简单的方法是,除非绝对必要,否则总是使用“无逻辑”的模板引擎,如Mustache。尽可能地将逻辑与演示分离,可以大大减少最危险的基于模板攻击的暴露。
另一项措施是只在沙盒环境中执行用户地代码,在这种环境中,潜在的危险模块和功能已被完全删除。但问题是,对不受信任的代码进行沙盒处理本身就很困难,而且容易被绕过。
最后,还有一种措施,由于接受任意代码执行是不可避免的,那么比方说通过在锁定的Docker容器中部署模板环境来应用自己的沙箱也是一种方法。
SSTI检测工具Tplmap
Tplmap是一个python工具,可以通过使用沙箱转义技术找到代码注入和服务器端模板注入(SSTI)漏洞。该工具能够在许多模板引擎中利用SSTI来访问目标文件或操作系统。一些受支持的模板引擎包括PHP(代码评估),Ruby(代码评估),JaveScript(代码评估),Python(代码评估),ERB,Jinja2和Tornado。该工具可以执行对这些模板引擎的盲注入,并具有执行远程命令的能力。
工具地址:
https://github.com/epinna/tplmap
安装教程:
https://www.cnblogs.com/ktsm/p/15691652.html
使用教程:
https://blog.csdn.net/EC_Carrot/article/details/109709767
SQL注入攻击-检索隐藏的数据
HTTP Host头漏洞攻击-概念梳理
原文始发于微信公众号(H君网安白话):服务器端模板注入(SSTI)-概念梳理
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论