์ƒˆ์†Œ์‹

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[My] ํ™ˆํŽ˜์ด์ง€ ์‹œํ์–ด ์ฝ”๋”ฉ

  • -
๋ฐ˜์‘ํ˜•

1. SQL ์ธ์ ์…˜

1-1. mypoint.php (ํฌ์ธํŠธ ์กฐํšŒ ๊ธฐ๋Šฅ)

my page์—์„œ ํฌ์ธํŠธ ์กฐํšŒ ๊ธฐ๋Šฅ์„ ํ™•์ธํ•ด๋ณด๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ get๋ฐฉ์‹์œผ๋กœ ๋ฐ›์•„์˜ค๊ณ  ์žˆ๋‹ค.

mypoint.php

์•„๋ž˜ ์†Œ์Šค์ฝ”๋“œ๋Š” mypoint๋กœ id ๊ฐ’์„ ๋„˜๊ฒจ์ฃผ๋Š” ์ฝ”๋“œ์ด์ž, ์ด์ „ ํŽ˜์ด์ง€ ์ฝ”๋“œ์ธ mypage.php ์†Œ์Šค ์ฝ”๋“œ ์ค‘ ์ผ๋ถ€์ด๋‹ค.

mypage.php

์œ„ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด, id = session id ์ด๋ฏ€๋กœ, ์„œ๋ฒ„ ๋‹จ์—์„œ ๊ฒ€์ฆ๋œ id๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ๋งž๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ž˜ mypoint.php ๋กœ ๋„˜์–ด๊ฐ€๋Š” ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด

mypage.php

ํฌ์ธํŠธ ๋‚ด์—ญ์„ ํด๋ฆญํ•  ๋•Œ, ๋„˜๊ฒจ์ฃผ๋Š” ์ฃผ์†Œ ํƒœ๊ทธ๋กœ mypoint.php?id = "์„ธ์…˜ ์•„์ด๋””" ๋ฅผ ์ฃผ์—ˆ๋‹ค.

์ด๋ฅผ ๋„˜๊ธธ ๋• ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ, mypoint.php ์—์„œ ๊ฐ’์„ ๋ฐ›์„ ๋•Œ get ๋ฐฉ์‹์œผ๋กœ ๊ฐ’์ด ์ „ํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๊ณต๊ฒฉ์ž๊ฐ€ ์‰ฝ๊ฒŒ ๋ณ€์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฃผ์†Œ์ฐฝ

๋ณ€์กฐ ์‹œ, ์•„์ด๋””์— ํ•ด๋‹นํ•˜๋Š” point ๋‚ด์—ญ์ด ์กฐํšŒ๋œ๋‹ค.

 

POC ์ฝ”๋“œ(๊ณต๊ฒฉ ์ฝ”๋“œ) : 

mypoint.php?id=0%27union%20select%201,2,id,pw,email%20from%20member%20%23

mypoint.php

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ปฌ๋Ÿผ์ˆ˜์™€, DB์ด๋ฆ„์„ ํ•˜๋‚˜์”ฉ ์•Œ์•„๋‚ธ ํ›„ ๊ณต๊ฒฉ ์ฟผ๋ฆฌ๋ฅผ ์“ฐ๋ฉด DB์„œ๋ฒ„ ๋‚ด๋ถ€ ์ •๋ณด๋ฅผ ํƒˆ์ทจ & ์•…์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋Œ€์‘๋ฐฉ์•ˆ : 

- session์„ ํ•ด๋‹น ์†Œ์Šค(point.php)๋‚ด์—์„œ post๋ฐฉ์‹์œผ๋กœ ๊ฒ€์ฆํ•˜๊ธฐ.

์ด์ „์— "mypage.php"์—์„œ "mypoint.php" ๋กœ id ๊ฐ’์„ ๋ณด๋ƒˆ์ง€๋งŒ ์ด๋ฅผ ์œ„์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•จ.

"mypoint.php" ์†Œ์Šค์ฝ”๋“œ์—์„œ DB ์ฟผ๋ฆฌ๋ฅผ ์กฐํšŒ ํ•  ๋•Œ ์–ป์–ด์˜ค๋Š” ๊ฐ’์ธ $id ๊ฐ’์„ session id๋กœ ๋ฐ”๊พธ์–ด ๊ฒ€์ฆํ•œ๋‹ค.

 

: ์‚ฌ์šฉ์ž์— ํ•ด๋‹นํ•˜๋Š” point ๋งŒ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง.

 

 

1-2. board.php (๊ธ€ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ)

์ž์œ ๊ฒŒ์‹œํŒ์—์„œ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ์‹œ, "search_result.php" ํŽ˜์ด์ง€์—์„œ search ๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ทธ ๊ฐ’์ด ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

board.php

๊ทธ๋Ÿฐ๋ฐ ์ด๋•Œ, post ๋ฐฉ์‹์ด ์•„๋‹Œ, get ๋ฐฉ์‹์œผ๋กœ ์ด๋ฅผ ์ „์†กํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ํด๋ฆญ ์‹œ ๊ฐ’์ด search ํŒŒ๋ผ๋ฏธํ„ฐ ๋’ค์— ๋…ธ์ถœ๋œ๋‹ค.

"search_result.php"์—์„œ๋Š” ๊ฐ’์„ ๊ฒ€์ฆํ•˜์ง€ ์•Š๊ณ  "get ๋ฐฉ์‹"์œผ๋กœ ๋ฐ›์•„์˜จ ๊ฒ€์ƒ‰ ๋‚ด์šฉ์„ ๊ทธ๋Œ€๋กœ ์ฟผ๋ฆฌ์— ์ ์šฉํ•œ๋‹ค.

 

