Archive for Dev. (junyup2)

์ง€์‹์„ ์ฑ„์›Œ๊ฐ€๋Š” ใ€Ž๊ฐœ๋ฐœ์ž/ํ™”์ดํŠธํ•ด์ปคใ€๋ฅผ ๋ชฉํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ธ”๋กœ๊ทธ

๋ชจ์˜ ํ•ดํ‚น ์Šคํ„ฐ๋””/๋ชจ์˜ ํ•ดํ‚น - ๊ธฐ๋ก์ผ์ง€

[๊ธฐ๋ก์ผ์ง€] ๐Ÿ“š 09์ฃผ์ฐจ (XSS - Stored/Reflected)

Gearvirus(junyup2) 2023. 12. 24. 17:45

XSS ๋ž€?

ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…(XSS)์€ Cross Site Scripting์˜ ์•ฝ์ž๋กœ ๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด 'ํด๋ผ์ด์–ธํŠธ ์ธก ์Šคํฌ๋ฆฝํŠธ ์‚ฝ์ž… ๊ณต๊ฒฉ'์ด๋‹ค.

(์ค„์—ฌ๋ณด๋ฉด CSS์ด์ง€๋งŒ XSS์ธ ์ด์œ ๋Š” ์ด๋ฏธ CSS๋ผ๋Š” ๊ฒƒ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— Cross์™€ ์ผ๋งฅ์ƒํ†ตํ•˜๋Š” X๋กœ์„œ ๋Œ€์ฒดํ•œ ๊ฒƒ์ด๋‹ค.)

ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…์€ ์ค„์—ฌ์„œ 'ํฌ์‚ฌ'๋ผ๊ณ  ๋ถˆ๋ฆฌ์šฐ๋Š”๋ฐ ์ž์„ธํ•œ ์ •์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

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

์ด๋ ‡๊ฒŒ ๋งํ•˜๋ฉด ๊ณต๊ฒฉ์ž๊ฐ€ ์„œ๋ฒ„์˜ ํŽ˜์ด์ง€์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์˜ฌ๋ ค๋‘์—ˆ์œผ๋‹ˆ๊นŒ? ์„œ๋ฒ„๋ฅผ ๊ณต๊ฒฉํ•˜๋Š” ๊ฒƒ ์•„๋‹Œ๊ฐ€? ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿด๋“ฏํ•˜๊ฒŒ๋„ ์„œ๋ฒ„๋ฅผ ๊ณต๊ฒฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์•„๋‹ˆ๋‹ค.!!

์ค‘์š”ํ•œ ๊ฒƒ์€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์œ„์น˜๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

XSS๋Š” ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์‚ฝ์ž…๋œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์ผ ๋ฟ ๊ณต๊ฒฉ ๋Œ€์ƒ์ด ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ํด๋ผ์ด์–ธํŠธ ์ธก(ํ”ผํ•ด์ž)์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— 'ํด๋ผ์ด์–ธํŠธ ์ธก ์Šคํฌ๋ฆฝํŠธ ๊ณต๊ฒฉ' ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

์„œ๋ฒ„์˜ ์ทจ์•ฝ์ ์ด ์•„๋‹ˆ๋ผ ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ์ทจ์•ฝ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— 'ํ”ผํ•ด์ž = ์ด์šฉ์ž' ๋ผ๋Š” ์‚ฌ์‹ค์„ ์žŠ์œผ๋ฉด ์•ˆ๋œ๋‹ค.

(๋ฐ˜๋ฉด SQL Injection์€ ์„œ๋ฒ„์ธก ๊ณต๊ฒฉ์ด๋‹ค.)

์ฆ‰ XSS๋Š” ์‚ฝ์ž…ํ•œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ๊ฐ€๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ 'ํด๋ผ์ด์–ธํŠธ ์Šคํฌ๋ฆฝํŠธ'์ด๊ณ  ์ด์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งํ•œ๋‹ค.


Server vs Client Script

Server Side Script : PHP, JSP, ASP
Client Side Script : HTML, CSS, Javascript

ํ˜น์ž๋Š” HTML / CSS / JavaScript ์—์„œ HTML์€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์•„๋‹ˆ๊ณ , ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์•„๋‹ˆ๋ผ๊ณ  ๋งํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ HTML ๋˜ํ•œ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์‹คํ–‰๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ์ž„์—๋Š” ๋ถ„๋ช…ํ•˜๋‹ค.

