[DVWA] File Inclusion
Vulnerability: File Inclusion
File Inclusion(ํ์ผ ์คํ) ์ทจ์ฝ์ ์ ๊ณต๊ฒฉ์๊ฐ ์ง์ ํ ํ์ผ ๋ด์ ํฌํจ๋ Server Side Script ์ฝ๋๋ฅผ ์คํํ๋๋ก ํ๋ ๊ณต๊ฒฉ์ด๋ค. ๊ณต๊ฒฉ์์ ํ์ผ์ด ์น ์๋ฒ ๋ด๋ถ์ ์์ผ๋ฉด ๋ด๋ถํ์ผ์คํ(LFI, Local File Inclusion), ๋ค๋ฅธ ์๋ฒ์ ์์นํ๋ ๊ฒฝ์ฐ์๋ ์ธ๋ถํ์ผ์คํ(RFI, Remote File Inclusion)์ด๋ผ๊ณ ํ๋ค.
์ต๊ทผ์๋ PHP๊ฐ ์ธ๋ถํ์ผ์ ์ ๊ทผํ๋ ๊ฒ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ๋์ด ์์ผ๋ฏ๋ก ์ค์ ์๋น์ค์์ RFI ์ทจ์ฝ์ ์ ๊ฑฐ์ ๋ฐ์ํ์ง ์๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ธ์์ด ํ์ฐ๋๋ฉด์ LFI์ ๊ฒฝ์ฐ์๋ ํํ์ง๋ ์์ ์ทจ์ฝ์ ์ด ๋์ด๊ฐ๊ณ ์๋ค. LFI ์ทจ์ฝ์ ์ ํ์ผ์ ๋ก๋(์น์์ ๋ก๋) ์ทจ์ฝ์ ์ ๋นํด์๋ ๋งค์ฐ ๋๋ฌผ๊ฒ ๋ฐ๊ฒฌ๋๋ค๊ณ ํ๋ค.
PHP์ ๊ฒฝ์ฐ์๋ include(), include_once(), require(), require_once()์ ๊ฐ์ include() ๊ณ์ด์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด์ ๊ทธ ์ธ์๋ฅผ ๋ณ์๋ก๋ถํฐ ์ ๋ ฅ๋ฐ์ ๋ ๋ฐ์ํ๋ค. (๋ฐ๋ผ์ ์์ค ์์ค์ ์ทจ์ฝ์ ๋ถ์์์ include(), include_once(), require(), require_once() ๊ฐ์ ํจ์์ URL ๋ณ์๊ฐ์ด ์ ๋ฌ๋๋ ์ง๋ฅผ ๊ฒ์ฌํ๋ฉด LFI ์ทจ์ฝ์ ์ฌ๋ถ๋ฅผ ํ๋จํ ์ ์๋ค.
์ฌ์ฉ์ ์ ๋ ฅ๊ฐ์ ๋ฐ๋ผ LFI ์ํ๋๊ฐ ๋ฌ๋ผ์ง๋ค.
์ํ๋ (์): include($_GET['filename']);
์ํ๋ (์ค): include($_GET['filename'].'.inc');
์ํ๋ (ํ): include('include.php');
์ํ๋ (์)์ ๊ฒฝ์ฐ๋ PHP ์คํ์ ํฌํจํ ์ธ์๋ฅผ ์จ์ ํ๊ฒ ํ์ผ๋ช (filename)์์ ๋ฐ๋ ๊ฒฝ์ฐ์ธ๋ฐ, ์ด ๊ฒฝ์ฐ ์ด๋ ํ ํ์ผ์ด๋ผ๋ ์ ๋ ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ํํ๋ค.
์ํ๋ (์ค)์ ๊ฒฝ์ฐ๋ filename์ .inc ๋ฌธ์์ด์ ๋ง๋ถ์ฌ์ ํ์ผ์ ์ฐธ์กฐํ๋ ๊ฒ์ธ๋ฐ, ์ด ๊ฒฝ์ฐ์๋ incํ์ฅ์๋ฅผ ๊ฐ์ง๋ ํ์ผ์ ์ ๋ก๋ํ ์ ์๋ ๊ฒฝ์ฐ ๋งค์ฐ ์ํํ ์ ์๋ค. (๋ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ก๋ NULL-Byte Injection (%00 ์ฝ์ ) ์ด ๊ฐ๋ฅํ ํ ๊ฒฝ์ฐ์๋ ํ์ฅ์์ ์๊ด์์ด FLI ์ทจ์ฝ์ ์ด ๋ฐ์ํ ์ ์๋ค.)
์ํ๋ (ํ)์ ๊ฒฝ์ฐ๋ ํน์ ํ์ผ์ ์ง์ ํ๋ ๊ฒ์ด๋ค. ์ด ๊ฒฝ์ฐ์๋ ๊ณต๊ฒฉ์๊ฐ '์คํ ๊ฒฐ๊ณผ๋ ์ด๋ค ํ์ผ์ ์ฐธ์กฐํ๋์ง ๋ํ๋์ง ์์ผ๋ฏ๋ก' ์ฐธ์กฐ๋๋ ํ์ผ์ ์ด๋ฆ์ ์ ์ ์๊ธฐ ๋๋ฌธ์ LFI์ ๊ณต๊ฒฉ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋ฎ๋ค.
LFI vs Path Traversal
๋ด๋ถ ํ์ผ์ ์ฐธ์กฐํ๋ค๋ ์ ์์ ๋ ์ทจ์ฝ์ ์ ์๋ก ๋ฎ์์๋ค. ํ์ง๋ง ์ฐธ์กฐํ ํ์ผ ๋ด์ ์คํ์ฝ๋๊ฐ ์์ ๋ ์ด๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌํ๋ค๋ฉด LFI๋ผ๊ณ ๋ถ๋ฅธ๋ค. Server Side Script ์ฝ๋๋ฅผ ํฌํจํ์ฌ ํ์ผ์ ๋ด์ฉ์ ๊ทธ๋๋ก ์ถ๋ ฅํ๋ ๊ฒฝ์ฐ์๋ Path Traversal์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๊ฐ์ฅ ๋ํ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ด๋ถํ์ผ์ /etc/passwd ์ธ๋ฐ, ์ด ํ์ผ์๋ php ์ฝ๋๊ฐ ์์ผ๋ฏ๋ก LFI์ Path Traversal์ ๊ตฌ๋ถํ ์ ์๋ค. ๋๋ฌธ์ Path Traversal๋ณด๋ค ์ํํ LFI ์ทจ์ฝ์ ์ ์ฌ๋ถ๋ฅผ ํ๋จํ๊ธฐ ์ํด์๋ php ์ฝ๋๊ฐ ํฌํจ๋ ํ์ผ์ ์ ๋ ฅ๊ฐ์ผ๋ก ์ ๋ฌํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํด๋ณด๋ฉด ๋๋ค.
DVWA File Inclusion ์ค์ต
์ค์ต ํ๊ฒฝ
- Windows Docker๋ฅผ ์ด์ฉํ DVWA
- Windows ํ๊ฒฝ์ Burp Suite
์์ ๊ฐ์ด DVWA์ Vulnerability: File Inclusion ์ค์ต ๋ฌธ์ ์์๋ page=include.php, page=file1.php, page=file2.php, page=file3.php์ ๊ฐ์ด 4๊ฐ์ ๋ด๋ถํ์ผ์ ์ฐธ์กฐํ๋ค.
Security Level: Low
Low ๋ ๋ฒจ์ ๊ฒฝ์ฐ, Include ํ๋ผ๋ฏธํฐ์ ๋ํ ๊ฒ์ฆ์ด ์ด๋ฃจ์ด์ง์ง ์๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ด์ฉํ๋ค.
../../../../../../etc/passwd
Security Level: Medium
Medium ๋ ๋ฒจ์ ๊ฒฝ์ฐ, Redirect ๋ฐฉ์ง๋ฅผ ์ํ http:// , https://์ Path traversal ๋ฐฉ์ง๋ฅผ ์ํ ../ , ..\ ๊ฐ ํํฐ๋ง ๋์ด์๋ค.
ํ์ง๋ง ../ ๋ฅผ ๊ณต๋ฐฑ ๋ฌธ์์ด๋ก ์นํํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ..././ ๋ฅผ ์ ๋ ฅํ๋ ๊ฒฝ์ฐ ์ค๊ฐ์ ../๋ง ๊ณต๋ฐฑ์ผ๋ก ๋ฐ๋๋ค.
.(../)./ ๊ฐ ๋์ด ์ด๋ฅผ ๋ถ์ด๋ฉด ../ ๊ฐ ๋๋ ๊ฒ์ ์ด์ฉํ๋ค.
..././..././..././..././..././..././etc/passwd
Security Level: High
High ๋ ๋ฒจ์ ๊ฒฝ์ฐ ํ์ผ๋ช ์ด file๋ก ์์ํ๊ฑฐ๋, include.php ์ ํด๋นํ๋ ๊ฒฝ์ฐ์๋ง ์ ๋ ฅ์ ํ์ฉํ์๋ค.
(include ๋๋ ํ์ผ๋ช ์ด file1, file2, file3 ์ฌ์ ๊ทธ๋ ๋ค๊ณ ์๊ฐ๋๋ค.)
PHP์์ ์ฌ์ฉํ๋ URL ํ์ ์ค์ file:// ํ์์ ์ด์ฉํ ๊ฒ์ด๋ค.
ํ์ผ๋ช ์ file://๋ฅผ ๋ถ์ฌ์ ์ฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
file:///../../../../../../etc/passwd
์์ ๋ฐฉ๋ฒ์ file://๋ฅผ ์ด์ฉํ์ฌ ์ฐํํ์์ง๋ง, ์ ๋ก๋ ๊ธฐ๋ฅ์ด ์กด์ฌํ๋ค๋ฉด ํ์ผ๋ช ์ file๋ก ์์ํ๋๋ก ์ ๋ก๋ํ์ฌ ์ฐํํ๋ ๋ฐฉ๋ฒ๋ ๊ฐ๋ฅํ ์ ์๋ค.
Security Level: Impossible
Impossible ๋ ๋ฒจ์ ๊ฒฝ์ฐ, include.php, file1.php, file2.php, file3.php ์ฒ๋ผ, include์ ์๋ ๋ค์ด๊ฐ ์ ์๋ ํ์ผ๋ง ํ์ฉํ๋๋ก ํ๋ค. ์ ๋ ฅํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ํด์ง 4๊ฐ์ ํ์ผ ์ด๋ฆ์ผ๋ก๋ง ์ ํํ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ LFI ์ทจ์ฝ์ ์ด ๋ฐ์ํ ํ๋ฅ ์ ๊ฑฐ์ ์๋ค.
File Inclusion ๋์
ํ์ผ์ ์ฐธ์กฐํ์ฌ ์ฌ์ฉํ๋ File Include ๊ธฐ๋ฅ์ด ์๋ ๊ฒฝ์ฐ์๋ ํด๋น ํ๋ผ๋ฏธํฐ์ ๋ํ์ฌ ์ฌ์ฉ์๊ฐ ์ ๋ ฅ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋๋กํ๊ณ , ํ์ฉ๋ ํ์ผ๋ง์ ์ ๋ ฅ์ผ๋ก์ ๋ฐ๋๋ก ํด์ผํ๋ค.
์ง๋ฌธ ํ์, ์์ ๋ฐ ๋ณด์์ ๋ํ ์ง์ ํ์