๋•Œ๋ฌธ์— ์ด ๊ฐ’์„ ๊ณต๊ฒฉ์ž ๋งˆ์Œ๋Œ€๋กœ ์กฐ์ž‘ํ•˜์—ฌ, DB์ฟผ๋ฆฌ์˜ ํ๋ฆ„์„ ๋ฐ”๊พธ์–ด ์›ํ•˜์ง€ ์•Š์€ ์ •๋ณด๋ฅผ ๋นผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

POC ์ฝ”๋“œ(๊ณต๊ฒฉ ์ฝ”๋“œ) : 

๊ฒ€์ƒ‰๊ธฐ๋Šฅ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

0'union all select id,pw,name,4,5,6,7,8 from member where id ='admin' # 

 

 

๋Œ€์‘๋ฐฉ์•ˆ : 

- get ๋ฐฉ์‹์„ post๋ฐฉ์‹์œผ๋กœ ๋ฐ”๊พธ๊ณ , search ํŒŒ๋ผ๋ฏธํ„ฐ์— ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ํ•„ํ„ฐ๋ง์„ ์ ์šฉํ•œ๋‹ค. (์„œ๋ฒ„์ธก)

php์—์„œ๋Š” sql injection ๋ฐฉ์–ด ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.
"addslashes()"ํ•จ์ˆ˜์™€ "mysql_real_escape_string()" ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ, "mysql_real_escape_string" ํ•จ์ˆ˜๊ฐ€ ์ข€๋” ํ™•์žฅ ๋ฒ„์ „์œผ๋กœ, ๊ธฐ๋Šฅ์€ ๋™์ผํ•˜์ง€๋งŒ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋ฌธ์ž ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ ์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

๋‘ ํ•จ์ˆ˜ ๋ชจ๋‘ "๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์งˆ์˜" ์—์„œ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž ์•ž์— ๋ฐฑ ์Šฌ๋ž˜์‹œ๋ฅผ ๋ถ™์ธ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

** mysql_real_escape_string()ํ•จ์ˆ˜๊ฐ€ ์—๋Ÿฌ๊ฐ€ ๋‚˜์„œ ํ•ด๊ฒฐํ•ด๋ดค๋‹ค.
-> mysql ํ•จ์ˆ˜๋Š” PHP7์—์„œ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— "mysqli"ํ•จ์ˆ˜๋กœ ๋ณ€๊ฒฝํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
์ฆ‰ "mysqli_real_escape_string()"ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

board.php
search_result.php

์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ 'post'๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค. 

 

์ถ”๊ฐ€์ ์œผ๋กœ ์ฟผ๋ฆฌ๋ฌธ์— ๋“ค์–ด๊ฐ€๋Š” ๋ณ€์ˆ˜ ๊ฐ’๋“ค์„ "mysqli_real_escape_string"ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฒ€์ฆ ํ•ด์ค€๋‹ค.

search_result.php

ํ•จ์ˆ˜๋Š” ์œ„์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ, ์ฒซ๋ฒˆ์งธ ์ธ์ž์—๋Š” ๊ผญ $conn ์ฆ‰ ์ปค๋„ฅํ„ฐ ๋ถ€๋ถ„์„ ์—ฐ๊ฒฐ ์‹œ์ผœ ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฌธ ์ž…๋ ฅ ์‹œ, ์ด์ „๊ณผ ๋‹ค๋ฅด๊ฒŒ ' ์•ž์— \(๋ฐฑ์Šฌ๋ž˜์‹œ)๊ฐ€ ๋ถ™์–ด์„œ ์ถœ๋ ฅ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ํ•ด๋‹น ์ฟผ๋ฆฌ์—์„œ "๋ฌธ์ž์—ด"๋กœ ์ธ์‹๋œ๋‹ค.

 

๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํŽ˜์ด์ง€์—์„œ๋Š”

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด "$search"๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ์•„๋ž˜์™€ ๊ฐ™์ด unescape ์‹œ์ผœ์ค€๋‹ค.

: ๊ทธ๋Ÿผ ๊ฒฐ๊ณผ๋กœ ๋ณด์ผ ๋•Œ๋Š” ์ด์ „๊ณผ ๋™์ผํ•˜๊ฒŒ ๋ณด์ด๊ณ , ๋‚ด๋ถ€์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์งˆ์˜ ํ•  ๋•Œ๋Š” sql injection์„ ๋ฐฉ์–ดํ•ด์ค€๋‹ค.

 

 

2. ๋””๋ ‰ํ„ฐ๋ฆฌ ์ธ๋ฑ์‹ฑ

- files, admin ..๋“ฑ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ๋…ธ์ถœ๋˜๊ณ  ์žˆ์Œ.

 

๋Œ€์‘๋ฐฉ์•ˆ : 

- ์›น ์„œ๋ฒ„ ํ˜น์€ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ๋””๋ ‰ํ† ๋ฆฌ ์ธ๋ฑ์‹ฑ ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™” ์‹œํ‚จ๋‹ค.

 

"apache2"๊ธฐ์ค€

etc/apache2์— ์กด์žฌํ•˜๋Š” "apache2.conf" ํŒŒ์ผ์„ ํ™•์ธํ•ด๋ณด๋ฉด, "Indexes"๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ์Œ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์ค€๋‹ค.

์ €์žฅ ํ›„, ์•„ํŒŒ์น˜๋ฅผ ์žฌ์‹คํ–‰ ์‹œ์ผœ์ค€๋‹ค.

๋ช…๋ น์–ด : "service apache2 restart"

: ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ url ์— ์ž…๋ ฅ ์‹œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์—†๋‹ค๋Š” ํŽ˜์ด์ง€๊ฐ€ ๋œธ.

 

 

3. ์ •๋ณด ๋ˆ„์ถœ

3-1. ์ฃผ์š” ์ •๋ณด ๋…ธ์ถœ (mypage.php)

mypage.php ํŽ˜์ด์ง€์—์„œ 2์ฐจ ๊ณต๊ฒฉ์„ ์œ„ํ•œ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

mypage๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด, ์ค‘์š”์ •๋ณด(๋น„๋ฐ€๋ฒˆํ˜ธ, ์ด๋ฉ”์ผ ๋“ฑ)๊ฐ€ ํ‰๋ฌธ์œผ๋กœ ๋…ธ์ถœ๋˜๊ณ  ์žˆ๋‹ค.

์›น ์ƒ ์†Œ์Šค ์ฝ”๋“œ

๋˜ํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ด๋„, ๋…ธ์ถœ์ด ๋˜์–ด์žˆ๋‹ค.

mypage.php

์ฝ”๋“œ๋Š” ์•„๋ฌด๋Ÿฐ ํ•„ํ„ฐ๋ง ํ˜น์€ ๋งˆ์Šคํ‚น ์ ์šฉ์ด ์—†์ด, ๋ฐ”๋กœ ์ถœ๋ ฅ๋˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ

์ด๋ฅผ ๊ณต๊ฒฉ์ž๊ฐ€ ํ™•์ธํ•œ๋‹ค๋ฉด, ์ด๋กœ ์ธํ•œ ํ”ผํ•ด๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3-2. ์›น ์„œ๋ฒ„ ๊ตฌ์„ฑ ์ •๋ณด ๋…ธ์ถœ

ํŽ˜์ด์ง€ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€(500,404,402..๋“ฑ) ๋กœ ์ธํ•ด ์›น ํŽ˜์ด์ง€ ์„œ๋ฒ„ ๊ตฌ์„ฑ ์ •๋ณด ํ˜น์€ ์ฝ”๋ฉ˜ํŠธ ๋“ฑ์ด ๋…ธ์ถœ ๋  ์ˆ˜ ์žˆ๋‹ค.

๊ณต๊ฒฉ์ž๋Š” ์ด๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์˜ ์ •๋ณด๋ฅผ ์œ ์ถœํ•˜์—ฌ, 2์ฐจ ๊ณต๊ฒฉ์œผ๋กœ ์ด์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

 

๋Œ€์‘๋ฐฉ์•ˆ : 

- ์ค‘์š”์ •๋ณด๋Š” ๋งˆ์Šคํ‚น์„ ์ ์šฉํ•˜์—ฌ ํ‘œ์‹œํ•œ๋‹ค. 

์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งˆ์Šคํ‚น ์ฒ˜๋ฆฌํ•˜์—ฌ ์ค‘์š”์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ๋Œ€์ฒ˜ํ•œ๋‹ค.

 

- ์—๋Ÿฌ ์ฝ”๋“œ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ์—๋Ÿฌ ํŽ˜์ด์ง€๋กœ Redirect ์ฒ˜๋ฆฌ ์‹œํ‚จ๋‹ค.

apache2.conf ํŒŒ์ผ์— ์ „์—ญ ์„ค์ •์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ ์‹œ์ผœ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

๋จผ์ € ์†Œ์Šค์ฝ”๋“œ์™€ ๋™์ผํ•œ ์œ„์น˜์— ์—๋Ÿฌ ์ฝ”๋“œ ๋ฐœ์ƒ ์‹œ ์ด๋™ํ•  ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

error.html

์œ„์™€ ๊ฐ™์ด ๊ฐ„๋‹จํžˆ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ํ›„ apache2.confํŒŒ์ผ๋กœ ์ด๋™ํ•œ๋‹ค

์œ„์น˜ : "etc/apache2 -> vi apache2.conf"

์œ„์™€ ๊ฐ™์ด ์ „์—ญ ์„ค์ •์— ์ถ”๊ฐ€ํ•œ๋‹ค. (์–ด๋Š ์œ„์น˜์— ์กด์žฌํ•˜์—ฌ๋„ ์ƒ๊ด€ ์—†๋‹ค.) 

ํ˜„์žฌ ์ž์‹ ์˜ ๊ฒฝ๋กœ์—์„œ error.html์„ ์ฐพ์•„์ฃผ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— 

403 ์—๋Ÿฌ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ -> 3.35.24.172/admin/์œผ๋กœ ๋“ค์–ด๊ฐˆ ๊ฒฝ์šฐ ์ด ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•œ๋‹ค.

์ฆ‰ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฐ™์€ ๊ฒฝ์šฐ ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ ํ•˜์œ„์—๋„ error ์ฝ”๋“œ๋ฅผ ์ ์šฉ ์‹œ์ผœ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

์ตœ์ข…์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•˜์˜€์Œ:

apache2.conf ์ฝ”๋“œ & 403.html 

: ์ ์šฉ ํ›„ ํŽ˜์ด์ง€๋ฅผ ์žฌ์‹œ์ž‘ ํ•˜์—ฌ, ํ™•์ธ ํ›„ ์•„๋ž˜์™€ ๊ฐ™์ด ์—๋Ÿฌ ํŽ˜์ด์ง€๊ฐ€ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋จ

404 ์—๋Ÿฌ ํŽ˜์ด์ง€
403 ์—๋Ÿฌ ํŽ˜์ด์ง€

4. ์•…์„ฑ ์ฝ˜ํ…์ธ 