๋ธŒ๋ผ์šฐ์ €(Browser) ์ž…์žฅ์—์„œ HTML๋กœ <input>์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ (์ด๋ฅผ ํ•ด์„ํ•˜์—ฌ) ํ™”๋ฉด์— ์ž…๋ ฅ๋ž€์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ 
CSS๋กœ color๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ ๊ธ€์ž ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค.

์ด์™€๊ฐ™์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ์‹๋“ค์„ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ '์ฝ๊ณ  ํ•ด์„ํ•˜๋Š” ๊ณผ์ •'์„ ๊ฑฐ์ณ ํ™”๋ฉด์— ๋„์›Œ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ € ์ž…์žฅ์—์„œ๋Š” HTML, CSS๋„ ํ•˜๋‚˜์˜ ์Šคํฌ๋ฆฝํŠธ๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

XSS ์ปจ์…‰

XSS๋Š” ์Šคํฌ๋ฆฝํŠธ(Script)๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ณต๊ฒฉ์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ XSS ๊ณต๊ฒฉ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ์‚ฝ์ž…ํ•œ ์Šคํฌ๋ฆฝํŠธ(Script)๊ฐ€ ์š”์ฒญ(Request)์„ ํ†ตํ•ด ๋‹ค๋ฅธ ์šฉ์ž์—๊ฒŒ ์ž˜ ์ „๋‹ฌ(Response)๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ์„ ๋”ฐ์ ธ๋ด์•ผํ•œ๋‹ค.

1. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋Š”์ง€
2. ์‚ฝ์ž…ํ•œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‘๋‹ต(Response)์—์„œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•œ์ง€

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ?! How?! ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•ด์•ผํ• ๊นŒ?

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ „๋žต์ด ์กด์žฌํ•œ๋‹ค.

1. ์„œ๋ฒ„์— ์ €์žฅ
2. ์„œ๋ฒ„์—์„œ ๋ฐ˜์‚ฌ
3. ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์กฐ๋ฆฝ

์ด๋ฒˆ์—๋Š” ์šฐ์„  '์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„œ๋ฒ„์— ์ €์žฅ' ํ•˜๋Š” ์ „๋žต๊ณผ '์„œ๋ฒ„์˜ ์—์ฝ” ๊ธฐ๋Šฅ์„ ์ด์šฉ'ํ•˜๋Š” ์ „๋žต์„ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค.

 

Stored XSS

์„œ๋ฒ„์— ์ €์žฅํ•˜๋Š” ์ „๋žต์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„œ๋ฒ„์— ์ €์žฅ ํ•œ๋‹ค๊ณ  ํ•ด์„œ Stored XSS๋ผ๊ณ  ํ•˜๋ฉฐ, ์ด ์‚ฌ์ดํŠธ๋ฅผ ์ ‘์†ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ํ•ด๋‹น ํŽ˜์ด๋กœ๋“œ๋ฅผ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ์ „๋žต์ด๋‹ค.

์ทจ์•ฝ์  Point

1. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…/์ €์žฅํ•˜๋Š” ํŽ˜์ด์ง€
 ex) ํšŒ์›๊ฐ€์ž…, ๊ฒŒ์‹œํŒ ๊ธ€ ์ž‘์„ฑ(์ €์žฅ), ์ž๊ธฐ ์†Œ๊ฐœ ๋“ฑ๋ก, ํŒŒ์ผ ์—…๋กœ๋“œ(ํŒŒ์ผ ์ด๋ฆ„), ํŒŒ์ผ ์—…๋กœ๋“œ (Script๊ฐ€ ํฌํ•จ๋œ html ํŒŒ์ผ ์ €์žฅ)

2. ์‚ฝ์ž…๋œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋กœ๋“œ๋˜๋Š” ํŽ˜์ด์ง€
ex) ๊ฒŒ์‹œํŒ ๊ธ€ ๋ฆฌ์ŠคํŠธ, ๊ฒŒ์‹œํŒ ๊ธ€ ์ฝ๊ธฐ · ์ˆ˜์ • ํŽ˜์ด์ง€, ๋งˆ์ดํŽ˜์ด์ง€

์œ„์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณณ์—์„œ ๋ฐœ์ƒํ•˜๊ฒŒ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ชจ๋“  ๊ณณ์—์„œ๋Š” ํฌ์‚ฌ(XSS)๊ฐ€ ์ผ์–ด๋‚˜๋Š”๊ฐ€? ๊ทธ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค!

๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๊ณ , ์ถœ๋ ฅ! ๋˜๋Š” ๊ณณ์—์„œ๋งŒ ๋ฐœ์ƒํ•œ๋‹ค.

(์ทจ์•ฝ์ ์ด ์กด์žฌํ•˜๋Š” ๊ณณ์ด ์˜ˆ์ƒ ์™ธ์˜ ์˜์™ธ์˜ ๊ณณ์ผ ์ˆ˜ ์žˆ๋‹ค.)

ex) ๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ ์ž‘์„ฑ : ๊ฒŒ์‹œ๊ธ€ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ํŒ์—… ๋ฉ”๋‰ด์˜ ๊ณต์ง€์‚ฌํ•ญ์—์„œ ๊ฐ‘์ž…๋œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Œ

๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Burp Suite์—์„œ ํ™•์ธํ•ด์•ผํ•œ๋‹ค.

์„œ๋ฒ„ ์‘๋‹ต(Response)์— ๋ฐ์ดํ„ฐ(ํŒŒ๋ผ๋ฏธํ„ฐ)๊ฐ€ ์ฐํ˜€์„œ ๋‚˜์˜ค๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ณ , ๊ฑฐ๊ธฐ์—์„œ ํฌ์‚ฌ(XSS)๊ฐ€ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•œ๋‹ค.

๋‹ค์Œ์„ Burp Suite์—์„œ ํ™•์ธ ํ•˜๋ฉด ํฌ์‚ฌ๋ฅผ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

1. ์š”์ฒญ์— ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ถœ๋ ฅ๋˜์–ด ๋“ค์–ด๊ฐ€๋Š”์ง€ ํ™•์ธ
2. ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜๋Š”์ง€ ํ™•์ธ
3. ์‘๋‹ต์—์„œ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ

 

Stored XSS ์‚ฝ์ž… ๊ณผ์ •

1. ์ž‘์„ฑํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ™”๋ฉด์— ์‘๋‹ต ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•œ๋‹ค.

์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‘๋‹ต์—์„œ ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

2. ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์ฒดํฌํ•œ๋‹ค.

์•„๋ฌด ๋ฌธ์ž๋‚˜ ๋„ฃ๋Š”๋‹ค๊ณ  ์Šคํฌ๋ฆฝํŠธ๋กœ ์ธ์‹ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์Šคํฌ๋ฆฝํŠธ ์‚ฝ์ž… ๊ณต๊ฒฉ์„ ์œ„ํ•œ ์‚ฌ์ „ ํ™•์ธ์ด ํ•„์š”ํ•œ ํŠน์ˆ˜ ๋ฌธ์ž๋“ค์ด ์กด์žฌํ•œ๋‹ค.

๋‹ค์Œ์˜ 4๊ฐ€์ง€ HTML ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ํ™•์ธํ•ด์ค˜์•ผ ํ•œ๋‹ค.

< ' " >

< ' " > ๋ฅผ ์ €์žฅํ•˜๋Š” ํŽ˜์ด์ง€์— ๋„ฃ์–ด์„œ ํ™•์ธํ•ด๋ณธ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ์ดํ„ฐ ๋’ค์— ๋„ฃ์–ด ํ™•์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ์–ด๋–ค ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ž‘์—…์ด๋‹ค.

3. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.

Javascript๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ์›ํ•˜๋Š” ๊ณต๊ฒฉ์„ ๋„ฃ์–ด์ค€๋‹ค.

HTML ์˜ <script> ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•œ๋‹ค.

<script> ____ </script>

์Šคํฌ๋ฆฝํŠธ Tag์„ ์•ˆ์“ฐ๊ณ  javascript๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค (ํŠน์ˆ˜๋ฌธ์ž ' / ' ๋ฅผ ์ฒดํฌํ•˜์ง€ ์•Š๋Š” ์ด์œ )

4. ์‚ฝ์ž…ํ•œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‘๋‹ต์ƒ์— ๊ทธ๋Œ€๋กœ ๋“ค์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํฌ๋ฆฝํŠธ(Script) ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‚˜์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฌธ์ž์˜ ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.


Reflected XSS

