8
月
在社区成长 8 月
LEVEL 90
100 XP
Web 应用程序通常使用模板引擎通过将静态模板与运行时数据相结合来动态生成网页。虽然模板引擎使开发更快、更干净,但如果实施不当,它们也会带来严重的安全风险。
其中一个风险是服务器端模板注入(SSTI),这是一种在将不受信任的用户输入直接嵌入模板时出现的漏洞。通过利用本机模板语法,攻击者可以注入在服务器上执行的恶意负载。
由于模板是在服务器端处理的,因此SSTI 攻击可能比客户端注入危险得多,可能导致远程代码执行、数据盗窃,甚至整个系统受损。
一些流行的模板引擎包括:
PHP: 聪明,树枝
Java: 速度、FreeMarker
Python: Jinja2、Mako、龙卷风
JavaScript: 玉,愤怒
Ruby: 液体
当这些引擎被滥用(直接将用户输入合并到模板中)时,就会出现SSTI 漏洞。
在极端情况下,攻击者可能会成功执行远程代码,夺取后端服务器的完全控制权,并利用它对内部架构发起其他攻击。
攻击者可以经常利用服务器端模板注入作为各种不同攻击的基础,即使无法完全执行远程代码,也可能获得对服务器上敏感数据和任意文件的读取访问权限。
${"aaaa"} – "aaaa" ${99999+1} – 100000#{7*7} – 49${{7*7}} – 49${{request}}, ${{session}}, {{faceContext}}发现弱点是利用的第一步,就像任何漏洞一样。最简单的初始策略可能是尝试通过插入模板表达式中经常出现的特殊字符字符串,例如多语言${{%[%’”}}%\。您应该检查参数上普通数据的响应与提供的有效负载之间的差异,以确定服务器是否容易受到攻击。如果抛出错误,确定服务器的漏洞甚至正在运行的引擎将很容易。
但是,如果您希望服务器反映给定的有效负载但它没有被反映,或者响应中缺少一些字符,您也可能会找到易受攻击的服务器。
检测代码上下文
在某些情况下,用户输入包含在模板表达式: engine.render 中。 (“Hello, {{“+greeting+”}}”, data)。类似于此的URL 可能用于访问该页面: http://vulnerable-website.com/?gree...able-website.com/?greeting=data.usernamehello 的内容,则会返回用户名。如果在这些测试期间抛出错误,那么识别服务器的漏洞将更容易。
识别
在发现模板注入之后识别正在使用的模板引擎。此过程有时可能就像提交不正确的语法一样简单,因为模板引擎可能会在错误报告中识别出自己。此方法不适合自动化,并且当错误消息被抑制时会失败。相反,我们使用具有特定于语言的有效负载的决策树在Burp Suite 中自动执行此操作。 “成功”和“失败”分别用绿色和红色箭头表示。相同的有效负载有时可能会产生多个不同的成功回复;例如,探测器{{7*'7'}} 在Twig 中可能返回49,在Jinja2 中可能返回7777777,如果没有使用模板语言,则两者都不会返回。
SSTI 有效负载树:
1。为了进行利用,我们将使用Try hack me box https://tryhackme.com/room/learnssti
2. 从Try hack me 设置盒子
3.导航至http://10.10.131.185:5000/profile/Test
4。让我们将字符串test 更改为“user”,看看user 是否得到反映。
5。我们可以看到它反映了我们在URL 中放入的内容。现在让我们尝试检测它是否容易受到SSTI 的影响。为此,我们需要使用一些模板引擎中常用的字符${{%[%’”}}%
6. 让我们尝试手动添加这些字符。
7。这会产生内部服务器错误,这意味着我们的代码没有被执行
8。收到内部服务器错误后,我们可以确认这是由于“${{”引起的,并且后端服务器面临错误。
9. 现在让我们尝试一些查询,例如乘法。例如${{7*7}}
10。尝试${{7*7}} 后,我们能够从服务器获取计算后的查询。
11. 现在让我们使用SSTI 负载树来识别服务器。
12。如上图所示,我们可以识别出Web 服务器是Jinja2。通过使用payload {{ ”.__class__.__mro__[1].__subclasses__()[401](“whoami”, shell=True, stdout=-1).communicate() }},我们可以收集服务器的信息(这里,我们获取主机名的信息。)
13. 在这里,我们可以看到我们已经通过SSTI 收集了用户Jake 的主机名。
缺乏显式的控制流语句;相反,所有控制都是数据驱动的,因此Mustache 模板不能包含应用程序逻辑。
因此,RCE 攻击不再可行,从而大大降低了攻击风险。
通过与Redfox Security 合作,您将获得执行有效且彻底的渗透测试所需的最佳安全和技术技能。我们的进攻性安全专家拥有多年通过渗透测试服务协助组织保护其数字资产的经验。要安排与我们的技术专家通话,请立即致电1-800-917-0850。
Redfox Security 是一个由专家安全顾问组成的多元化网络,具有全球思维和协作文化。通过结合数据驱动、基于研究和手动测试方法,我们自豪地提供强大的安全解决方案。
“如果您想在网络安全领域脱颖而出,请报名参加我们的综合课程,加入我们的成长和发展之旅。”
其中一个风险是服务器端模板注入(SSTI),这是一种在将不受信任的用户输入直接嵌入模板时出现的漏洞。通过利用本机模板语法,攻击者可以注入在服务器上执行的恶意负载。
由于模板是在服务器端处理的,因此SSTI 攻击可能比客户端注入危险得多,可能导致远程代码执行、数据盗窃,甚至整个系统受损。
什么是模板引擎?
模板引擎是允许开发人员更有效地创建动态HTML 页面的框架。开发人员无需手动编码每个页面,而是在模板内使用占位符,并在运行时替换为数据。一些流行的模板引擎包括:
PHP: 聪明,树枝
Java: 速度、FreeMarker
Python: Jinja2、Mako、龙卷风
JavaScript: 玉,愤怒
Ruby: 液体
当这些引擎被滥用(直接将用户输入合并到模板中)时,就会出现SSTI 漏洞。
SSTI 的影响
根据相关的模板引擎和应用程序使用它的精确方式,服务器端模板注入漏洞可能会使网站容易遭受多种攻击。除非在极其不寻常的情况下,这些缺陷实际上并不代表安全问题。然而,服务器端模板注入经常会产生灾难性的影响。在极端情况下,攻击者可能会成功执行远程代码,夺取后端服务器的完全控制权,并利用它对内部架构发起其他攻击。
攻击者可以经常利用服务器端模板注入作为各种不同攻击的基础,即使无法完全执行远程代码,也可能获得对服务器上敏感数据和任意文件的读取访问权限。
${"aaaa"} – "aaaa" ${99999+1} – 100000#{7*7} – 49${{7*7}} – 49${{request}}, ${{session}}, {{faceContext}}发现弱点是利用的第一步,就像任何漏洞一样。最简单的初始策略可能是尝试通过插入模板表达式中经常出现的特殊字符字符串,例如多语言${{%[%’”}}%\。您应该检查参数上普通数据的响应与提供的有效负载之间的差异,以确定服务器是否容易受到攻击。如果抛出错误,确定服务器的漏洞甚至正在运行的引擎将很容易。
但是,如果您希望服务器反映给定的有效负载但它没有被反映,或者响应中缺少一些字符,您也可能会找到易受攻击的服务器。
检测代码上下文
在某些情况下,用户输入包含在模板表达式: engine.render 中。 (“Hello, {{“+greeting+”}}”, data)。类似于此的URL 可能用于访问该页面: http://vulnerable-website.com/?gree...able-website.com/?greeting=data.usernamehello 的内容,则会返回用户名。如果在这些测试期间抛出错误,那么识别服务器的漏洞将更容易。
识别
在发现模板注入之后识别正在使用的模板引擎。此过程有时可能就像提交不正确的语法一样简单,因为模板引擎可能会在错误报告中识别出自己。此方法不适合自动化,并且当错误消息被抑制时会失败。相反,我们使用具有特定于语言的有效负载的决策树在Burp Suite 中自动执行此操作。 “成功”和“失败”分别用绿色和红色箭头表示。相同的有效负载有时可能会产生多个不同的成功回复;例如,探测器{{7*'7'}} 在Twig 中可能返回49,在Jinja2 中可能返回7777777,如果没有使用模板语言,则两者都不会返回。
SSTI 有效负载树:
2. 从Try hack me 设置盒子
3.导航至http://10.10.131.185:5000/profile/Test
6. 让我们尝试手动添加这些字符。
9. 现在让我们尝试一些查询,例如乘法。例如${{7*7}}
11. 现在让我们使用SSTI 负载树来识别服务器。
13. 在这里,我们可以看到我们已经通过SSTI 收集了用户Jake 的主机名。
如何防止 SSTI 缺陷
保护网站免受SSTI 漏洞影响的最佳方法是永远不允许用户更改或创建模板。但是,如果出现业务紧急情况,可以使用以下选项:– 消毒
在模板中使用潜在危险元素之前,必须先找到并消除它们。因此,有效分析用户数据流至关重要。有多种方法可以做到这一点(使用正则表达式、授权表达式白名单等)。– 沙箱
目标是创建一个禁用有风险的模块和功能的安全环境。对用户提供的数据的解释不能授予对其他功能或数据的访问权限。不幸的是,沙箱环境很难设置,并且可以通过错误配置或疏忽来绕过。——无逻辑模板
有一些无逻辑的引擎模板尝试将视觉渲染与代码解释分开。 Mustache 是最流行的网页模板系统之一。缺乏显式的控制流语句;相反,所有控制都是数据驱动的,因此Mustache 模板不能包含应用程序逻辑。
因此,RCE 攻击不再可行,从而大大降低了攻击风险。
通过与Redfox Security 合作,您将获得执行有效且彻底的渗透测试所需的最佳安全和技术技能。我们的进攻性安全专家拥有多年通过渗透测试服务协助组织保护其数字资产的经验。要安排与我们的技术专家通话,请立即致电1-800-917-0850。
Redfox Security 是一个由专家安全顾问组成的多元化网络,具有全球思维和协作文化。通过结合数据驱动、基于研究和手动测试方法,我们自豪地提供强大的安全解决方案。
“如果您想在网络安全领域脱颖而出,请报名参加我们的综合课程,加入我们的成长和发展之旅。”