- file upload ๋ถ€๋ถ„์—์„œ ํ™•์žฅ์ž๋ฅผ ํ•„ํ„ฐ๋ง ํ•˜์ง€ ์•Š์Œ. (f_write.php)

ํŒŒ์ผ์„ ์˜ฌ๋ฆฌ๋ ค๊ณ  ํ•˜๋ฉด ํ™•์žฅ์ž๋ฅผ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

f_write.php

์œ„ ์„œ๋ฒ„ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด, input type "file"์€ ์•„๋ฌด๋Ÿฐ ํ•„ํ„ฐ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค.

 

๋Œ€์‘๋ฐฉ์•ˆ : 

4-1. input file ํƒ€์ž… ํ™•์žฅ์ž ์ œํ•œํ•˜๊ธฐ (ํด๋ผ์ด์–ธํŠธ ์ธก)

f_write.php

input type "file"์— ์˜ต์…˜ ์ค‘ accept๋ฅผ ์ด์šฉํ•˜์—ฌ, ํ™•์žฅ์ž๋ฅผ 1์ฐจ๋กœ ์ œํ•œํ•œ๋‹ค.

ํ™•์žฅ์ž๊ฐ€ ์ œํ•œ๋˜์ง€๋งŒ, ์ด๋ฅผ "burp suite"์™€ ๊ฐ™์€ porxyํˆด๋กœ ์šฐํšŒ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์„œ๋ฒ„ ์ธก์—์„œ๋„ ํ•„ํ„ฐ๋ง์„ ์ ์šฉํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

 

4-2. Apache ํ™˜๊ฒฝ์„ค์ •์—์„œ mine type ํ•„ํ„ฐ๋ง์„ ์„ค์ •ํ•œ๋‹ค.(์„œ๋ฒ„์ธก ๋Œ€์‘)
: ์›๋ž˜ centos ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ apache๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  "httpd.conf" ํŒŒ์ผ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ ์šฉํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ubuntu ์˜ ๊ฒฝ์šฐ "httpd.conf" ํŒŒ์ผ์ด ์•„๋‹Œ, "apache2.conf" ํŒŒ์ผ์ด ์กด์žฌํ•˜๋ฉฐ ์œ„ ์˜ต์…˜์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋•Œ๋ฌธ์— -> "etc -> mime.types" ํŒŒ์ผ์—์„œ ์ง์ ‘ ์ˆ˜์ •ํ•˜์˜€๋‹ค.

 

 ๊ฒŒ์‹œํŒ์˜ ๊ธ€ ๋“ฑ๋ก ๋ฐ ํŒŒ์ผ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ์— Flash ํŒŒ์ผ์ด๋‚˜ avi ๋™์˜์ƒํŒŒ์ผ, exe ์‹คํ–‰ํŒŒ์ผ ๋“ฑ ์•…์„ฑ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋Š” ์ฝ˜ํ…์ธ ๋ฅผ ์—…๋กœ๋“œ ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•ด๋‹นํ•˜๋Š” ํ™•์žฅ์ž๋ฅผ ๋ชจ๋‘ ์ง€์›Œ์ค€๋‹ค.

mime.typesํŒŒ์ผ์— avi ์ฃผ์„ ์ฒ˜๋ฆฌ
exe, bat ํ™•์žฅ์ž ์‚ญ์ œ

 

"MIME Type์ด๋ž€?"
MIME์œผ๋กœ ์ธ์ฝ”๋”ฉํ•œ ํŒŒ์ผ์€ Content-Type ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
MIME Type์€ “ํŒŒ์ผ์ข…๋ฅ˜/ํŒŒ์ผํฌ๋งท” ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ํŒŒ์ผ ํ˜•์‹์— ๋”ฐ๋ผ ๊ตฌ๋™ ํ•  ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ๋ถ„์ง€์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

 


4-3. ์ตœ์ข…์ ์œผ๋กœ ํŒŒ์ผ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋กœ์ง์— ํ™•์žฅ์ž ํ•„ํ„ฐ๋ง์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋Š” ํŽ˜์ด์ง€์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

f_write_ok.php

ํŒŒ์ผ์˜ ์ด๋ฆ„๊ณผ ํŒŒ์ผ์˜ ์‹œ๊ฐ„์„ ๋ฐ›์•„์˜จ ํ›„, ์ด์ค‘ ํ™•์žฅ์ž " . ?? "๋ถ€๋ถ„์„ "insert1" ์„ ํ†ตํ•ด ๋ถ„๋ฆฌํ•œ๋‹ค.

๋ถ„๋ฆฌ ํ›„ ํ•ด๋‹น ํŒŒ์ผ์˜ ๋‚ ์งœ + ์ด๋ฆ„(ํ™•์žฅ์ž ์ œ์™ธ) ์„ md5๋กœ ํ•ด์‹œํ™” ํ•ด์ค€ ํ›„ ๋‹ค์‹œ ํ™•์žฅ์ž๋ฅผ ๋ถ™์—ฌ์„œ

์—…๋กœ๋“œ ํ•˜๋Š” ํ˜•์‹์ด๋‹ค.

 

์ฆ‰ , ์‹œ๊ฐ„ "20210524175153" ๊ณผ ํŒŒ์ผ ์ด๋ฆ„"jvmopt.txt"๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด, .txt ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ "20210524175501jvmopt" ๋ถ€๋ถ„์„ ํ•ด์‹œํ™” ํ•œ ํ›„, 

