CTF, War game

[Dreamhack] Level 1: php-1

mnzy๐ŸŒฑ 2024. 3. 12. 04:36

1. ๋ฌธ์ œ

https://dreamhack.io/wargame/challenges/46

 

php-1

php๋กœ ์ž‘์„ฑ๋œ Back Office ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. LFI ์ทจ์•ฝ์ ์„ ์ด์šฉํ•ด ํ”Œ๋ž˜๊ทธ๋ฅผ ํš๋“ํ•˜์„ธ์š”. ํ”Œ๋ž˜๊ทธ๋Š” /var/www/uploads/flag.php์— ์žˆ์Šต๋‹ˆ๋‹ค. Reference Server-side Basic

dreamhack.io

 

- ํ”Œ๋ž˜๊ทธ๊ฐ€ /var/www/uploads/flag.php์— ์กด์žฌํ•œ๋‹ค๊ณ  ๋ฌธ์ œ์— ์ œ์‹œ๋˜์–ด์žˆ๋‹ค.

- LFI ์ทจ์•ฝ์ ์„ ์ด์šฉํ•˜๋ผ๊ณ  ๋ฌธ์ œ์— ๋ช…์‹œ๋˜์–ด ์žˆ๋‹ค. 


2. ํ•ด๊ฒฐ ๊ณผ์ •

(1) ๋ฌธ์ œ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ

- ๋‹ค์šด๋กœ๋“œ ํ›„ ์••์ถ•์„ ํ’€์–ด์ฃผ์—ˆ๋‹ค. 4๊ฐœ์˜ php ํŒŒ์ผ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

- ํ•ด๋‹น ํŒŒ์ผ์„ vscode๋ฅผ ํ†ตํ•ด ์—ด์–ด๋ณด์•˜๋‹ค. 

 

 

- index.php

 

<?php
          include $_GET['page']?$_GET['page'].'.php':'main.php';
      ?>

 

์œ„ ์ฝ”๋“œ์—์„œ๋Š” index.php์—์„œ๋Š” GET ๋ฐฉ์‹์„ ํ†ตํ•ด ๋„˜์–ด์˜จ page ๊ฐ’์ด ์กด์žฌํ•˜๋ฉด main.php์˜ page.php ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋ ค๊ณ  ํ•˜๊ณ  ์žˆ๋‹ค. (๋งŒ์•ฝ page ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด main.php๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋œ๋‹ค)

 

 

(2) ์ฝ”๋“œ ํ™•์ธ

- main.php

<h2>Back Office!</h2>

 

- view.php

  • view ํŒŒ์ผ์„ ๋ณด๋ฉด, GET์„ ํ†ตํ•ด ๋ฐ›์€ fileํŒŒ์ผ์ด ์กด์žฌํ•˜๋ฉด, file์„ ๊ฐ€์ ธ์˜ค๊ณ  ์•„๋‹ˆ๋ฉด ๊ณต๋ฐฑ์„ ๊ฐ€์ ธ์˜จ๋‹ค. 
  • preg_match ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด file์˜ flag ๋ฌธ์ž์—ด์„ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์ฐจ๋‹จํ•˜๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ flag๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ํ•„ํ„ฐ๋ง์„ ์šฐํšŒํ•ด์•ผํ•œ๋‹ค๊ณ  ์ถ”์ธกํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

(3) ํŽ˜์ด์ง€ ์ ‘์†

- main.php ์ ‘์† ํ™”๋ฉด 

 

 

 

- list.php ์ ‘์† ํ™”๋ฉด

 

- flag.php ํด๋ฆญ

  • ์ฝ”๋“œ์—์„œ ํ™•์ธํ–ˆ๋˜ ๊ฒƒ๊ณผ ๊ฐ™์ด ํ•„ํ„ฐ๋ง์œผ๋กœ ์ธํ•ด ์ฐจ๋‹จ์ด ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•„ํ„ฐ๋ง์œผ๋กœ flag๋ฅผ ๊ฑธ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, hello.json์„ ํด๋ฆญํ•˜๋ฉด ๋‚ด์šฉ์ด ์ œ๋Œ€๋กœ ๋ณด์ธ๋‹ค. 

 

(4) ์šฐํšŒ ์ฒ˜๋ฆฌ

http://host3.dreamhack.games:18096/?page=view&file=../uploads/flag.php view ํŽ˜์ด์ง€์—์„œ flag๋ผ๋Š” ๊ฐ’์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— preg_match ํ•จ์ˆ˜๋กœ ํ•„ํ„ฐ๋ง์ด ๋˜์–ด Permission denied ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒ๋˜๋ฏ€๋กœ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•˜์˜€๋‹ค.

 

