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์ ๊ฒฝ์ฐ๋ ์์ธ์ด๋ค. ๊ด์ญ๊ธฐ ์ด๊ธฐ ๋๋ฌธ์ ์ํ์ฑ์ด ๋ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ง๋ฌธ ํ์, ์์ ๋ฐ ๋ณด์์ ๋ํ ์ง์ ํ์