Baby toctou๐Ÿผ Write-up

Ccr3tยท2026๋…„ 6์›” 27์ผ

Wargame

๋ชฉ๋ก ๋ณด๊ธฐ
83/87

[Solved in under 7 minutes]

ํ•  ๋ง ์—†๋‹ค. ๋…œ์—~

๊ฐ€๋ณด์ž



์‰˜์ด ์—ด๋ฆฐ๋‹ค ๋ฐ”๋กœ ์•„๋ฌด ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด ํŒŒ์ผ์„ ๋ณด์ž

๋ญ ํŒŒ์ผ์ด ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ๋ณด์ธ๋‹ค

cat ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์•„๋ฌด๊ฑฐ๋‚˜ ๋ณด์ž

๋ณด์•„ํ•˜๋‹ˆ ์ฃผ์–ด์ง„ ๋ช…๋ น์–ด๋งŒ ์ณ์•ผ ํ•œ๋‹ค.

๋ง์„ ๊ณฑ๊ฒŒ ๋“ค์œผ๋ฉฐ api.php๋ฅผ ๋ณด์ž

<?php
  // system($_GET['q']);
  if(!preg_match('/^[a-f0-9]+$/',$_COOKIE['baby_toctou'])){ $newCookie = uniqid().rand(1,999999999); setcookie("baby_toctou",$newCookie); $_COOKIE['baby_toctou'] = $newCookie; }
  $cmd = $_GET['q'];
  $myfile = fopen("user/{$_COOKIE['baby_toctou']}.sh", "w") or die("Unable to open file!");
  fwrite($myfile, $cmd);
  fclose($myfile);
  if(($cmd === "ls") || ($cmd === "cat api.php") || ($cmd === "cat index.php")){ // valid check
    sleep(1); // my server is small and weak
    system("sh ./user/{$_COOKIE['baby_toctou']}.sh");
  }
  else{
    echo <<<HELP
only "ls", "cat api.php", "cat index.php" allowed
HELP;
  }
?>

TOCTOU ๋ฌธ์ œ๋ž€๋‹ค

์—ฌ๊ธฐ์„œ ํฌ์ธํŠธ๋Š” valid check ํ•˜๊ณ  sleep(1) ๊ฐ€ ๊ฑธ๋ ค์žˆ์œผ๋‹ˆ ๋‹จ๊ธฐ๊ฐ„์•ˆ์— ๋น ๋ฅธ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ง‘์–ด๋„ฃ์œผ๋ฉด ๋ช…๋ น์–ด๊ฐ€ ๋จนํž์ง€๋„ ๋ชจ๋ฅธ๋‹ค.

์ฆ‰, 1์ดˆ ์‚ฌ์ด์— ๊ฐ™์€ baby_toctou ์ฟ ํ‚ค๋กœ ๋‹ค๋ฅธ ์š”์ฒญ์„ ๋ณด๋‚ด์„œ ํŒŒ์ผ ๋‚ด์šฉ์„ ์›ํ•˜๋Š” ๋ช…๋ น์–ด๋กœ ๋ฎ์–ด์“ฐ๋Š” ์›๋ฆฌ

๋ ˆ์ด์Šค์ปจ๋””์…˜์œผ๋กœ ๋ฐ”๋กœ ํ’€์–ด๋ณด์ž

๋งŽ์€ ์–‘์„ ์‹œ๋„ํ• ๋•Œ๋Š” ์ธํŠธ๋ฃจ๋”๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ sleep(1) ์ด๋‹ˆ ์ด๊ฑธ๋กœ๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค.
์ผ๋‹จ ์ธํ„ฐ์…‰ํŠธ๋ถ€ํ„ฐ ํ•ด๋ณด์ž

์ธํ„ฐ์…‰ํŠธ ์ผœ์„œ ํŒจํ‚ท ์žกํžˆ๊ฒŒ ํ•ด๋‘๊ณ 

์ฒ˜์Œ์—๋Š” ํ—ˆ์šฉํ•˜๋Š” ๋ฒ”์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๊ณ 
๊ทธ ์ดํ›„์— ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ ์‚ฝ์ž…์ด ๋˜๊ฒŒ ํ–ˆ๋‹ค.

์ธํ„ฐ์…‰ํŠธ๋กœ ์žก๊ณ  ์žˆ์–ด์„œ ์‚ฌ์‹ค์ƒ ํŒจํ‚ท์€ ์•„์ง ์•ˆ ๊ฐ„ ์ƒํƒœ๋‹ค ๋‚ด๊ฐ€ ๋ถ™์žก๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ๋‹น

ํŒจํ‚ท์ด ๋‘๊ฐœ ์žกํžˆ๊ณ 
์ฒซ๋ฒˆ์งธ๋Š” ls, ๋‘๋ฒˆ์งธ๋Š” cat flag.php ๋‹ค

์—ฌ๊ธฐ์„œ ์ธํ„ฐ์…‰ํŠธ๋ฅผ ๊บผ์ฃผ๋ฉด?

์ธํ„ฐ์…‰ํŠธ๊ฐ€ ์ผœ์ ธ์žˆ๋‹ค๊ฐ€ ๋„๋ฉด ํŒจํ‚ท๋“ค์ด ์ˆœ์„œ๋Œ€๋กœ ๋น ๋ฅด๊ฒŒ ์š”์ฒญ๋œ๋‹ค.

์‹ค๋ฌด์—์„œ๋Š” ํŒจํ‚ท 100๊ฐœ๋ฅผ ํ•œ๋ฒˆ์— ์˜๋Š” ๊ทธ๋Ÿฐ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ์•ˆํ•ด๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค.

์˜ˆ? ๋ฐ”๋กœ ํ’€๋ ธ๋‹ค.

๊ฐ€์ง€๊ณ  ๊ฐ€๋ณด์žฅ

ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก ๋‹ต ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก

FLAG{Mama_i_know_how_toctou_works}

ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก

์—„๋งˆ! ๋‚˜ TOCTOU๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ๊ฒŒ ๋˜์—ˆ์–ด์š”!!

๋ ˆ์ด์Šค์ปจ๋””์…˜์— ๋Œ€ํ•ด์„œ ์‹ค์Šตํ•˜๊ธฐ์— ์ข‹์€ ๋ฌธ์ œ ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

Webhacking.kr Baby toctou๐Ÿผ Write-up

์ด์ƒ ๋ณด๊ณ  ๋!

profile
ํ•ดํ‚น์„ ์ž˜ ๋ชป ํ•˜์ง€๋งŒ ์ข‹์•„ ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋Š” ํ•œ ์ฒญ๋…„.

0๊ฐœ์˜ ๋Œ“๊ธ€