ํ™•์žฅ์ž๋ฅผ ๋ถ™์—ฌ์ฃผ๊ณ  ์ตœ์ข…์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ์ด๋ฆ„์— ํŒŒ์ผ์„ files ๋ผ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋„ฃ์–ด์ฃผ๋Š” ํ˜•์‹์ด๋‹ค.

ํ˜„์žฌ๋Š” ํŒŒ์ผ์„ ์˜ฌ๋ฆฌ๋Š” ๊ฒฝ์šฐ, ํ™•์žฅ์ž๋ฅผ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์œ„ ์„œ๋ฒ„ ์†Œ์Šค ๋‹จ์—์„œ ํ™•์žฅ์ž๋ฅผ "ํ™”์ดํŠธ ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜"์œผ๋กœ ํ•„ํ„ฐ๋ง ํ•ด์ค€๋‹ค

 

๊ฐ„๋‹จํ•˜๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค. (if ์ ˆ ์•ˆ์— ์ •์ƒ์ ์œผ๋กœ ํŒŒ์ผ์„ ์—…๋กœ๋“œ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ์œผ๋ฉด ๋จ)

ํ•ด๋‹น ์ฝ”๋“œ๋Š” ํ™•์žฅ์ž๋ฅผ "pdf, txt, word, docx, png, jpeg, jpg" ๋งŒ ํ—ˆ์šฉ๊ฐ€๋Šฅ ํ•˜๋„๋ก ์ œํ•œํ•˜๋Š” "ํ™”์ดํŠธ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹ ํ•„ํ„ฐ๋ง"์„ ์ ์šฉํ•œ ๊ฒƒ์ด๋‹ค.

์ฝ”๋“œ๋ฅผ ์ ์šฉํ•˜๋ฉด ํ—ˆ์šฉ ํ™•์žฅ์ž์— ํฌํ•จ๋˜์ง€ ์•Š์€ ํ™•์žฅ์ž๋ฅผ ์˜ฌ๋ฆด ์‹œ, ๊ฒ€์ฆํ•˜์—ฌ ์ด๋ฅผ ์ฐจ๋‹จํ•œ๋‹ค.

 

์•„๋ž˜์™€ ๊ฐ™์ด ์ •์ƒ์ ์œผ๋กœ ํ—ˆ์šฉ๋œ ํ™•์žฅ์ž ํŒŒ์ผ์„ ์˜ฌ๋ฆฌ๋ฉด, ์—…๋กœ๋“œ๊ฐ€ ์„ฑ๊ณตํ•œ๋‹ค.

 

์ „์ฒด ์ฝ”๋“œ : ๋นจ๊ฐ„ ๋„ค๋ชจ ๋ฐ•์Šค๋Š” ์•„๋ž˜ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์กฐ๊ฑด๋ฌธ ์•ˆ์— ๋„ฃ์–ด์ค€ ๊ฒƒ์ด๋‹ค.

 

: ์œ„ ๋Œ€์‘๋ฐฉ์•ˆ์€ "ํŒŒ์ผ ์—…๋กœ๋“œ" ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ ๋Œ€์‘ ๋ฐฉ์•ˆ์ด ๋˜๊ธฐ๋„ ํ•œ๋‹ค.

 

 

 

5.  ํฌ๋กœ์Šค์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…

5-1. write.php (๊ธ€์“ฐ๊ธฐ)

์•„๋ž˜์™€ ๊ฐ™์ด ๊ฒŒ์‹œํŒ์—์„œ ๊ธ€์„ ์ž‘์„ฑ ์‹œ, ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ํ•„ํ„ฐ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค. 

๋•Œ๋ฌธ์—, ์œ„์™€ ๊ฐ™์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ ์šฉ๋˜์–ด "alert"๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

์„œ๋ฒ„ ์ฝ”๋“œ ์ค‘ write.php ์—์„œ form์— ๊ฐ’์„ write_ok.php ๋กœ ๋ณด๋‚ด๊ณ  ์žˆ๋‹ค.

"write_ok.php" ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ›์•„์˜จ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ DB์— insertํ•˜๊ณ  ์žˆ๋‹ค.

"stored xss"๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ผ์‹œ์ ์ด ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์•ˆ์— ์ €์žฅ๋˜์–ด, ๊ทธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋Š” ๊ธ€์„ ํ™•์ธ ํ•  ๋•Œ๋งˆ๋‹ค ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅํ˜•์ธ๊ฒƒ์ด๋‹ค. -> ์ฆ‰ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „ ๊ฒ€์ฆ์ด ํ•„์š”ํ•จ.

 

 

 

5-2. read.php (๋Œ“๊ธ€ ์“ฐ๊ธฐ) -> reply.php

๋Œ“๊ธ€ ๋˜ํ•œ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ํ•„ํ„ฐ๋ง์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์žˆ์–ด์„œ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ฟผ๋ฆฌ๋ฌธ ์ž…๋ ฅ ์‹œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

<img src=#  onerror =alert(1); />

์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด, read.php ์—์„œ include๋ฅผ ํ†ตํ•ด 'reply.php'๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์žˆ๋‹ค.

'reply.php' ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด form ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด 'post'๋ฐฉ์‹์œผ๋กœ reply_write.php๋กœ ๋Œ“๊ธ€์— ๋Œ€ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€, ๋‚ด์šฉ์„ ๋ณด๋‚ด์ค€๋‹ค. ์ฆ‰ "reply_write.php"ํŽ˜์ด์ง€์—์„œ ๊ฒฐ๊ตญ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๊ฐ’์„ ์ง‘์–ด๋„ฃ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—

"reply_write.php" ์†Œ์Šค์— XSS ๋Œ€์‘ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

reply.php

 

