DOM based XSS

gyubยท2025๋…„ 6์›” 13์ผ
0

๋ชจ์˜ํ•ดํ‚น ์Šคํ„ฐ๋””

๋ชฉ๋ก ๋ณด๊ธฐ
24/31

๐Ÿ”Ž DOM์ด๋ž€?
Document Object Model์˜ ์•ฝ์ž๋กœ, HTML ๋ฌธ์„œ๋ฅผ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค
javascript์™€ ๊ฐ™์€ ์–ธ์–ด๋Š” DOM ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ HTML ๋ฌธ์„œ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค


HTML์—๋Š” ๋ถ€๋ชจ ์š”์†Œ, ์ž์‹ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค
์ฆ‰, ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š”๋ฐ์š”, ๊ทธ๋ž˜์„œ DOM์€ ํŠธ๋ฆฌ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค

๐Ÿ’กDOM based XSS

DOM์€ javascript์™€ ๊ฐ™์€ ์–ธ์–ด๊ฐ€ HTML์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์—,

DOM ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด HTML ๋ฌธ์„œ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค

์ด๊ฒƒ์€ HTML์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ํฌํ•จ์ธ๋ฐ์š”

DOM ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•ด javascript๋กœ HTML ๋ฌธ์„œ์— ํƒœ๊ทธ ์ฆ‰, ์š”์†Œ๋ฅผ ๋”ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๋Œ€ํ‘œ์ ์œผ๋กœ document.write ๋‚˜ innerHTML ์ด ์žˆ์Šต๋‹ˆ๋‹ค

๋งŒ์•ฝ URL์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ javascript๋ฅผ ์ด์šฉํ•ด HTML์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ,

ํŒŒ๋ผ๋ฏธํ„ฐ์— ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‚ฝ์ž…๋˜์–ด ์žˆ์—ˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

์ด ์ž…๋ ฅ๊ฐ’์ด document.write ๋‚˜ innerHTML ์™€ ๊ฐ™์€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด HTML ๋ฌธ์„œ์— ์ถ”๊ฐ€๋˜์–ด ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋  ๊ฒƒ ์ž…๋‹ˆ๋‹ค


์˜ˆ๋ฅผ ๋“ค์–ด, www.a.com/hello?p=ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’ ๋ผ๋Š” ์š”์ฒญ์„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋ƒˆ์„ ๋–„ hello ํŽ˜์ด์ง€์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ document.write(ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’) ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅํ•˜๊ฒŒ ๋˜์–ด์žˆ๋‹ค๋ฉด

ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’์— <script> alert(1); </script> ๊ฐ€ ๋“ค์–ด๊ฐ”์„ ๋•Œ,

document.write(<script> alert(1); </script>) ๊ฐ€ HTML์— ์ถ”๊ฐ€๋˜์–ด alert(1) ์ด ์‹คํ–‰๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค


DOM based XSS๋Š” ์ด๋ ‡๊ฒŒ ํด๋ผ์ด์–ธํŠธ์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ script๋ฅผ ํ†ตํ•ด ์žฌ์กฐํ•ฉ๋˜์–ด HTML์˜ ์š”์†Œ๋กœ ์ถ”๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€