์„œ๋ฒ„์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ €์žฅํ•˜๋Š” Stored XSS์™€ ๋‹ค๋ฅด๊ฒŒ ์„œ๋ฒ„์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์„œ๋ฒ„์—์„œ ๋ฐ˜์‚ฌ๋˜๋Š” ๊ฒƒ(์—์ฝ”)์„ ์ด์šฉํ•˜๋Š” ์ „๋žต์ด ๋ฐ”๋กœ Reflected XSS์ด๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ฉ”์•„๋ฆฌ์ฒ˜๋Ÿผ ์‘๋‹ต์— ๊ทธ๋Œ€๋กœ ๋ฐ•ํ˜€์˜ค๋Š” ๊ฒฝ์šฐ์— ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ทจ์•ฝ์  Point

์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ณณ๊ณผ ์‚ฝ์ž…๋œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‘๋‹ต๋˜๋Š” ๊ณณ์ด ๊ฐ™์€ ๊ฒฝ์šฐ
(์„œ๋ฒ„์—๊ฒŒ ์ „๋‹ฌ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ์„œ๋ฒ„์˜ ์‘๋‹ต์— ๊ทธ๋Œ€๋กœ ์‚ฝ์ž…๋˜๋Š” ์›๋ฆฌ๋ฅผ ์ด์šฉ)

ex) ์•„์ด๋”” ์ค‘๋ณต ์ฒดํฌ, ๊ฒ€์ƒ‰ ํŽ˜์ด์ง€, ๊ธฐํƒ€ ํŒŒ๋ผ๋ฏธํ„ฐ

ID ์ค‘๋ณต ์ฒดํฌ
-> ๋‚ด๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ์— ๊ด€ํ•˜์—ฌ ์•Œ๋ ค์ฃผ๋Š” ๊ณณ์ด๋‹ค.
๊ฒ€์ƒ‰ ํŽ˜์ด์ง€
-> ๊ฒ€์ƒ‰ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

์œ„์™€ ๊ฐ™์ด ๋‚ด๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•˜์—ฌ ๋ฐ˜์‚ฌ์ ์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ณณ์—์„œ Reflected XSS๊ฐ€ ์ผ์–ด๋‚œ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ Burp Suite์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ(Params)๋“ค์„ ์ž˜ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

๋ชจ๋“  ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•˜์—ฌ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์š”์ฒญ์— ์ž…๋ ฅํ•œ ๊ฐ’์ด ํ•ด๋‹น ์‘๋‹ต์— ๋ฐ”๋กœ ์ฐํ˜€ ๋‚˜์˜จ๋‹ค๋ฉด Reflected!!!! ๋ฅผ ์˜์‹ฌํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์š”์ฒญ(Request)์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ž…๋ ฅํ•œ ๊ฐ’์ด ์‘๋‹ต(Response)์— ๊ทธ๋Œ€๋กœ ๋‚˜์˜จ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ง€ํ•ด์•ผํ•œ๋‹ค.

Reflected๋Š” ๋ฌด.์กฐ.๊ฑด ๊ฐ™์€ ์‘๋‹ต์— ๋‚˜์˜จ๋‹ค.!!

๋ฐ˜๋ฉด Stored XSS์˜ ๊ฒฝ์šฐ์—๋Š” ์š”์ฒญ์— ์ž…๋ ฅํ•œ ๊ฐ’์ด ํ•ด๋‹น ์‘๋‹ต์ด ์•„๋‹Œ ๋‹ค์Œ(ํ˜น์€ ๋‹ค๋ฅธ) ์‘๋‹ต์— ์ฐํ˜€ ๋‚˜์˜จ๋‹ค.

์ €์žฅํ•˜๋Š” ๊ณณ, ์ถœ๋ ฅ๋˜๋Š” ๊ณณ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์–ด๋Š ์‘๋‹ต์— ์ฐํ˜€ ๋‚˜์˜ค๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ์ด์šฉํ•œ๋‹ค.


POC 

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ชจ์˜ ํ•ดํ‚น์€ ๋•Œ๋ฆฌ๋Š” ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๊ณ , ์ทจ์•ฝ์ ์„ ์ฐพ๋Š” ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์„ ์ธ์ง€ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” POC : Proof Of Content '๋ณด์—ฌ์ฃผ๊ธฐ ์šฉ๋„๋กœ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ' ๋ฅผ ์ด์šฉํ•˜์—ฌ "์—ฌ๊ธฐ์— ํฌ์‚ฌ ์ทจ์•ฝ์ ์ด ์žˆ์–ด์š”!" ๋ผ๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค€๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์‚ฝ์ž…ํ•œ ํด๋ผ์ด์–ธํŠธ ์ธก ์ฝ”๋“œ๊ฐ€, ์‹ค์ œ ์ด์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

๊ทธ๋ž˜์„œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” ๊ฒƒ์ด alert(1) ์ด๋‹ค.

๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ? ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋“ค์ด ์žˆ๋‹ค.

(๋ชจ์˜) ํ•ด์ปค๋“ค์ด alert(1)์„ ๋งŽ์ด ์“ฐ๋Š” ์ด์œ 

1. alert(1)์„ ์‚ฝ์ž…ํ•จ์œผ๋กœ์จ ๊ฒฝ๊ณ ์ฐฝ์ด ๋œจ๊ธฐ ๋•Œ๋ฌธ์— ์บก์ณํ•ด์„œ ์“ฐ๊ธฐ ์ข‹๋‹ค.
2. ๋ณด๊ณ ์„œ ์“ฐ๋Š” ๊ฒƒ์ด ํŽธํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ž˜์„œ์ธ๊ฐ€ XSS๋ฅผ ๋ง‰์•„์•ผํ•˜๋Š”๋ฐ alert ๋ฅผ ํ•„ํ„ฐ๋งํ•˜์—ฌ ๋ง‰์•„๋†“๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

(๋ชจ์˜) ํ•ด์ปค๋“ค์ด ํ•˜๋„ ์จ์„œ ๊ทธ๋Ÿฐ์ง€.... ์ฆ๋ช…์šฉ ์ฝ”๋“œ์ด๊ธฐ์—... ํ•„ํ„ฐ๋งํ•  ์ด์œ ๊ฐ€ ์—†์ง€๋งŒ.. ๊ทธ๋ž˜๋„ ํ•„ํ„ฐ๋งํ•ด๋‘๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

ํ•˜.์ง€.๋งŒ ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ์ž๋งคํ’ˆ์ด ์กด์žฌํ•œ๋‹ค.

prompt : ๊ธ€์ž๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ
confirm : ์˜ˆ/์•„๋‹ˆ์˜ค ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ
console.log : ๊ฐœ๋ฐœ์ž ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ฃผ์–ด ๋ชจ์–‘์ƒˆ๊ฐ€ ๋ณ„๋กœ๊ธดํ•˜์ง€๋งŒ ์ด๋Ÿฐ๊ฒƒ๋„ ์žˆ์Œ

์œ„์˜ ๊ฒƒ๋“ค์€ ์˜ˆ์‹œ์— ๋ถˆ๊ณผํ•˜๊ณ  ๋” ๋‹ค์–‘ํ•œ ๋งŽ์€ ๊ฒƒ๋“ค์ด ์กด์žฌํ•œ๋‹ค.

์ฆ‰ ํฌ์‚ฌ ์ทจ์•ฝ์ ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

alert / prompt / confirm / console.log

 

์ƒ๊ฐํ•  ์ 

๋„ฃ์–ด๋ดค๋Š”๋ฐ ์ค‘๊ฐ„์— ์ž˜๋ฆฐ๋‹ค๋ฉด?

"์•„... ๊ธ€์ž ์ˆ˜ ์ œํ•œ์ด ์žˆ๊ตฌ๋‚˜." ๋ฅผ ์ƒ๊ฐํ•œ๋‹ค.

๊ธ€์ž ์ˆ˜ ๋•Œ๋ฌธ์— ' or  " ์— ์˜ํ•ด์„œ ์ž˜๋ ค์„œ ๋’ท๋ถ€๋ถ„์ด ๋จนํ†ต์ด๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋‹ˆ ์ž˜ ์‚ดํŽด๋ด์•ผํ•œ๋‹ค.

๋’ท ๊ธ€์ž๋“ค์ด ๋‹ค ๊นจ์ ธ๋ฒ„๋ฆฌ๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

(๊บพ์‡  ( < ) ๊ฐ€ ๋ง๊ฐ€์ ธ์„œ ์‚ฌ์ดํŠธ ์ž์ฒด๊ฐ€ ๋ง๊ฐ€์ง€๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋‹ˆ ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค.)

 

์Šคํฌ๋ฆฝํŠธ ์‚ฝ์ž…์— ๊ด€ํ•˜์—ฌ...

1.์š”์ฒญ์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋„ฃ์–ด์„œ ๋ณด๋‚ธ๋‹ค.
2.๋‹ค์Œ ์‘๋‹ต์—์„œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž˜ ๋ณด๋‚ด์กŒ์Œ์„ ํ™•์ธํ•œ๋‹ค.
3.๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹ค์ œ๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ์ธก ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž˜ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