ํ•ด๋‹น ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด pw, content๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๋ฉฐ, ์•„๋ฌด๋Ÿฐ ํ•„ํ„ฐ๋ง์ด ๋˜์–ด์žˆ์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๊ฐ’์„ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ๋„ฃ์–ด,

ํ™”๋ฉด์— ์ถœ๋ ฅํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— "Stored Xss" ๊ณต๊ฒฉ์— ๋…ธ์ถœ๋œ๋‹ค.

reply_write.php

 

 

5-3. join.php (ํšŒ์› ๊ฐ€์ž…)

join.php ์›น ํŽ˜์ด์ง€ ์†Œ์Šค ์ฝ”๋“œ

ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด, maxlength์˜ ๊ฐ’์ด ๊ฐ€์žฅ ๊ธด ๊ฒƒ์ด Pw์ด๋‹ค. ๊ฒ€์ฆ ๋กœ์ง์ด ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์•„, xss ์— ์ทจ์•ฝํ•  ๋“ฏ ํ•˜๋‹ค.

์ €์žฅ๋œ pw ๊ฐ’์€ ํšŒ์›์ •๋ณด ์ฆ‰ "mypage.php"์— ๋…ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์— 'stored Xss' ์ด ๋ฐœ์ƒํ•œ๋‹ค.

์œ„์™€ ๊ฐ™์ด ์•„์ด๋””์™€ ์ด๋ฆ„ , ์ด๋ฉ”์ผ์€ ์ •์ƒ์ ์ธ ์ƒํƒœ๋กœ ์ ์šฉํ•˜๊ณ  ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ <script>๊ตฌ๋ฌธ์„ ๋„ฃ์–ด ํšŒ์›๊ฐ€์ž…์„ ํ•˜๋ฉด

mypage์— ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ ์šฉ๋˜์–ด alert ์ฐฝ์ด ๋œจ๊ฒŒ ๋œ๋‹ค.

mypage.php

์„œ๋ฒ„ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์ „, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜๋Š” ์‹œ์ ์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ฐ€์ž… ํ›„ join์ด๋ผ๋Š” ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋Š” ๋™์‹œ์— ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰ "joinAction.php" ํŽ˜์ด์ง€์—์„œ ๊ฐ’์„ ๊ฒ€์ฆํ•˜์ง€ ์•Š๊ธฐ์— ์ผ์–ด๋‚˜๋Š” ์ทจ์•ฝ์ ์ด๋‹ค.

๋”ฐ๋ผ์„œ ๋‹ค์Œ ์ค‘, id ์™€ pw, name  ๋ชจ๋‘์—์„œ ์ž…๋ ฅ ๋ฐ›๋Š” ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ์ด ํ•„์š”ํ•˜๋‹ค.

 

 

5-4. search (๊ฒ€์ƒ‰) 

 

 

๋Œ€์‘๋ฐฉ์•ˆ : 

๊ฒŒ์‹œ๋ฌผ์˜ ๋ณธ๋ฌธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ œ๋ชฉ, ๋Œ“๊ธ€, ๊ฒ€์ƒ‰์–ด ์ž…๋ ฅ ์ฐฝ, ๊ทธ ์™ธ ์‚ฌ์šฉ์ž ์ธก์—์„œ ๋„˜์–ด์˜ค๋Š” ๊ฐ’์„ ์‹ ๋ขฐํ•˜๋Š” ๋ชจ๋“  form๊ณผ 

ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์— ๋Œ€ํ•ด์„œ ํ•„ํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•จ.(์„œ๋ฒ„ ๊ฒ€์ฆ ํ•„์š”)

ํŠนํžˆ ํŠน์ˆ˜๋ฌธ์ž ํ˜น์€ ์Šคํฌ๋ฆฝํŠธ ์ •์˜์–ด ๋“ฑ์„ "php ์ •์˜ ํ•จ์ˆ˜"๋ฅผ ํ†ตํ•ด ๊ณต๋ฐฑ ํ˜น์€ ๋‹ค๋ฅธ ๋ฌธ์ž๋กœ ์น˜ํ™˜ํ•œ๋‹ค.

:์ •์˜ ํ•จ์ˆ˜

๋ฌธ์ž์—ด์„ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๊ต์ฒดํ•  ๋•Œ ์“ฐ์ด๋Š” ํ•จ์ˆ˜๋กœ str_replace()์™€ substr_replace()๊ฐ€ ์žˆ๋‹ค.
๋ณดํ†ต ๋‹จ์ˆœํžˆ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ์น˜ํ™˜ํ•  ๋•Œ๋Š” str_replace()๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ผ์ • ๊ทœ์น™์— ๋”ฐ๋ผ ๊ต์ฒดํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด substr_replace()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋”ฐ๋ผ์„œ str_replace()๋ฅผ ํ†ตํ•ด์„œ ํŠน์ • ๋ฌธ์ž ํ˜น์€ ํŠน์ˆ˜ ๋ฌธ์ž ๋“ฑ์„ ํ•„ํ„ฐ๋ง ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

"str_replace" -> (์น˜ํ™˜๋  ๋ฌธ์ž์—ด, ์น˜ํ™˜ํ•  ๋ฌธ์ž์—ด, ๋ฌธ์ž์—ด, ๋ช‡๊ฐœ ์น˜ํ™˜ ํ–ˆ๋Š”์ง€ ์ž…๋ ฅ๋ฐ›์Œ)

"substr_replace"(๋ฌธ์ž์—ด,  ์น˜ํ™˜ํ•  ๋ฌธ์ž์—ด, ์น˜ํ™˜ ์‹œ์ž‘ index, ๊ทœ์น™ํ™•์ธํ•ด์•ผํ•จ)

