๐น๏ธ ๋ชจ์ํดํน ์ฒดํ ๋์
๐น๏ธ ๋ชจ์ํดํน ์ฒดํ ๋ฐ๋ผํ๊ธฐ โถ
STEP_1) '๊ธ์ฐ๊ธฐ' ๋ฒํผ ํด๋ฆญSTEP_2) ์์์ ๊ฒ์๊ธ ๋ด์ฉ ์์ฑ ๋ฐ JSP ์น ์ ํ์ผ ์
๋ก๋ ํ '๊ธ ์
๋ก๋' ๋ฒํผ ํด๋ฆญ
STEP_3) ํ์
์ฐฝ์ ํตํด ์ ์์ ์ผ๋ก ๊ฒ์๊ธ ์
๋ก๋ ๋์์์ ํ์ธ
STEP_4) ์
๋ก๋ ๋ ๊ฒ์๊ธ ์กฐํ
STEP_5) ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ(F12)๋ฅผ ํตํด ์ฒจ๋ถ๋ ํ์ผ์ URL ์ ๋ณด ํ์ธ
STEP_6) cmd ํ๋ผ๋ฏธํฐ ๋ฐ์ดํฐ ๊ฐ(๋ฆฌ๋
์ค ๋ช
๋ น์ด ls)์ ํฌํจํ์ฌ ํ๋ํ URL ์ ๋ณด๋ก ์ ๊ทผ ์๋
STEP_7) ์ ์์ ์ผ๋ก ๋์ํ๋ ๊ฒ์ ํ์ธ
STEP_8) cmd ํ๋ผ๋ฏธํฐ ๋ฐ์ดํฐ ๊ฐ์ผ๋ก 'flag.txt' ํ์ผ์ ์ฐพ๋ ๋ช
๋ น์ด(find / -name flag.txt)๋ฅผ ํฌํจํ์ฌ ์์ฒญ ์ ํด๋น ํ์ผ์ ์์น ์ ๋ณด ํ์ธ ๊ฐ๋ฅ
STEP_9) cmd ํ๋ผ๋ฏธํฐ ๋ฐ์ดํฐ ๊ฐ์ผ๋ก 'flag.txt' ํ์ผ ์กฐํ ๋ช
๋ น์ด(cat /๊ฒฝ๋ก/flag.txt)๋ฅผ ํฌํจํ์ฌ ์์ฒญ ์ FLAG ๊ฐ ํ์ธ ๊ฐ๋ฅ
O ํ์ผ ์
๋ก๋ ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ์์คํ
๋ช
๋ น์ด๋ฅผ ์คํํ ์ ์๋ ์๋ฒ ์ฌ์ด๋ ์คํฌ๋ฆฝํธ ๋ฐ ์น ํ๋ก๊ทธ๋จ ๋ฑ ์
์์ ์ธ ํ์ผ์ ์
๋ก๋ ํ ์ ์๋ ์ทจ์ฝ์
O ๊ทผ๊ฑฐ ์๋ฃ
โ ์ฃผ์์ ๋ณดํต์ ๊ธฐ๋ฐ์์ค ๊ธฐ์ ์ ์ทจ์ฝ์ ๋ถ์ ํ๊ฐ ์์ธ ๊ฐ์ด๋(p.707)
O ํ๋จ ๊ธฐ์ค
์ํธ | ์
๋ก๋ ๋๋ ํ์ผ์ ๋ํ ํ์ฅ์ ๊ฒ์ฆ์ด ์ด๋ฃจ์ด์ง๋ ๊ฒฝ์ฐ |
์ทจ์ฝ | ์
๋ก๋ ๋๋ ํ์ผ์ ๋ํ ํ์ฅ์ ๊ฒ์ฆ์ด ์ด๋ฃจ์ด์ง์ง ์๋ ๊ฒฝ์ฐ |
O ์ ๊ฒ ๋ฐฉ๋ฒ
- ์คํฌ๋ฆฝํธ ํ์ผ (ASP, JSP, PHP, ASPX ๋ฑ)์
๋ก๋ ์๋
: ์ฌ์ฉ์ ๊ฒ์ํ์ ํ์ผ ์ฒจ๋ถ ๊ธฐ๋ฅ์ ํตํด Server Side Scriptํ์ผ ์
๋ก๋๊ฐ ๊ฐ๋ฅํ์ง ํ์ธ
: ์
๋ก๋ ๋ Server Side Scriptํ์ผ์ด ๋ธ๋ผ์ฐ์ ์ฃผ์ ์ฐฝ์์ ์คํ์ด ๊ฐ๋ฅํ์ง ํ์ธ
: ์
๋ก๋ ํ์ผ ํ์ฅ์ ์ฐํ ๊ธฐ๋ฒ ์ฌ์ฉ
: ํ์ฅ์ ๋์๋ฌธ์ ๋ณ๊ฒฝ (ex: jsp → JsP,JSp)
: ํ์ฅ์ ๋ณ๊ฒฝ (ex: jsp → jspx, jsv, jsw ๋ฑ / asp → cer, asa๋ฑ / php → php3, cgi๋ฑ)
: ์ข
๋จ ๋ฌธ์์ด ์ถ๊ฐ (Linux : .jsp → .jsp.jpg / Windows : .asp → .asp;.jpg) ์ URL ๋์ฝ๋ฉ ํ ์ฝ์
O ์กฐ์น ๋ฐฉ๋ฒ
- ์๋น์ค๋ฅผ ์ํด ํ์ฉ๋๋ ํ์ผ์ ํ์ฅ์ ์ธ์ ํ์ผ์ ์
๋ก๋๊ฐ ๋ถ๊ฐ๋ฅํ๋๋ก ๊ตฌํ
: avi, exe ๋ฑ์ ๋์์, ์คํ ํ์ผ ๋ฑ ์
์ฑ์ฝ๋๊ฐ ํฌํจ๋ ์ ์๋ ์ฝํ
์ธ ๋ฅผ ์
๋ก๋ ํ์ง ๋ชปํ๋๋ก ํํฐ๋ง ์ ์ฉ
- ํ์ผ ์
๋ก๋ ๊ธฐ๋ฅ์ด ์๋ ๋ชจ๋ ๊ณณ์ ์๋ฒ ์ฌ์ด๋ ์คํฌ๋ฆฝํธ ํ์ผ์ ์
๋ก๋ ๋ฐ ์คํ ๊ธ์ง
- ์
๋ก๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์น ๋๋ ํฐ๋ฆฌ ์ธ๋ถ๋ก ์ค์
: ์น ๋๋ ํฐ๋ฆฌ ๋ด์ ์์ด์ผ ํ๋ ๊ฒฝ์ฐ ํด๋น ์
๋ก๋ ๋๋ ํฐ๋ฆฌ์์ ์๋ฒ ์ฌ์ด๋ ์คํฌ๋ฆฝํธ ์คํ ์์ฑ ์ ๊ฑฐ
- ์ฌ์ฉ์๋ก๋ถํฐ ๊ฒฝ๋ก ๊ฐ ์
๋ ฅ ๋ฐ์ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ ๊ฒฝ๋ก๊ฐ ๋ณ์กฐ๋์ง ์๊ฒ ๊ฒ์ฆ ๋ก์ง ๊ตฌํ
: "../", "..\"๋ฑ๊ณผ ๊ฐ์ ๋ฌธ์์ด์ด ํฌํจ๋์ด ์์ ๊ฒฝ์ฐ ์๋ฌ์ฒ๋ฆฌ
: ์ง์ ๋ ์
๋ก๋ ๋๋ ํฐ๋ฆฌ ๋ฌธ์๋ง ํฌํจ๋ ์ ์๋๋ก ๊ฒ์ฆ
- ํ์ผ ๋ช
์ ๋์ํํ์ฌ ์ ์ถ ๋ถ๊ฐ๋ฅํ๋๋ก ๊ตฌํ
- ์๋ต ๊ฐ์ ์
๋ก๋ ๊ฒฝ๋ก ๋
ธ์ถ ์ ํ
- ์ฃผ๊ธฐ์ ์ผ๋ก ์
๋ก๋ ๋์ด ์๋ ํ์ผ๋ค์ ๋์์ผ๋ก ๋ฐ์ด๋ฌ์ค ๊ฒ์ฌ ์ค์
O ์ํ์ด ์ฝ๋ฉ(Secure Coding) ์์
# ์
๋ก๋ ๋๋ ํฐ๋ฆฌ ์คํ๊ถํ ์ ๊ฑฐ ๋ฐฉ๋ฒ (IIS) โถ
1. ์์ > ์ ์ดํ > ๊ด๋ฆฌ๋๊ตฌ > ์ธํฐ๋ท ์๋น์ค ๊ด๋ฆฌ์ > ๋ฑ๋ก์ ๋ณด > ํ ๋๋ ํฐ๋ฆฌ > ํด๋น ์
๋ก๋ ํด๋ ์ ํ
2. ์คํ ๊ถํ์ "์์"์ผ๋ก ์ค์
# ์
๋ก๋ ๋๋ ํฐ๋ฆฌ ์คํ๊ถํ ์ ๊ฑฐ ๋ฐฉ๋ฒ (Apache) โถ
- httpd.conf ๋ด์ฉ ์์
<Directory "/usr/local/apache">
AllowOverride FileInfo
# ์
๋ก๋ ๋๋ ํฐ๋ฆฌ์ '.htaccess' ํ์ผ ์์ฑ ํ ์๋ฒ ์คํฌ๋ฆฝํธ ์คํ ์ ํ โถ
<FileMatch "(\.(asp|aspx|cer|jsp|jspx|php|htm|html))$"> Order allow, deny
ย ย Deny from all
</FileMatch>
# JAVA โถ
.....
String fileName = file.getOriginalFilename().toLowerCase();
String fileExt = fileName.substring(fileName.lastIndexOf('.') + 1);
// ํ์ดํธ๋ฆฌ์คํธ ๋ฐฉ์์ผ๋ก ์
๋ก๋ ํ์ผ์ ํ์ฅ์๋ฅผ ์ฒดํฌํ๋ค
if( !fileExt.equals("jpg") && !fileExt.equals("png") ) {
out.println("");
return;
}
// ์
๋ก๋ ๋๋ ํฐ๋ฆฌ ์์น๋ ์น ๋๋ ํฐ๋ฆฌ์ ๋ฐ์ ์์น ์ํจ๋ค
String uploadPath = "/upload/img/";
// ํ์๋ฐ์ดํฐ ๊ฐ์ ํ์ผ ๋ช
์ผ๋ก ์ฌ์ฉํ๋ค
String timeDate = new String(date.format(today).toString();
// ํ์ฅ์ ๊ฒ์ฆ์ด ์๋ฃ๋ fileExt ํ์ฅ์ ๋ณ์ ๋ฐ์ธ๋ฉ
String uploadFilePath = uploadPath + timeDate + "." + fileExt;
/* ํ์ผ ์
๋ก๋ ๋ก์ง ์ํ */
.....
# ASP โถ
.....
fileExt = Mid(fileName, InstrRev(fileName, ".")+1)
// ํ์ดํธ๋ฆฌ์คํธ ๋ฐฉ์์ผ๋ก ์
๋ก๋ ํ์ผ์ ํ์ฅ์๋ฅผ ์ฒดํฌํ๋ค
IF fileExt <> "jpg" and fileExt <> "png" and fileExt <> "gif" Then
Response.Write("")
Response.End
End IF
// ์
๋ก๋ ๋๋ ํฐ๋ฆฌ ์์น๋ ์น ๋๋ ํฐ๋ฆฌ์ ๋ฐ์ ์์น ์ํจ๋ค
uploadPath = "E:\upload\pds\";
// ํ์๋ฐ์ดํฐ ๊ฐ์ ํ์ผ ๋ช
์ผ๋ก ์ฌ์ฉํ๋ค
timeDate = DateDiff("s", CDate("1970-01-01 00:00:00"), now()) - (9*60*60)
// ํ์ฅ์ ๊ฒ์ฆ์ด ์๋ฃ๋ fileExt ํ์ฅ์ ๋ณ์ ๋ฐ์ธ๋ฉ
uploadFilePath = uploadPath & timeDate & "." & fileExt;
/* ํ์ผ ์
๋ก๋ ๋ก์ง ์ํ */
.....
# PHP โถ
.....
$fileExt = strtolower(substr($fileName, strrpos($fileName, ".")+1));
// ํ์ดํธ๋ฆฌ์คํธ ๋ฐฉ์์ผ๋ก ์
๋ก๋ ํ์ผ์ ํ์ฅ์๋ฅผ ์ฒดํฌํ๋ค
if ($fileExt != "jpg" && $fileExt != "png" && $fileExt != "gif") {
echo "";
exit;
}
// ์
๋ก๋ ๋๋ ํฐ๋ฆฌ ์์น๋ ๋คํ๋จผํธ ๋ฃจํธ(์น ๋๋ ํฐ๋ฆฌ)์ ๋ฐ์ ์์น ์ํจ๋ค
$uploadPath = "/uploads/img/";
// ํ์๋ฐ์ดํฐ ๊ฐ์ ํ์ผ ๋ช
์ผ๋ก ์ฌ์ฉํ๋ค
$timeDate = time();
// ํ์ฅ์ ๊ฒ์ฆ์ด ์๋ฃ๋ fileExt ํ์ฅ์ ๋ณ์ ๋ฐ์ธ๋ฉ
$uploadFilePath = $uploadPath . $timeDate . "." . $fileExt;
/* ํ์ผ ์
๋ก๋ ๋ก์ง */
.....
๐น๏ธ ๋ชจ์ํดํน ์ฒดํ ๋์
๐น๏ธ ๋ชจ์ํดํน ์ฒดํ ๋ฐ๋ผํ๊ธฐ โถ
STEP_1) '๊ธ์ฐ๊ธฐ' ๋ฒํผ ํด๋ฆญSTEP_2) ์์์ ๊ฒ์๊ธ ๋ด์ฉ ์์ฑ ๋ฐ JSP ์น ์ ํ์ผ ์ ๋ก๋ ํ '๊ธ ์ ๋ก๋' ๋ฒํผ ํด๋ฆญ
STEP_3) ํ์ ์ฐฝ์ ํตํด ์ ์์ ์ผ๋ก ๊ฒ์๊ธ ์ ๋ก๋ ๋์์์ ํ์ธ
STEP_4) ์ ๋ก๋ ๋ ๊ฒ์๊ธ ์กฐํ
STEP_5) ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ(F12)๋ฅผ ํตํด ์ฒจ๋ถ๋ ํ์ผ์ URL ์ ๋ณด ํ์ธ
STEP_6) cmd ํ๋ผ๋ฏธํฐ ๋ฐ์ดํฐ ๊ฐ(๋ฆฌ๋ ์ค ๋ช ๋ น์ด ls)์ ํฌํจํ์ฌ ํ๋ํ URL ์ ๋ณด๋ก ์ ๊ทผ ์๋
STEP_7) ์ ์์ ์ผ๋ก ๋์ํ๋ ๊ฒ์ ํ์ธ
STEP_8) cmd ํ๋ผ๋ฏธํฐ ๋ฐ์ดํฐ ๊ฐ์ผ๋ก 'flag.txt' ํ์ผ์ ์ฐพ๋ ๋ช ๋ น์ด(find / -name flag.txt)๋ฅผ ํฌํจํ์ฌ ์์ฒญ ์ ํด๋น ํ์ผ์ ์์น ์ ๋ณด ํ์ธ ๊ฐ๋ฅ
STEP_9) cmd ํ๋ผ๋ฏธํฐ ๋ฐ์ดํฐ ๊ฐ์ผ๋ก 'flag.txt' ํ์ผ ์กฐํ ๋ช ๋ น์ด(cat /๊ฒฝ๋ก/flag.txt)๋ฅผ ํฌํจํ์ฌ ์์ฒญ ์ FLAG ๊ฐ ํ์ธ ๊ฐ๋ฅ
O ํ์ผ ์ ๋ก๋ ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ์์คํ ๋ช ๋ น์ด๋ฅผ ์คํํ ์ ์๋ ์๋ฒ ์ฌ์ด๋ ์คํฌ๋ฆฝํธ ๋ฐ ์น ํ๋ก๊ทธ๋จ ๋ฑ ์ ์์ ์ธ ํ์ผ์ ์ ๋ก๋ ํ ์ ์๋ ์ทจ์ฝ์
O ๊ทผ๊ฑฐ ์๋ฃ
โ ์ฃผ์์ ๋ณดํต์ ๊ธฐ๋ฐ์์ค ๊ธฐ์ ์ ์ทจ์ฝ์ ๋ถ์ ํ๊ฐ ์์ธ ๊ฐ์ด๋(p.707)
O ํ๋จ ๊ธฐ์ค
O ์ ๊ฒ ๋ฐฉ๋ฒ
- ์คํฌ๋ฆฝํธ ํ์ผ (ASP, JSP, PHP, ASPX ๋ฑ)์ ๋ก๋ ์๋
: ์ฌ์ฉ์ ๊ฒ์ํ์ ํ์ผ ์ฒจ๋ถ ๊ธฐ๋ฅ์ ํตํด Server Side Scriptํ์ผ ์ ๋ก๋๊ฐ ๊ฐ๋ฅํ์ง ํ์ธ
: ์ ๋ก๋ ๋ Server Side Scriptํ์ผ์ด ๋ธ๋ผ์ฐ์ ์ฃผ์ ์ฐฝ์์ ์คํ์ด ๊ฐ๋ฅํ์ง ํ์ธ
: ์ ๋ก๋ ํ์ผ ํ์ฅ์ ์ฐํ ๊ธฐ๋ฒ ์ฌ์ฉ
: ํ์ฅ์ ๋์๋ฌธ์ ๋ณ๊ฒฝ (ex: jsp → JsP,JSp)
: ํ์ฅ์ ๋ณ๊ฒฝ (ex: jsp → jspx, jsv, jsw ๋ฑ / asp → cer, asa๋ฑ / php → php3, cgi๋ฑ)
: ์ข ๋จ ๋ฌธ์์ด ์ถ๊ฐ (Linux : .jsp → .jsp.jpg / Windows : .asp → .asp;.jpg) ์ URL ๋์ฝ๋ฉ ํ ์ฝ์
O ์กฐ์น ๋ฐฉ๋ฒ
- ์๋น์ค๋ฅผ ์ํด ํ์ฉ๋๋ ํ์ผ์ ํ์ฅ์ ์ธ์ ํ์ผ์ ์ ๋ก๋๊ฐ ๋ถ๊ฐ๋ฅํ๋๋ก ๊ตฌํ
: avi, exe ๋ฑ์ ๋์์, ์คํ ํ์ผ ๋ฑ ์ ์ฑ์ฝ๋๊ฐ ํฌํจ๋ ์ ์๋ ์ฝํ ์ธ ๋ฅผ ์ ๋ก๋ ํ์ง ๋ชปํ๋๋ก ํํฐ๋ง ์ ์ฉ
- ํ์ผ ์ ๋ก๋ ๊ธฐ๋ฅ์ด ์๋ ๋ชจ๋ ๊ณณ์ ์๋ฒ ์ฌ์ด๋ ์คํฌ๋ฆฝํธ ํ์ผ์ ์ ๋ก๋ ๋ฐ ์คํ ๊ธ์ง
- ์ ๋ก๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์น ๋๋ ํฐ๋ฆฌ ์ธ๋ถ๋ก ์ค์
: ์น ๋๋ ํฐ๋ฆฌ ๋ด์ ์์ด์ผ ํ๋ ๊ฒฝ์ฐ ํด๋น ์ ๋ก๋ ๋๋ ํฐ๋ฆฌ์์ ์๋ฒ ์ฌ์ด๋ ์คํฌ๋ฆฝํธ ์คํ ์์ฑ ์ ๊ฑฐ
- ์ฌ์ฉ์๋ก๋ถํฐ ๊ฒฝ๋ก ๊ฐ ์ ๋ ฅ ๋ฐ์ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ ๊ฒฝ๋ก๊ฐ ๋ณ์กฐ๋์ง ์๊ฒ ๊ฒ์ฆ ๋ก์ง ๊ตฌํ
: "../", "..\"๋ฑ๊ณผ ๊ฐ์ ๋ฌธ์์ด์ด ํฌํจ๋์ด ์์ ๊ฒฝ์ฐ ์๋ฌ์ฒ๋ฆฌ
: ์ง์ ๋ ์ ๋ก๋ ๋๋ ํฐ๋ฆฌ ๋ฌธ์๋ง ํฌํจ๋ ์ ์๋๋ก ๊ฒ์ฆ
- ํ์ผ ๋ช ์ ๋์ํํ์ฌ ์ ์ถ ๋ถ๊ฐ๋ฅํ๋๋ก ๊ตฌํ
- ์๋ต ๊ฐ์ ์ ๋ก๋ ๊ฒฝ๋ก ๋ ธ์ถ ์ ํ
- ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๋ก๋ ๋์ด ์๋ ํ์ผ๋ค์ ๋์์ผ๋ก ๋ฐ์ด๋ฌ์ค ๊ฒ์ฌ ์ค์
O ์ํ์ด ์ฝ๋ฉ(Secure Coding) ์์
# ์ ๋ก๋ ๋๋ ํฐ๋ฆฌ ์คํ๊ถํ ์ ๊ฑฐ ๋ฐฉ๋ฒ (IIS) โถ
1. ์์ > ์ ์ดํ > ๊ด๋ฆฌ๋๊ตฌ > ์ธํฐ๋ท ์๋น์ค ๊ด๋ฆฌ์ > ๋ฑ๋ก์ ๋ณด > ํ ๋๋ ํฐ๋ฆฌ > ํด๋น ์ ๋ก๋ ํด๋ ์ ํ
2. ์คํ ๊ถํ์ "์์"์ผ๋ก ์ค์
# ์ ๋ก๋ ๋๋ ํฐ๋ฆฌ ์คํ๊ถํ ์ ๊ฑฐ ๋ฐฉ๋ฒ (Apache) โถ
- httpd.conf ๋ด์ฉ ์์
# ์ ๋ก๋ ๋๋ ํฐ๋ฆฌ์ '.htaccess' ํ์ผ ์์ฑ ํ ์๋ฒ ์คํฌ๋ฆฝํธ ์คํ ์ ํ โถ
# JAVA โถ
# ASP โถ
# PHP โถ