์ฆ‰ Javascript๋ฅผ ์–ผ๋งˆ๋‚˜ ์ž˜ ๋‹ค๋ฃจ๋ƒ๊ฐ€ ๊ด€๊ฑด์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.(๊ทธ๋Ÿฌ๋‹ˆ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ณต๋ถ€ํ•˜์ž...)

 

์‚ฌ์ „ ํ™•์ธ์˜ ์ค‘์š”์„ฑ

์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ํŠน์ˆ˜๋ฌธ์ž < ' " >  ๋ฅผ ๋จผ์ € ์ฒดํฌํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?

๋ฏธ๋ฆฌ ์ฒดํฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋‚˜์ค‘์— ํ•˜๋‚˜ํ•˜๋‚˜ ๋Œ์•„๊ฐ€๋ฉด์„œ ์ฒดํฌํ•ด๋ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋˜ํ•œ ํ•„ํ„ฐ๋ง์˜ ๊ฐ€๋Šฅ์„ฑ์„ ์—ผ๋‘ํ•˜๊ณ  ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ๋“ค์— ๋Œ€ํ•˜์—ฌ ๋ฏธ๋ฆฌ ์ฒดํฌํ•˜๋Š” ๊ฒƒ๋„ ํ•„์š”ํ•˜๋‹ค.

<script>
<img>
alert

๋งŽ์ด ์‚ฌ์šฉ๋˜์–ด ๋ง‰์•„๋‘˜๋งŒํ•œ ๊ฒƒ๋“ค์„ ๋ฏธ๋ฆฌ๋ฏธ๋ฆฌ ์ฒดํฌํ•ด๋‘ฌ์•ผํ•œ๋‹ค.

ํ™•์‹คํžˆ ๋˜๋Š” ๊ฒƒ์„ ์ฒดํฌํ•˜๊ณ , ์กฐ๊ธˆ์”ฉ ํ‚ค์›Œ๋‚˜๊ฐ€๋Š” ๋ฐฉ๋ฒ•์ด ๋””๋ฒ„๊น…์ด ์—ญ์œผ๋กœ ์‰ฌ์›Œ์ง„๋‹ค๋Š” ์‚ฌ์‹ค์„ ์žŠ์ง€๋ง์ž!

๊ฒฐ๊ตญ ๋ชจ๋“  ์ฝ”๋“œ/ ์›น ๊ฐœ๋ฐœ ๋“ฑ์˜ ๋ฐฉ์‹๊ณผ ๋™์ผํ•˜๋‹ค.

์กฐ๊ธˆ์”ฉ, ์กฐ๊ธˆ์”ฉ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ , ๋‹ค์‹œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๋Š” ์ž‘์—…์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์ด๋ ‡๊ฒŒ ์•ˆํ•˜๊ณ  ๋‹ค ์“ฐ๊ณ (์ž‘์„ฑํ•˜๊ณ ) ์•ˆ๋œ๋‹ค๋ฉด?!

์–ด๋””๊ฐ€ ๋ฌธ์ œ์ธ์ง€ ์ฐพ๋Š” ๊ฒƒ์ด ๋ง‰๋ง‰ํ•˜๋‹ค. ํ•˜๋‚˜ํ•˜๋‚˜ ์ฒดํฌํ•˜๋ฉด์„œ ๊ฐ€๋Š” ๊ฒƒ์ด ์‹ ์ƒ์— ์ข‹๋‹ค.

ํ•˜๋‚˜ ํ•˜๋‚˜ ์ฒดํฌํ•˜๋Š” ๊ฒƒ์ด ๊ท€์ฐฎ๊ณ , ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆด๊ฒƒ ๊ฐ™์ง€๋งŒ, ๋‚˜์ค‘์— ๋Œ€์ฐธ์‚ฌ๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์˜คํžˆ๋ ค ์‹œ๊ฐ„์ด ๋œ ๊ฑธ๋ฆฌ๋Š” ๋ฐฉ์‹์ผ ์ˆ˜ ์žˆ๋‹ค.

'python์œผ๋กœ payload๋ฅผ ์งœ๋Š” ๊ฒฝ์šฐ์—๋Š” print()๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐ์–ด๋ณด๋ฉด์„œ ํ•„ํ„ฐ๋ง์„ ์ฒดํฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋„๋ก ํ•˜์ž.'


XSS์˜ ์œ„ํ—˜์„ฑ(๊ณผ์ •)

๊ทธ๋ž˜์„œ XSS๋Š” ์™œ ์œ„ํ—˜ํ•œ๊ฐ€?