5-1. ๊ฒŒ์‹œํŒ ์‹œํ์–ด ์ฝ”๋”ฉ

๋‹ค์Œ ์„œ๋ฒ„ ์†Œ์Šค์™€ ๊ฐ™์ด ํ•˜๋‚˜์”ฉ ์ผ์ผ์ด ํ•„ํ„ฐ๋ฅผ ๊ฑธ์–ด์ฃผ์—ˆ๋‹ค.

write_ok.php

5-2. ๋Œ“๊ธ€ ์‹œํ์–ด ์ฝ”๋”ฉ

reply_write.php

pw์— ๋Œ€ํ•œ ๋Œ€์‘์€ ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ฐ’์„ ์‚ญ์ œํ•˜๋Š” ๋กœ์ง์—์„œ๋งŒ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ํ–ฅ์ด ์—†์œผ๋ฏ€๋กœ, content์— ๋Œ€ํ•œ ํ•„ํ„ฐ๋งŒ ๊ฑธ์–ด์ค€๋‹ค.

ํ•„ํ„ฐ๋ง ์ ์šฉ ์ดํ›„, ๊ฐ™์€ ์Šคํฌ๋ฆฝํŠธ ๋ฌธ์„ ๋Œ“๊ธ€๋กœ ์ž‘์„ฑํ•ด๋ณด๋ฉด, ์ •์ƒ์ ์œผ๋กœ ๊ฐ’์ด ๋ง‰ํžˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ์‹œํ์–ด ์ฝ”๋”ฉ ์ „ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋‚ด์šฉ๊ณผ ์ดํ›„, ์ €์žฅ๋œ ๋‚ด์šฉ์„ ๋น„๊ตํ•ด๋ณด๋ฉด ๊ฐ’์ด ๋‹ค๋ฅด๊ฒŒ ์ €์žฅ๋œ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

5-3. ํšŒ์›๊ฐ€์ž… ์‹œํ์–ด ์ฝ”๋”ฉ

pw_ck๋Š” DB์— ์ €์žฅ๋˜๋Š” ๊ฐ’์ด ์•„๋‹ˆ๋ฏ€๋กœ ๊ฒ€์ฆํ•˜์ง€ ์•Š์•˜๋‹ค. id ์™€ email ๊ฐ™์€ ๊ฒฝ์šฐ DB ์— ์ €์žฅ์‹œ ๊ธ€์ž ์ˆ˜๋ฅผ ์ œํ•œํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ณต๊ฒฉ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์ด๋ฅผ ๊ฑฐ๋ถ€ํ•œ๋‹ค. -> ๊ธธ์ด์ œํ•œ ํ•„ํ„ฐ๋ง.

๋˜ํ•œ input type ์—์„œ email์„ ์ž…๋ ฅ ์‹œ  javascript๋กœ ํด๋ผ์ด์–ธํŠธ ๋‹จ์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ๊ฒ€์ฆํ•˜์ง€ ์•Š์•˜๋‹ค. (์„œ๋ฒ„์—์„œ ๊ฒ€์ฆํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ž„, ๊ธธ์ด์— ๋Œ€ํ•œ ์ œํ•œ์ด ๊ฑธ๋ ค์žˆ์–ด์„œ ๋”ฐ๋กœ ๊ฒ€์ฆํ•˜์ง€ ์•Š์€ ๊ฒƒ)

 

์‹œํ์–ด ์ฝ”๋”ฉ ํ›„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ํšŒ์› ๊ฐ’์„ ๋น„๊ตํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•„ํ„ฐ๊ฐ€ ์ ์šฉ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๊ฒฐ๊ณผ :

ํ•„ํ„ฐ๋ง ์ „ & ํ›„

ํŠน์ˆ˜ ๋ฌธ์ž ๋ฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์œ„ํ—˜ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ํƒœ๊ทธ ๋“ฑ ๋ชจ๋‘ ๋ฌธ์ž๋ฅผ ์น˜ํ™˜ํ•ด์ฃผ๊ฑฐ๋‚˜ ์—”ํ‹ฐํ‹ฐ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ์–ด ์ค€๋‹ค

: ๊ฒฐ๊ณผ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฌธ์„ ์ž…๋ ฅํ•˜์—ฌ๋„ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ๋ฌธ์ž์—ด ์ž์ฒด๋กœ ์ธ์‹ํ•จ._

 

 

5-4. ๊ฒ€์ƒ‰์ฐฝ ์‹œํ์–ด ์ฝ”๋”ฉ

 

๊ฒ€์ƒ‰์ฐฝ์€ ์œ„์—์„œ sql injection ์„ ์‹œํ์–ด ์ฝ”๋”ฉ ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์ดˆ์ ์ธ ํŠน์ˆ˜๋ฌธ์ž ๋“ฑ์€ ๋ฐฉ์ง€ํ•˜๊ณ  ์žˆ๋‹ค.

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

๊ฒฐ๊ณผ :



์ˆ˜์ • ์ „ ์ฝ”๋“œ์—์„  ๋ฐœ์ƒํ•˜๋˜ XSS๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

์ฆ‰, ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ค์ง€ ์•Š๊ณ  ๋ฌธ์ž์—ด ์ž์ฒด๋กœ ๋ฐ›์•„๋“ค์ธ๋‹ค.

 

ํ•ด๋‹น ์ทจ์•ฝ์ ์€ 