๋”ฐ๋ผ์„œ, ํ•„ํ„ฐ๋ง์„ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” file์„ ํ•„ํ„ฐ๋ง์ด ์กด์žฌํ•˜๋Š” view ํŽ˜์ด์ง€๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํŽ˜์ด์ง€์—์„œ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค. index.php๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์šฐํšŒํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. 

f(preg_match('/flag|:/i', $file))

 

๋ฌธ์ œ์—์„œ flag.php์˜ ์œ„์น˜๋ฅผ ์•Œ๋ ค์ฃผ์—ˆ๋‹ค. (/var/www/uploads/flag.php)

 

๋”ฐ๋ผ์„œ http://host1.dreamhack.games:17985/?page=/var/www/uploads/flag ์ฃผ์†Œ๋กœ ์ด๋™ํ•˜๋ฉด can you see $flag?๋ผ๋Š” ๋ฌธ์ž์—ด์ด ์ถœ๋ ฅ๋œ๋‹ค.

 

์ฆ‰, flag.php์˜ $flag๋ฅผ ํ™•์ธํ•ด์•ผ ํ”Œ๋ž˜๊ทธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

๊ทธ๋Ÿฐ๋ฐ ์„œ๋ฒ„ ๋‚ด์— ์žˆ๋Š” flag.php ํŒŒ์ผ์„ ์–ด๋–ป๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ์„๊นŒ?

 

์•ž์„œ ๋ฌธ์ œ์—์„œ ์–ธ๊ธ‰๋œ  "LFI vulnerability" ์—์„œ ํžŒํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

[LFI ์ทจ์•ฝ์ ]

https://mnzy.tistory.com/128

(5) ์šฐํšŒ ์ฒ˜๋ฆฌ2

์šฐํšŒ๋ฅผ ์œ„ํ•ด PHP Wrapper๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์‹ค์ œ๋กœ ์šฐ๋ฆฌ๊ฐ€ LFI ๊ณต๊ฒฉ์„ ํ•˜๋ฉด์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” wrapper๋Š” ์ •ํ•ด์ ธ์žˆ๋‹ค.

  • expect://
  • php://filter/
  • zip://

php://filter์˜ ๊ฒฝ์šฐ, ์„œ๋ฒ„์•ˆ์˜ ๋ฌธ์„œ๋“ค์„ ์—ด๋žŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. (encode ๋˜๋Š” decode์˜ ํ˜•ํƒœ๋กœ). 

www.[์›น์‚ฌ์ดํŠธ์ฃผ์†Œ]/?file=php://filter/convert.base64-encode/resource=ํŒŒ์ผ๋ช… ์ฒ˜๋Ÿผ ํ™œ์šฉํ•˜๋ฉด, base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ํŒŒ์ผ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

http://host3.dreamhack.games:19096/index.php?page=php://filter/convert.base64-encode/resource=/var/www/uploads/flag 

 

 

base64๋กœ ์ธ์ฝ”๋”ฉ๋œ flag.php ํ™•์ธ

 

PD9waHAKCSRmbGFnID0gJ0RIe2JiOWRiMWYzMDNjYWNmMGYzYzkxZTBhYmNhMTIyMWZmfSc7Cj8+CmNhbiB5b3Ugc2VlICRmbGFnPw==

 

(6) ๋””์ฝ”๋”ฉ

https://www.base64decode.org/

 

Base64 Decode and Encode - Online

Decode from Base64 format or encode into it with various advanced options. Our site has an easy to use online tool to convert your data.

www.base64decode.org

 

 

3. ๋Œ€์‘ ๋ฐฉ๋ฒ•

๋งŒ์•ฝ ์ด๊ฒŒ ์‹ค์ œ ์‚ฌ์ดํŠธ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด, LFL ๊ณต๊ฒฉ์„ ๋ฐ›์•„ ์‹ค์ œ๋กœ ์›น ์„œ๋ฒ„์˜ ํŒŒ์ผ์ด ๋…ธ์ถœ๋˜์–ด ๋ฏผ๊ฐ์ •๋ณด ๋“ฑ์ด ์œ ์ถœ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค. ๋”ฐ๋ผ์„œ php wrapper๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ๊ฒ€์ฆ์ด ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค. 

์ฆ‰, ์‚ฌ์šฉ์ž๊ฐ€ ํŒŒ์ผ ์ด๋ฆ„์ด๋‚˜ ๊ฒฝ๋กœ๊ฐ€ ์ž…๋ ฅํ•œ๋‹ค๋ฉด ์ ์ ˆํ•œ ๊ฒ€์ฆ์„ ํ†ตํ•ด ๋ถ€์ ์ ˆํ•  ๊ฒฝ์šฐ ์ด๋ฅผ ์ฐจ๋‹จํ•ด์•ผ ํ•œ๋‹ค.