XSS์˜ ๊ณต๊ฒฉ ์‹œ๋‚˜๋ฆฌ์˜ค

HTML, CSS ์‚ฝ์ž…
-> ํ”ผ์‹ฑ ๊ณต๊ฒฉ ์œ ๋„ ๊ฐ€๋Šฅ

JavaScript ์‚ฝ์ž…
-> ์„ธ์…˜ ID ํƒˆ์ทจ, ํ”ผ์‹ฑ ์‚ฌ์ดํŠธ ๋ฆฌ๋””๋ ‰์…˜, ํ‚ค๋กœ๊ฑฐ ๋“ฑ.

 

Stored XSS

1. ex)๊ฒŒ์‹œํŒ ๊ธ€ ์ž‘์„ฑ
2. ๊ทธ ๊ฒŒ์‹œ๊ธ€์„ ์ฝ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์Šคํฌ๋ฆฝํŠธ ์ „๋‹ฌ
 (์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋“ค์–ด ์žˆ๋Š” ์‘๋‹ต์„ ์ด์šฉ์ž๊ฐ€ ์š”์ฒญํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ)
3. ์‚ฝ์ž…๋˜์–ด ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋จ

์œ„ํ—˜ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒ ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ? Reflected XSS๋Š”?

 

Reflected XSS

Reflected์˜ ๊ฒฝ์šฐ์—๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ปดํ“จํ„ฐ๊ฐ€ ์•„๋‹Œ ๋‚ด ์ปดํ“จํ„ฐ์—์„œ ๋™์ž‘ํ•œ ๊ฒƒ์ด๋‹ค...?!

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋‹ค๋ฅธ ์ „๋žต์„ ์„ธ์›Œ์•ผํ•œ๋‹ค.

๋งํฌ๋ฅผ ํด๋ฆญํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. '๋งํฌ ์ „๋‹ฌ ๊ณต๊ฒฉ'

1. ์š”์ฒญ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ GET ๋ฐฉ์‹์„ ์ด์šฉํ•˜์—ฌ ์‘๋‹ต์— ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํฌํ•จ๋˜๋Š” ๊ณณ์„ ์ฐพ์Œ
2. ํŒŒ๋ผ๋ฏธํ„ฐ ๋ถ€๋ถ„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…
3. ํ•ด๋‹น URL์„ ํด๋ฆญํ•˜๋„๋ก ์œ ๋„(์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ์š”์ฒญ์„ ๋ณด๋ƒ„)
4. ์š”์ฒญํ•œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋จ

http://~~/?<script>attack</script> ๋ฅผ ํด๋ฆญํ•˜๋„๋กํ•˜์—ฌ ํ”ผํ•ด์ž์˜ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰๋˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

(์ด์šฉ์ž๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‚ฝ์ž…๋œ ์š”์ฒญ์„ ๋ณด๋‚ด๋„๋ก ์œ ๋„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.)

์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‚ฝ์ž…๋œ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ฃผ์ฒด๊ฐ€ ๊ณต๊ฒฉ์ž๊ฐ€ ์•„๋‹Œ ์ด์šฉ์ž๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ Reflected์˜ ๊ฒฝ์šฐ ์‚ฌํšŒ๊ณตํ•™๊ธฐ๋ฒ•๊ณผ ๊ฐ™์ด ํ™œ์šฉ๋œ๋‹ค.

์•„๋Š” ์‚ฌ๋žŒ์ธ ์ฒ™(ํ˜น์€ ์‹ค์ œ ์•„๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์•…์˜๋ฅผ ๊ฐ€์ง€๊ณ ) ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๊ฒŒ ์œ ๋„ํ•œ๋‹ค.

๊ณต๊ฒฉ์ž(์ง€์ธ) : ์ด๊ฑฐ ํด๋ฆญํ•ด๋ด! (๋งํฌ ์ „๋‹ฌ)
์ด์šฉ์ž : ๊ทธ๋ž˜ (๋งํฌ ํด๋ฆญ)

 

GET Method

๋งํฌ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŽ˜์ด๋กœ๋“œ๊ฐ€ GET ๋ฐฉ์‹(Method) ์ด์—ฌ์•ผํ•œ๋‹ค.