Reflected(๋ฐ˜์‚ฌํ˜•) XSS๋Š” URL, URL ํŒŒ๋ผ๋ฏธํ„ฐ, Cookie ํŒŒ๋ผ๋ฏธํ„ฐ๋“ฑ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ ์‘๋‹ต ํŽ˜์ด์ง€์— ์‹คํ–‰๋˜๋Š” ์ทจ์•ฝ์ ์„ ์˜๋ฏธํ•œ๋‹ค.

๊ฒฐ๊ตญ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ํŠน์ • ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ ํ•ด๋‹น ์›น ํŽ˜์ด์ง€ ํ™”๋ฉด์— ์ถœ๋ ฅ ๋˜๋Š” ํ˜•ํƒœ์˜ ์ทจ์•ฝ์ ์ด๋‹ค. 

 

์ด์ „ 5-1 ~ 5.3 ๊นŒ์ง€๋Š” Stored XSSํ˜•ํƒœ๋กœ DB ์•ˆ์— ์ €์žฅ๋œ ๊ฐ’์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ๋ฐ˜์‚ฌํ˜• ์ทจ์•ฝ์ (Reflected XSS)๋Š” ์ €์žฅ๋˜์ง€ ์•Š๊ณ 

ํ•ด๋‹น url์„ ํ†ตํ•ด ์‹คํ–‰๋œ๋‹ค.

 

 

XSS์˜ ๋ฐฉ์•ˆ์€ ์ด์™ธ์—๋„ ๋‹ค์–‘ํ•˜๊ฒŒ ์กด์žฌํ•œ๋‹ค.

1. http only ์†์„ฑ ์ด์šฉํ•˜๊ธฐ
: ๋ณดํ†ต XSS์˜ ๋ชฉ์ ์€ ์ฟ ํ‚ค๋ฅผ ์Šค๋‹ˆํ•‘ ํ•˜์—ฌ, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ถŒํ•œ์„ ํš๋“ํ•˜๊ฑฐ๋‚˜ ํƒˆ์ทจํ•˜๋Š” ๋“ฑ์˜ ๋ชฉ์ ์„ฑ์„ ๊ฐ€์ง„๋‹ค. ๋•Œ๋ฌธ์— header ์˜ต์…˜ ์ค‘ httponly ์†์„ฑ์„ ํ™œ์„ฑํ™” ์‹œ์ผœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด xss๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.
(ํ•ด๋‹น ์†์„ฑ์„ ์ ์šฉํ•˜๋ฉด ์ฟ ํ‚ค ๊ฐ’์„ ํ•˜์ด์žฌํ‚น ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.)
์ถœ์ฒ˜ : http://i-bada.blogspot.com/2013/01/9.html
2. cookie.setsecure์ด์šฉํ•˜๊ธฐ
SSL ํ†ต์‹  ์ฑ„๋„ ์—ฐ๊ฒฐ ์‹œ์—๋งŒ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•˜๋„๋ก ์„ค์ •ํ•ด์ฃผ๋Š” ์ฟ ํ‚ค์˜ ์†์„ฑ์ด๋‹ค.
์ด ์„ค์ • ์—ญ์‹œ Set-Cookie ์‘๋‹ต ํ—ค๋”์—์„œ ์„ค์ •ํ•œ๋‹ค. 
ํด๋ผ์ด์–ธํŠธ์˜ ํ™˜๊ฒฝ(์›น ๋ธŒ๋ผ์šฐ์ €)์—์„œ HTTPS(SSL/TLS) ํ†ต์‹ ์ผ ๋•Œ๋งŒ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
HTTP๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•˜์ง€ ์•Š๋Š”๋‹ค.
์ฆ‰, ํ‰๋ฌธ์œผ๋กœ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ฐ€์„ฑ์ด ๋ณด์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

3. ์•ˆํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (AntiXSS) ์‚ฌ์šฉ

4. CSP (์ฝ˜ํ…ํŠธ ๋ณด์•ˆ ์ •์ฑ…) ์‚ฌ์šฉ
์ด์™ธ์—๋„ ์•„๋ž˜ ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.
1. https://www.kisa.or.kr/uploadfile/201312/201312161355109566.pdf -> XSS๋Œ€์‘๋ฐฉ์•ˆ ๋ฐ ๊ณต๊ฒฉ๊ฐœ์š”
2. CSP ๋ž€? SOP(Same-Origin Policy)์™€ CORS(Cross-Origin Resource Sharing)
->
https://core-research-team.github.io/2021-05-01/Easy-to-understand-Web-security-model-stroy-2(CSP)#3-set-cookie-httponly

์œ„ ์‚ฌ์ดํŠธ ๋‘˜๋‹ค ๋„ˆ๋ฌด ์ •๋ฆฌ๊ฐ€ ์ž˜๋˜์žˆ์–ด์„œ ๊ผญ ์ฐธ๊ณ ํ•ด๋ณด์„ธ์š”

6.  ์•ฝํ•œ ๋ฌธ์ž์—ด ๊ฐ•๋„ 

login.php ํŽ˜์ด์ง€์—๋Š” ์ž„๊ณ„์น˜๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•„์„œ, ํšŸ์ˆ˜์— ๋Œ€ํ•œ ์ œํ•œ์ด ์—†๋‹ค.

 

๋˜ํ•œ admin๊ณผ ๊ฐ™์€ ๊ด€๋ฆฌ์ž ๊ณ„์ •์— ๋Œ€ํ•œ ๋ณด์•ˆ์ด ๋งค์šฐ ์ทจ์•ฝํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ๊นจ๊ธฐ๊ฐ€ ๊ฐ„๋‹จํ•˜๋‹ค.

- ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž… ๊ณต๊ฒฉ (Brute-force attack)

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.