Archive for Dev. (junyup2)

์ง€์‹์„ ์ฑ„์›Œ๊ฐ€๋Š” ใ€Ž๊ฐœ๋ฐœ์ž/ํ™”์ดํŠธํ•ด์ปคใ€๋ฅผ ๋ชฉํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ธ”๋กœ๊ทธ

Practice/DVWA

[DVWA] File Inclusion

Gearvirus(junyup2) 2024. 4. 9. 19:55

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 ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋„๋กํ•˜๊ณ , ํ—ˆ์šฉ๋œ ํŒŒ์ผ๋งŒ์„ ์ž…๋ ฅ์œผ๋กœ์„œ ๋ฐ›๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

์งˆ๋ฌธ ํ™˜์˜, ์ˆ˜์ • ๋ฐ ๋ณด์™„์— ๋Œ€ํ•œ ์ง€์  ํ™˜์˜