๋งํฌ๋ฅผ ํด๋ฆญํ•˜์—ฌ ๊ณต๊ฒฉ์„ ์œ ๋ฐœ์‹œํ‚ฌ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ทจ์•ฝ์ ์ด ์ผ์–ด๋‚˜๋Š” ๊ณณ์ด POST Method ์˜€๋‹ค๋ฉด? ์ทจ์•ฝ์ ์ด ์•„๋‹ˆ๋‹ค.

(POST Method์—์„œ๋Š” ๊ณต๊ฒฉ์œผ๋กœ ํ™œ์šฉ๋  ์—ฌ์ง€๊ฐ€ ์ „ํ˜€ ์—†๋‹ค.)

ํ•˜์ง€๋งŒ Burp Suite์—์„œ Change Request Method๋ฅผ ์ด์šฉํ•˜์—ฌ POST ๋ฅผ GET ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์—ˆ์„ ๋•Œ๋„ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘๋œ๋‹ค๋ฉด? ์ทจ์•ฝ์ ์œผ๋กœ ํŒ๋‹จ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฆ‰ GET ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์—ˆ์Œ์—๋„ ๋™์ž‘๋œ๋‹ค๋ฉด ์ทจ์•ฝ์ ์œผ๋กœ ํŒ๋‹จํ•˜๊ณ  ์ด์–ด๋‚˜๊ฐ€๊ณ , GET ๋ฐฉ์‹์œผ๋กœ ๋ณ€ํ™˜์ด ๋จนํžˆ์ง€ ์•Š๋Š” ๊ณณ(๋ฐ”๊ฟ” ์ฃผ์—ˆ์„ ๋•Œ ๋™์ž‘์ด ์ œ๋Œ€๋กœ ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ)์€ ๋„˜๊ธด๋‹ค.


Stored vs Reflected

'Stored XSS ์˜ ๊ฒฝ์šฐ ๊ด‘์—ญ๊ธฐ'๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

๋‹จ์ ์œผ๋กœ๋Š” ์„œ๋ฒ„์— ๊ธฐ๋ก์ด ๋‚จ๊ธฐ ๋•Œ๋ฌธ์—, ํ”์ ์ด ๋‚จ๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋ฉด 'Reflected XSS์˜ ๊ฒฝ์šฐ ํƒ€์ผ“ํŒ…'์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋Š” ์ด์šฉ์ž๋งŒ ์Šคํฌ๋ฆฝํŠธ์˜ ๋Œ€์ƒ์ž๊ฐ€ ๋˜์–ด ๊ณต๊ฒฉ ๋ฒ”์œ„๊ฐ€ ์ข๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋งํฌ๋ฅผ ํด๋ฆญํ•˜๊ฒŒ ํ•ด์•ผํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์ง€๋งŒ, ํ”์ ์ด ๋‚จ์ง€ ์•Š๊ณ  ํด๋ฆญ๋งŒ ํ•˜๋„๋ก ํ•œ๋‹ค๋ฉด ์ฅ๋„ ์ƒˆ๋„ ๋ชจ๋ฅด๊ฒŒ ๊ณต๊ฒฉ์ด๋œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

XSS์˜ ๊ฒฝ์šฐ ์ฐพ์œผ๋ ค๊ณ  ์ž‘์ •ํ•˜๋ฉด ์ฐพ์„ ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ๋งค์šฐ ๋งŽ์ด ๋‚˜์˜ค๋Š” ์ทจ์•ฝ์ ์ด๋‹ค. ์™ ๋งŒํ•˜๋ฉด ๋‚˜์˜จ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ๋ชจ์˜ ํ•ดํ‚นํ•  ๋•Œ ์ทจ์•ฝ์ ์ด ์•ˆ๋‚˜์˜ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”? ๋ผ๋Š” ์งˆ๋ฌธ์—

์šฐ๋ฆฌ๋“ค์˜ ์นœ๊ตฌ ํฌ์‚ฌ! ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ ์ด์œ ์—์„œ ๋ฒ„๊ทธ ๋ฐ”์šดํ‹ฐ(Bug Bounty)์—์„œ๋„ XSS๋Š” ๋„ˆ๋ฌด ๋งŽ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ˆ์„ ์ž˜ ์ณ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

ํ•˜์ง€๋งŒ Stored XSS์˜ ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ์ด๋‹ค. ๊ด‘์—ญ๊ธฐ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ„ํ—˜์„ฑ์ด ๋” ๋†’๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 


์งˆ๋ฌธ ํ™˜์˜, ์ˆ˜์ • ๋ฐ ๋ณด์™„์— ๋Œ€ํ•œ ์ง€์  ํ™˜์˜