[Dreamhack] Level 1: php-1
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 ์ทจ์ฝ์ ]
(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) ๋์ฝ๋ฉ
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๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ํ ์ ์ ํ ๊ฒ์ฆ์ด ํ์ํ ๊ฒ์ด๋ค.
์ฆ, ์ฌ์ฉ์๊ฐ ํ์ผ ์ด๋ฆ์ด๋ ๊ฒฝ๋ก๊ฐ ์ ๋ ฅํ๋ค๋ฉด ์ ์ ํ ๊ฒ์ฆ์ ํตํด ๋ถ์ ์ ํ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฐจ๋จํด์ผ ํ๋ค.