Archive for Dev. (junyup2)

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

๋ชจ์˜ ํ•ดํ‚น ์Šคํ„ฐ๋””/๋ชจ์˜ ํ•ดํ‚น - ๊ธฐ๋ก์ผ์ง€

[๊ธฐ๋ก์ผ์ง€] ๐Ÿ“š 15์ฃผ์ฐจ (File Upload ๋Œ€์‘·์šฐํšŒ / FLI(File Include) / File Download ์ทจ์•ฝ์ )

Gearvirus(junyup2) 2024. 2. 15. 01:11

File Upload ๋Œ€์‘·์šฐํšŒ

File Upload Vuln

ํŒŒ์ผ ์—…๋กœ๋“œ ์ทจ์•ฝ์ ์€ ๊ณต๊ฒฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์ž„์˜์˜ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ ์ด๋‹ค.

์—…๋กœ๋“œ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋์ด ์•„๋‹ˆ๊ณ  ํ•ด๋‹น ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์—…๋กœ๋“œํ•œ ํŒŒ์ผ์˜ ์ •ํ™•ํ•œ ๊ฒฝ๋กœ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

~~/~~/webshell.php?cmd=

์›น ์ƒ์— ํŒŒ์ผ์ด ์œ„์น˜ํ•œ ๊ฒฝ๋กœ๋ฅผ ์•Œ์•„์•ผ ์œ„์™€ ๊ฐ™์ด ๋ช…๋ น์–ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„ฃ์–ด์„œ ์š”์ฒญํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ •ํ™•ํ•œ ๊ฒฝ๋กœ๋ฅผ ์•Œ์ง€ ๋ชปํ•˜์—ฌ ํŒŒ์ผ์„ ์—…๋กœ๋“œ ํ–ˆ๋”๋ผ๋„ ์š”์ฒญ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋ฌด์šฉ์ง€๋ฌผ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋ฅผ ์ˆจ๊ธฐ๊ณ , ๊ฒฝ๋กœ๋ฅผ ์•Œ์ง€ ๋ชปํ•˜๋„๋ก ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์•Œ๊ธฐ ํž˜๋“ค๊ฒŒ ํ•ด๋†“๋Š” ๊ฒƒ์€ ๋ฌผ๋ก  ํ™•์žฅ์ž๋Š” ๊ทธ๋Œ€๋กœ์ง€๋งŒ, ํŒŒ์ผ๋ช…์„ ๋ฐ”๊พธ์–ด์„œ ์ €์žฅ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ผ๋ฐ˜์  (๊ทธ๋Œ€๋กœ ์ €์žฅ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€ ์•Š๋‹ค.) ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์•Œ์•„๋‚ด์•ผ ํ•œ๋‹ค.

ex) webshell.php -> Fu0C.sfctifmm.php

์ฆ‰, ํŒŒ์ผ์ด ์ €์žฅ๋œ ์ •ํ™•ํ•œ ์œ„์น˜์™€ ํ•จ๊ป˜, ํ•ด๋‹น ํŒŒ์ผ์˜ ์ €์žฅ๋œ ์ด๋ฆ„์„ ํฌํ•จํ•œ ์™„์ „ํ•œ ๊ฒฝ๋กœ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํŒŒ์ผ ์—…๋กœ๋“œ ๊ณต๊ฒฉ์˜ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๊ณต๊ฒฉ์€ ์›น์‰˜(Webshell) ๊ณต๊ฒฉ์œผ๋กœ, File Upload ๊ณต๊ฒฉ๊ณผ ์›น์‰˜์„ ๋™์ผ์‹œ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ผ๋ฐ˜์ ์ด๋‹ค.

 

์›น์‰˜(Webshell)

์›น์‰˜(Webshell)๊ณต๊ฒฉ์€ ์„œ๋ฒ„ ์ธก์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฒฉ์„ ๋งํ•œ๋‹ค.

์›น์‰˜ํŒŒ์ผ์€ ํŒŒ์ผ ์—…๋กœ๋“œ๋‚˜ ์ทจ์•ฝ์ ์„ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„์— ์—…๋กœ๋“œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹จ๋…ํŒŒ์ผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์œผ๋กœ ๋‹จ์ผ ํŒŒ์ผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌ์„ฑ๋œ ์›น์‰˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

ํ•œ์ค„ ์›น์‰˜ / Single-line Webshell / One-line Webshell / ์ผ๊ตฌํ™”๋ชฉ๋งˆ(ๅŽ้—จๆœจ้ฉฌ)โ€‹ ๋ผ๊ณ  ๋ถˆ๋ฆฌ์šฐ๋ฉฐ php๋ฅผ ์˜ˆ์‹œ๋กœ ๋“ค๋ฉด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

<?php system($_GET['cmd']); ?>

์›น์‰˜ํŒŒ์ผ์€ ํ•ด๋‹น ์„œ๋ฒ„์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•ด์•ผ ํ•œ๋‹ค.

์—…๋กœ๋“œํ•œ๋‹ค๊ณ  ๋์ด ์•„๋‹ˆ๊ณ  ์ด ํŒŒ์ผ์„ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ํ•ด๋‹น ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ์‹คํ–‰์— ๋Œ€ํ•œ ์ž˜๋ชป๋œ ์ •๋ณด๋“ค์ด ๋งŽ์ด ์กด์žฌํ•œ๋‹ค.


์ž˜๋ชป ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋Š” ์šฐํšŒ๊ธฐ๋ฒ•

(*) Image Web Shell

ํŒŒ์ผ์„ ์˜ฌ๋ฆด๋•Œ webshell.php๋กœ ์ €์žฅํ–ˆ๋”๋‹ˆ ์—…๋กœ๋“œ๊ฐ€ ์•ˆ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

๊ทธ๋Ÿฐ๋ฐ? webshell.php.jpg๋กœ ์˜ฌ๋ ธ๋”๋‹ˆ ์ €์žฅ๋˜๊ณ  ์‹คํ–‰๋„๋œ๋‹ค?! ๋ผ๋Š” ๋ง์ด๋‹ค.

| ๊ฒฐ๋ก ์€ ๋ถˆ.๊ฐ€.๋Šฅ ํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์‹คํ–‰๋  ์—ฌ์ง€๊ฐ€ ์—†๋‹ค.

 

Double Extension

File Upload Bypass ๊ธฐ๋ฒ•์œผ๋กœ์„œ ์ด์ค‘ํ™•์žฅ์ž(double extension)๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค.

ํŒŒ์ผ์„ ์˜ฌ๋ฆด๋•Œ webshell.php๋กœ ์ €์žฅํ–ˆ๋”๋‹ˆ ์—…๋กœ๋“œ๊ฐ€ ์•ˆ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ ์ƒํƒœ์—์„œ ์œ„์˜ ํ™•์žฅ์ž์™€ ๋ฐ˜๋Œ€๋กœ webshell.jpg.php์™€ ๊ฐ™์€ ํ™•์žฅ์ž์˜ ํŒŒ์ผ์ธ๋ฐ ์—…๋กœ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ–ˆ๋‹ค?!

๋งŒ์•ฝ์— ์œ„์˜ ๋ฐฉ์‹์ด ๊ฐ€๋Šฅํ–ˆ๋‹ค๋ฉด ์ด๊ฒƒ์€ ์„ฑ๊ณต์ ์ธ Bypass ๊ธฐ๋ฒ•์ธ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ด ์ž˜๋ชป๋œ ๊ฒƒ์ด๋‹ค.

ํŒŒ์ผ ์—…๋กœ๋“œ์˜ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐœ๋ฐœ์„ ์ž˜๋ชปํ•œ ๊ฒƒ์ธ๋ฐ, (.)์„ ๊ธฐ์ค€์œผ๋กœ split์„ ํ•ด์„œ ๊ตฌํ˜„์„ ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ฐ€์žฅ ์•ž์˜ (.)์„ ๊ธฐ์ค€์œผ๋กœ๋งŒ ์ €์žฅ์„ ํ•œ๋‹ค๋ฉด? ์‹ค์ œ ์ €์žฅ๋  ๋•Œ๋Š” webshell.jpg.php๋กœ ์ €์žฅ๋˜์ง€๋งŒ, .(jpg)๋กœ ์ธ์‹๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

Double Encoding (feat. War Game)

webshell.php.jpg ๋ผ๊ณ  ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์ด php๋กœ์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น ์ทจ์•ฝ์ ์€ ์›Œ๊ฒŒ์ž„ ์ธก์—์„œ (.php.jpg...)์™€ ๊ฐ™์€ ๋”๋ธ” ์ธ์ฝ”๋”ฉ์ด๋ผ๋Š” ๊ธฐ๋ฒ•์ด ์žˆ๋‹ค... ๋ผ๊ณ  ์ผ๋ถ€๋Ÿฌ ๋งŒ๋“ค์–ด๋†“์€ ๊ฒƒ์œผ๋กœ ์‹ค์กดํ•˜๋Š” ์ทจ์•ฝ์ ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ ์‹ค์ œ๋กœ webshell.php.jpg๋ผ๊ณ  ์ €์žฅ๋˜์–ด ์žˆ๋Š”๋ฐ ์›น์„œ๋ฒ„๊ฐ€ ๊ฐ‘์ž๊ธฐ ๋’ท๋ถ€๋ถ„์„ ์ž˜๋ผ๋จน๊ณ  webshell.php๋ผ๊ณ  ์ธ์‹ํ•œ๋‹ค? ๋Š” ๊ฒƒ์€ ๋ง์ด ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

webshell.php.jpg๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด?! webshell.jpg๋กœ ๋„ฃ์–ด๋„ ๊ฐ€๋Šฅํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์œผ๋กœ์„œ ๊ฒฐ๋ก ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํ™•์žฅ์ž๋ฅผ ์†์ด๋Š” ๋ฐฉ๋ฒ•

์•…์„ฑ์ฝ”๋“œ ์œ ํฌ๋ฅผ ์œ„ํ•ด, ํ™•์žฅ์ž๋ฅผ ์†์ด๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณด์ž.

NULL Byte Injection

webshell.php%00.jpg

(%00) NULL ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ .jpg ๋ถ€๋ถ„์ด ๋‚ ์•„๊ฐ€๋Š” ๊ฒƒ์œผ๋กœ ์‹ค์ œ๋กœ๋Š” webshell.php์™€ ๋™์ผํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

.htaccess ํŒŒ์ผ

(.htaccess)๋Š” ์›น ์„ค์ • ํŒŒ์ผ๋กœ์„œ ์•„ํŒŒ์น˜(Apache) ์„œ๋ฒ„์—์„œ ์‹คํ–‰ํ•  ํ™•์žฅ์ž๋ฅผ ์ง€์ •ํ•˜๋Š” ํŒŒ์ผ์ด๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ˆจ๊น€์ฒ˜๋ฆฌ ๋˜์–ด ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋ฎ์–ด ์“ฐ๋Š” ๊ฒฝ์šฐ, ํ˜น์€ ์—…๋กœ๋“œํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์›ํ•˜๋Š” ํ™•์žฅ์ž์˜ ํŒŒ์ผ์„ ๋งˆ์น˜ ์‹คํ–‰ํŒŒ์ผ ์ฒ˜๋Ÿผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.  (ls -> ์ˆจ๊น€ ํŒŒ์ผ -> ls +al)

์ฆ‰ ๋‹ค์Œ๊ณผ ๊ฐ™์ด .jpg , .png๋ฅผ .php๋กœ ์‹คํ–‰ํ•˜๋ผ ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

AddType application/x-httpd-php .jpg .png

๋Œ€์ฒดํ•  ํ™•์žฅ์ž์— ๋Œ€ํ•˜์—ฌ๋Š” ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” ํ™•์žฅ์ž๊ฐ€ ์•„๋‹ˆ์—ฌ๋„ ๋œ๋‹ค. ์›ํ•˜๋Š”๋Œ€๋กœ ํ™•์žฅ์ž ๋ช…์„ ์ž…๋ ฅํ•˜๊ณ  ์ด๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

AddType application/x-httpd-(์‹คํ–‰ํ•˜๋Š” ํ™•์žฅ์ž) .(๋Œ€์ฒดํ•  ํ™•์žฅ์ž1) .(๋Œ€์ฒดํ•  ํ™•์žฅ์ž2) .(๋Œ€์ฒดํ•  ํ™•์žฅ์ž3)
(AddType MIME_TYPE FILE_EXTENSION)

์„œ๋ฒ„์—์„œ ์‹คํ–‰๋  ํ™•์žฅ์ž ๊ทœ์น™์„ ์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋งŒ ์˜ํ–ฅ์„ ๋ฐ›๊ฒŒ๋œ๋‹ค.

 

File Upload์˜ ๋Œ€์‘๋ฐฉ์•ˆ(๋ถˆ์ถฉ๋ถ„)

ํŒŒ์ผ ์ด๋ฆ„ ๋‚œ๋…ํ™”

์ €์žฅ๋˜๋Š” ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ๊ฐ์ถ”๋Š” ์ „๋žต์œผ๋กœ์„œ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๋‚œ๋…ํ™”ํ•˜์—ฌ ์ถ”์ธกํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํŒŒ์ผ์— ํ‘œ๊ธฐ๊ฐ€ ์•ˆ๋  ๋ฟ ์•„๋‹ˆ๋ผ, ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ถ”์ธกํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋‹ค์šด๋กœ๋“œ๋ฅผ ํ•˜๋Š”๋ฐ ์—…๋กœ๋“œ ๊ฒฝ๋กœ๋ฅผ ๋ชจ๋ฅผ ์ˆ˜๊ฐ€ ์žˆ๋‚˜? YES

์—…๋กœ๋“œํ•œ ํŒŒ์ผ์„ ์›น ๊ฒฝ๋กœ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•ด๋‘๊ณ , ๊ทธ๊ฒƒ์„ ์ง์ ‘ ์ ‘๊ทผํ•ด์„œ ๋‹ค์šด๋กœ๋“œ ํ•˜๋„๋กํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
~~/uploads/files/poc.php
์œ„์˜ ๊ฒฝ๋กœ์— ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ฒฝ๋กœ๋ฅผ ์•Œ๊ธฐ ์‰ฌ์›Œ ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ์— ์ธ๊ฐ€ ์ทจ์•ฝ์  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.(๋กœ๊ทธ์ธํ•œ ์‚ฌ๋žŒ๋งŒ ํŒŒ์ผ์„ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ํ•ด์ฃผ์„ธ์š”. ๋ผ๊ณ  ํ•˜๋”๋ผ๋„) ์ด ๋ฐฉ์‹์€ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฒฝ๋กœ๋ฅผ ๋ชจ๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
download.php?filePath=
download.php?boardId=
download.php?fileId=
์œ„์™€ ๊ฐ™์ด ๋‹ค์šด๋กœ๋“œ๋ฅผ ์œ„ํ•œ ๊ธฐ๋Šฅ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด๋‘๊ณ ,  db์—์„œ ์กฐํšŒํ•œ๋‹ค์Œ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ ๊ฒฝ๋กœ๋ฅผ ๋ชจ๋ฅผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
DB์—๋Š” ํŒŒ์ผ์˜ id์™€ ํŒŒ์ผ๋ช… ๊ฒฝ๋กœ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์™€์„œ DB์—์„œ ์กฐํšŒ๋ฅผ ํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

<?
php user ํ™•์ธ : gear
(ํ—ˆ๊ฐ€๋œ ์‚ฌ๋žŒ๋งŒ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌํ˜„)
?>

ํ•˜์ง€๋งŒ ํ•ด๋‹น ๋Œ€์‘๋ฐฉ์•ˆ์˜ ๊ฒฝ์šฐ SQL Injection ์ทจ์•ฝ์ ์œผ๋กœ ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ๋…ธ์ถœ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ž ์žฌ์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” ์กฐ๊ฑด๋ถ€ ๋Œ€์‘ ๋ฐฉ์•ˆ์œผ๋กœ์„œ ์–ธ์ œ๋“ ์ง€ ๋šซ๋ฆด ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ๊ฒŒ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์ถ”์ฒœํ•˜์ง€ ์•Š๋Š” ๋Œ€์‘๋ฐฉ๋ฒ•์œผ๋กœ ๋ฏธํกํ•œ ๋Œ€์‘๋ฐฉ๋ฒ•์— ํ•ด๋‹นํ•œ๋‹ค.

> ํ”„๋กœํ•„ ์‚ฌ์ง„์˜ ๊ฒฝ์šฐ ๊ฒฝ๋กœ๊ฐ€ ๋…ธ์ถœ๋  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ๊ทธ ์ด์œ ๋Š” Web Page์—์„œ <img> ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (๋ถˆ์ถฉ๋ถ„ํ•œ ์ธ๊ฐ€ ์ทจ์•ฝ์ ์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ•œ๋‹ค.)

 

ํ™•์žฅ์ž ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ๋ง

Content-Type Header๋ฅผ ์ด์šฉํ•˜๋ฉด ํŒŒ์ผ ์ด๋ฆ„์˜ ๋‚œ๋…ํ™” ๋ณด๋‹ค๋Š” ์กฐ๊ธˆ ๋” ์•ˆ์ „ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ—ˆ์šฉ๋˜๋Š” ํ™•์žฅ์ž์˜ ๊ฐ’์œผ๋กœ ๋ณ€์กฐ๋œ packet์„ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ %00 ๊ณผ ๊ฐ™์€ NULL Injection์œผ๋กœ ์šฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•  ์—ฌ์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค. 

์ผ๋ฐ˜์ ์ธ php์˜ MIME Type

Content-type: application/x-php

์œ„์™€ ๊ฐ™์ด php๋กœ ๋˜์–ด ์žˆ๋Š” ํ™•์žฅ์ž๋ฅผ ์—…๋กœ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ™•์žฅ์ž๋กœ ๋ณ€์กฐํ•˜์—ฌ ์†์ด๋Š” ๊ฒƒ์ด๋‹ค.

Content-type: image/jpeg

 

File Extension ํ™•์ธ

์ž˜๋ชป๋œ file extension์˜ ๊ฒ€์ฆ ๋กœ์ง์˜ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์€ ์šฐํšŒ ๊ธฐ๋ฒ•์ด ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ๋‹ค.

1) NULL Byte Injection์„ ์ด์šฉํ•˜์—ฌ ์šฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
webshell.php%00..jpg

2) ๋Œ€์†Œ๋ฌธ์ž์˜ ๊ฒ€์‚ฌ๊ฐ€ ๋ฏธํกํ•œ ๊ฒฝ์šฐ์—๋„ ์šฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
php -> pHp, phP

3) Alternative File Extensions์„ ์‚ฌ์šฉํ•ด์„œ ์šฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
https://book.hacktricks.xyz/pentesting-web/file-upload

 

ํŒŒ์ผ์˜ ์‹œ๊ทธ๋‹ˆ์ณ ํ™•์ธ

ํŒŒ์ผ ๊ฒ€์ฆ ๋กœ์ง์œผ๋กœ์„œ ํŒŒ์ผ ๊ฒ€์ฆ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ํŒŒ์ผ์˜ ์‹œ๊ทธ๋‹ˆ์ณ(File Signature)๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

File Signature๋Š” file์˜ ๋งจ ์ฒซ๋ถ€๋ถ„์— ํ•ด๋‹น ํ™•์žฅ์ž์— ๋Œ€ํ•œ ์‹œ๊ทธ๋‹ˆ์ณ๊ฐ€ ๋‹ด๊ฒจ์ ธ ์žˆ๋Š”๋ฐ ์ด๋ฅผ ๋งํ•œ๋‹ค.

http://forensic-proof.com/archives/300

 

ํŒŒ์ผ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๋ชจ์Œ (Common File Signatures) | FORENSIC-PROOF

 

forensic-proof.com

ํŒŒ์ผ ๊ฒ€์ฆ ๋กœ์ง์— ๋Œ€ํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜, ์ง์ ‘ ์ œ์ž‘ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ œ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด,  ์ด๊ฒƒ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ๋‹ค๋ฅธ ํ™•์žฅ์ž๋กœ์„œ ์ธ์‹ํ•˜๋„๋ก ํ•˜๊ฑฐ๋‚˜, ํ•ด๋‹น ํ™•์žฅ์ž์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ํŒŒ์ผ ๊ฐ€์žฅ ๋’ท์ชฝ์— ์›น์‰˜์„ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒฝ์šฐ์— ์šฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

File Upload์˜ ๋Œ€์‘๋ฐฉ์•ˆ(์—ฌ์ง€๊ฐ€ ์—†๋Š” ๋ฐฉ๋ฒ•)

BLOB / CLOB

DB์— ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ์„œ BLOB / CLOB ํŒŒ์ผ ํ˜•์‹์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํŒŒ์ผ ์—…๋กœ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ทผ๋ณธ์ ์ธ ์›์ธ์€ ์›น ์„œ๋ฒ„์— ํŒŒ์ผ๋กœ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด์—ˆ๋Š”๋ฐ, ์ด๊ฒƒ์„ DB ํ…Œ์ด๋ธ” ์•ˆ์— ์ €์žฅํ•œ๋‹ค๋ฉด? ์‹คํ–‰๋  ์—ฌ์ง€๊ฐ€ ์—†์–ด์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” DB๊ฐ€ ๋ชจ์ž๋ž„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํŒŒ์ผ ์ €์žฅ ์„œ๋ฒ„๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

NAS

ํŒŒ์ผ ์ €์žฅ ์„œ๋ฒ„๋กœ์„œ ํ•ด๋‹น ์„œ๋ฒ„๋Š” ์›น ์„œ๋ฒ„์™€ ์™„์ „ ๋ถ„๋ฆฌํ•˜๊ณ  ํ•ด๋‹น ํŒŒ์ผ์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ์—ฌ์ง€๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์œผ๋ฉด๋œ๋‹ค.

๋™์  ํŽ˜์ด์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด Web Server์— WAS๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ๋™์ž‘ํ•˜๋“ฏ์ด ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๋Š” NAS Server๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. 

WEB - WAS - DB
WEB - NAS

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ NAS Server์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„์ธก ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์ด ๊ตฌ์ถ•๋˜์–ด ์žˆ์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ํŒŒ์ผ์„ ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœํ•˜๋Š”๋ฐ, ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.

์ฆ‰ php ํŒŒ์ผ์„ ์ €์žฅํ•œ๋‹ค๋ฉด php ์ž์ฒด๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰ ์ž์ฒด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.


Webshell์˜ ๋‹จ์ 

์›น์‰˜(webshell)์„ ์˜ฌ๋ ค์„œ cmd ๋ช…๋ น์„ ํ†ตํ•ด ๊ฒฝ๋กœ๋ฅผ ์ด๋™ํ•˜๋ฉฐ, ๋‚ด๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•˜์—ฌ ๋‹จ.๋ฐœ.์„ฑ ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ํ•œ๋ฒˆ ๋ช…๋ น์„ ์ž…๋ ฅํ•˜๊ณ  ๋‚˜๋ฉด ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— ์œ ์ง€๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹ค์‹œ ๊ธฐ์กด์˜ ๊ฒฝ๋กœ๋กœ ๋Œ์•„์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฝ๋กœ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž…๋ ฅํ•ด์ค˜์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰ ์ผํšŒ์„ฑ/ํœ˜๋ฐœ์„ฑ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒํƒœ์— ๋Œ€ํ•œ ์ €์žฅ์ด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Reverse Shell์ด ํ•„์š”ํ•˜๋‹ค.


FLI(File Include)์ทจ์•ฝ์ 

Webshell ์ทจ์•ฝ์ ์˜ ์ž๋งคํ’ˆ๊ฒฉ์ธ ์ทจ์•ฝ์ ์œผ๋กœ File Include ์ทจ์•ฝ์ (File Inclusion)์ด ์žˆ๋‹ค.

include / include_once / require / require _once

์œ„์™€ ๊ฐ™์€ including ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ณณ์—์„œ ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ์ทจ์•ฝ์ ์ด๋‹ค.

db์ •๋ณด์˜ ๊ฒฝ์šฐ id/pw๊ฐ€ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฒƒ์„ ํ•„์š”ํ•œ ๋ชจ๋“  ํŽ˜์ด์ง€๋งˆ๋‹ค ์“ฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ํ•˜๋‚˜์˜ php์— ๊ณ„์ •์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ๋„ฃ์–ด๋‘๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ๊ฐ€์ ธ์™€์„œ ์“ฐ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ค‘๋ณต๋˜๋Š” ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์ ์„ฑํ•ด๋‘๊ณ  ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๋ฐฉ์‹์„ ์ทจํ•จ์œผ๋กœ์จ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

dbConfig.php
<?php
(php์ฝ”๋“œ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š” db ๊ณ„์ • ์ •๋ณด)
?>

login.php
<?php
include('dbConfig.php');
(์œ„์˜ ํŒŒ์ผ ๋‚ด์šฉ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€์„œ ๋ณต๋ถ™ํ•˜๊ณ  ์‹คํ–‰)
?>

์œ„์™€ ๊ฐ™์ด include๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ํŒŒ์ผ์˜ ๋‚ด๋ถ€ ๋‚ด์šฉ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€์„œ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐํ•˜๋“ฏ์ด ์‹คํ–‰ํ•œ ํ›„ ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” (nav.php) ๊ฐ™์€ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. ๋ชจ๋“  ํŽ˜์ด์ง€์— ๋„์šฐ๋Š” ๋ถ€๋ถ„์€ ๊ฐ๊ฐ์— ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ nav.html, nav.php์™€ ๊ฐ™์ด ๋งŒ๋“ค์–ด์„œ ๋„์šด๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.(ํ—ค๋”(Header) / ํ‘ธํ„ฐ(Footer))

* ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ํ•ดํ‚น, ์ปดํ“จํ„ฐ ๊ณต๋ถ€
> ๊ฒŒ์œผ๋ฅธ ์‚ฌ๋žŒ์ด ์ž˜ํ•จ. ํ•œ๋ฒˆ์— ๋‹ค๋ฐ”๊ฟˆ.
> ์„ฑ์‹คํ•œ ์‚ฌ๋žŒ. ํ•˜๋‚˜ ํ•˜๋‚˜ ๊ฐ€์„œ ๋ฐ”๊ฟˆ.
๊ฒฐ๋ก  : ๊ฒŒ์œผ๋ฅด๊ธฐ ์œ„ํ•ด์„œ ๋…ธ๋ ฅํ•˜๊ณ  ๋ถ€์ง€๋Ÿฐํ•œ ์‚ฌ๋žŒ์ด ๋˜์ž!

๋”ฐ๋ผ์„œ Web Page์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ?page= ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ฐ›๋Š”๋‹ค๋ฉด ํ•ด๋‹น ์ทจ์•ฝ์ ์„ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์„œ๋ฒ„์— ์กด์žฌํ•˜๋Š” ์ž„์˜์˜ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, DB ๊ณ„์ •์„ ๋ฐ›์•„์˜ค๋Š” ํŒŒ์ผ ๋˜ํ•œ ํ„ธ๋ฆฐ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

LFI ์ทจ์•ฝ์ ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” include๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ์ธ์ง€ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
์ด๊ฒƒ์€ ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ ์ƒ๊ฐํ•ด๋ด์•ผํ•œ๋‹ค.

ํ•ด๋‹น ์ทจ์•ฝ์ ์€ ์„œ๋ฒ„์—์„œ ์›ํ•˜๋Š” ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ๋‹จ, ์†Œ์Šค ์ฝ”๋“œ ๋นผ๊ณ ... ๋ผ๋Š” ์ƒ๊ฐ์— ๋ณ„๊ฑฐ ์•„๋‹Œ ์ทจ์•ฝ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

ํ•˜์ง€๋งŒ ์ด๊ฒƒ์„ ์—ญ์œผ๋กœ ์ด์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ•ด์•ผํ•œ๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด ์—„์ฒญ๋‚œ ์ทจ์•ฝ์ ์ด๋‹ค.

์†Œ์Šค์ฝ”๋“œ๋ฅผ ์–ป์–ด์˜ฌ ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰ํ•ด์„œ ๊ฒฐ๊ณผ๊ฐ’๋งŒ ์ „๋‹ฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ์„œ๋ฒ„ ์ธก ์ฝ”๋“œ๊ฐ€ ์‚ฝ์ž…๋œ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•ด ํ•ด๋‹น ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜จ๋‹ค๋ฉด? ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

FLI -> LFI 

์ด๋ฏธ์ง€ ํŒŒ์ผ๋กœ ๋ฐ”๊พธ์–ด์ค€ ์‹คํ–‰ํŒŒ์ผ(webshell.php -> webshell.jpg) ์„ ๋„ฃ๋Š”๋‹ค๋ฉด? ์ด๋ฏธ์ง€ ํŒŒ์ผ๋กœ ๋„ฃ๊ณ  ๋ถˆ๋Ÿฌ์ฃผ๋Š” ๊ฒฝ์šฐ ๋‚ด๋ถ€์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ค€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์€ LFI ์ทจ์•ฝ์ ์œผ๋กœ Local File Include ์ทจ์•ฝ์ ์— ํ•ด๋‹นํ•œ๋‹ค.(File Include์™€๋Š” ๋‹ค๋ฅธ ์ทจ์•ฝ์ ์ด๋‹ค.)

File Inclusion ๊ณต๊ฒฉ์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ File Upload๋ฅผ ํ™œ์šฉํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ๋‹ค๋ฅธ ์ทจ์•ฝ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์ธ์ง€ํ•˜๋„๋ก ํ•˜์ž.

OSCP ์นจํˆฌํ…Œ์ŠคํŠธ : ํ•ดํ‚น
์นจํˆฌ ํ…Œ์ŠคํŠธ๋ผ๋Š” ํ•ดํ‚น์˜ ์ „์ฒด ์žฅ๋ฅด์—์„œ ์›น ํ•ดํ‚น์ด๋ผ๋Š” ์žฅ๋ฅด ๋‚ด์—์„œ  LFI ์ทจ์•ฝ์ ์€ ๋‹จ๊ณจ ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค.
LFI ์ทจ์•ฝ์ ์€ ์ƒ๊ฐ๋ณด๋‹ค ๋Œ€๋‹จํ•˜๋‹ค๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

> ๋งŒ์•ฝ LFI ์ทจ์•ฝ์ ์„ ์ฐพ์•˜๋Š”๋ฐ ํŒŒ์ผ ์—…๋กœ๋“œ๊ฐ€ ์—†๋‹ค๋ฉด? ํŒŒ์ผ์„ ์ „ํ˜€ ์˜ฌ๋ฆด ๊ป€๋•์ง€๊ฐ€ ์—†๋‹ค๋ฉด?!
๊ทธ๋ž˜๋„ ํ•œ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ํŒŒ์ผ์„ ์˜ฌ๋ฆฌ์ง€ ์•Š๋”๋ผ๋„, ์›น ์„œ๋ฒ„์˜ ์–ด๋–ค ํŒŒ์ผ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
> ๋ฐ”๋กœ ์›น ๋กœ๊ทธ(Web log), ์ ‘์†ํ•œ ๊ธฐ๋ก์ด ์›น ์„œ๋ฒ„์—๋Š” ๋‹ค ๊ธฐ๋ก๋˜๊ณ  ์žˆ๊ณ  ์ด๊ฒƒ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

URL ์ฃผ์†Œ์— ๊ทธ๋ƒฅ <?php system($_GET['cmd']); ?>๋ฅผ ๋„ฃ์–ด์ค€๋‹ค๋ฉด? ์ด์ƒํ•œ ์š”์ฒญ์ด๋„ค ํ•˜๊ณ  ๋„˜๊ธฐ๊ณ  ,404 ์—๋Ÿฌ๊ฐ€ ๋‚  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฒƒ์„ access_log์—์„œ ์š”์ฒญํ•œ๋‹ค๋ฉด?.... ๊ทธ ์ž์ฒด๋กœ ์›น์‰˜์„ ๋”ธ ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ ์ด ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
(URL ์ฃผ์†Œ์— ์ž…๋ ฅํ•œ ๋‚ด์šฉ๋“ค์€ access_log์—๋Š” ๊ธฐ๋ก๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)
include๋Š” ์–ด๋–ค ํŒŒ์ผ์ด๋“  ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
include๋Š” ํ•ด๋‹น ์œ„์น˜์— ๊ทธ ํŒŒ์ผ์„ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.!!!!
๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋กœ๊ทธ์—์„œ๋Š” URL์— ์ž…๋ ฅ๋˜๋Š” ๋ชจ๋“  ๋‚ด์šฉ์ด ๊ธฐ๋ก๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ include ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์—ฌ ๋กœ๊ทธ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค๋ฉด?! ํ•ด๋‹น ๊ธฐ๋ก์„ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํŒŒ์ผ์„ ๋”ฐ๋กœ ์—…๋กœ๋“œ ํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋กœ๊ทธํŒŒ์ผ์„ include ํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋˜ webshell ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ธฐ๋ก์ด ๋ถˆ๋Ÿฌ์™€์ง€๋ฉด์„œ ์‹คํ–‰๋˜๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰, ์–ด๋–ค ์–ธ์–ด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋˜๊ฐ„์— php์˜ include์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์–ธ์–ด๋ณ„ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ํ•ด๋‹น ๋กœ๊ทธ์—์„œ ์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์‹ฌ์ง€์–ด include ์ทจ์•ฝ์ ์˜ ๊ฒฝ์šฐ txt ์•ˆ์— ์žˆ๋Š” php ์ฝ”๋“œ๋„ ์‹คํ–‰์ด ๋œ๋‹ค. ์–ด๋–ค ํŒŒ์ผ์ด๋“  ๊ทธ ๋‚ด์šฉ์„ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

LFI / RFI

LFI ๋Š” Local File Include๋กœ์„œ File Include์‹œ ์›น ์„œ๋ฒ„ ๋‚ด์— ์žˆ๋Š” ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜จ๋‹ค.

RFI ๋Š” Remote File Include ๋กœ์„œ (NAS ์„œ๋ฒ„์™€ ๊ฐ™์€ ์™ธ๋ถ€ ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ) File Include์‹œ ์™ธ๋ถ€ ์„œ๋ฒ„์— ์žˆ๋Š” ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜จ๋‹ค.


File Download

ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ(File Download) ์ทจ์•ฝ์ ์€ ์–ด๋–ค ํŒŒ์ผ์„ ์ „๋‹ฌํ•ด์ฃผ๊ณ  ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

download.php?fileName=test.txt

<?php
fileName = $_GET['fileName'];
downlaod('/files/' . $fileName); 
?>

์œ„์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” file download๋ฅผ ์œ„ํ•œ ๊ธฐ๋Šฅ์ด ์กด์žฌํ•œ๋‹ค๋ฉด ํ•ด๋‹น ๊ธฐ๋Šฅ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ, ๊ฒฝ๋กœ ์กฐ์ž‘์„ ํ†ตํ•ด ์›ํ•˜๋Š” ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ ์ด๋‹ค.

fileName = ../../../../../../../etc/passwd
/files/../../../../../../../etc/passwd

์œ„์™€ ๊ฐ™์ด ์›น ๊ฒฝ๋กœ๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์— etc/passwd ๊ฒฝ๋กœ์— ์ ‘๊ทผํ•˜์—ฌ ์ค‘์š” ์ •๋ณด๋ฅผ ๋นผ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

ํ•ด๋‹น ์ทจ์•ฝ์ ์€ ์†Œ์Šค์ฝ”๋“œ์˜ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋ผ๋Š” ๋‹จ์ ์ด ์žˆ์ง€๋งŒ, ๋‚ด๋ถ€์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅํ•œ ์ทจ์•ฝ์ ์ด๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ../../../../../../../์™€ ๊ฐ™์ด ๊ฒฝ๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•œ ์ทจ์•ฝ์  : path traversal ์„ ํ•จ๊ป˜ ์ด์šฉํ•˜๋ฉด ๋‚ด๋ถ€์˜ ํŒŒ์ผ์„ ์ „๋ถ€ ์—ด๋žŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ์œ„ํ—˜ํ•œ ์ทจ์•ฝ์ ์ด๋‹ค. ์‹คํ–‰๋˜์ง€ ์•Š์€ ํ˜•ํƒœ์˜ ์ฝ”๋“œ, ๊ทธ ์ž์ฒด(์†Œ์Šค ์ฝ”๋“œ)๋ฅผ ํš๋“ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰, File Download ์ทจ์•ฝ์ ์ด ์กด์žฌํ•˜๋ฉด Web Source Code๋ฅผ ํƒˆ์ทจํ•  ์ˆ˜ ์žˆ๊ณ , DB์ •๋ณด๋ฅผ ์ €์žฅํ•ด๋‘” ๊ฒƒ๋„ ํƒˆ์ทจ๋˜์–ด DB์ž์ฒด๋„ ํ„ธ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ download.php์™€ ๊ฐ™์€ ๋‹ค์šด๋กœ๋“œ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ํŽ˜์ด์ง€์˜ path๋ฅผ ํ™•์ธํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ../../../../../../../etc/passwd ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ ์ญ‰ ์˜ฌ๋ผ๊ฐ€๋ฉด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐพ๊ธฐ ์‰ฝ์ง€๋งŒ, ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š๋‹ค.

1. path traversal
2. guessing (์ถ”์ธก)

* ์ง€๊ธˆ์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์—์„œ ๋งŽ์ด ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ, ์˜ˆ์ „์— ์“ฐ๋‹ค๊ฐ€ html tag๋กœ ์‚ญ์ œ๋œ ๊ฒƒ์˜ ๊ฒฝ์šฐ, ์ฆ‰ ์ฝ”๋“œ๋ฅผ ์ง€์šฐ์ง€ ์•Š๊ณ  ์ฃผ์„์ฒ˜๋ฆฌ๋งŒ ํ•ด๋†“์€ ๊ฒฝ์šฐ, ํ•ด๋‹น ์ฃผ์„์„ ํ’€๊ณ  ๋“ค์–ด๊ฐ€๋ณด๋ฉด ์ด์ „์— ์“ฐ๋˜ ๋ถ€๋ถ„์—์„œ ์ทจ์•ฝ์ ์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ์‹์ด ๋น„์Šทํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์˜ ์ด๋ฆ„์„ ์ถ”์ธก์„ ํ†ตํ•ด, ์˜ˆ์ธกํ•˜์—ฌ ๋„ฃ์–ด๋ณด๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ด๋‹ค.

(์—ฌ๊ธฐ์„œ guessing ๊ณต๊ฒฉ์˜ ๊ฒฝ์šฐ, ์—ฌ๊ธฐ์— ์žˆ์„๊ฑฐ ๊ฐ™์€๋ฐ?, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ด๊ฒƒ์ผ๊ฑฐ ๊ฐ™์€๋ฐ?, ๋“ฑ๊ณผ ๊ฐ™์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŽ์ด ๋‹ค๋‹ˆ๋ฉด์„œ ์—ฌ๋Ÿฌ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ณ , ํŽ˜์ด์ง€๋ณ„ ๋””๋ ‰ํ† ๋ฆฌ์™€ ๊ตฌ์„ฑ๋“ค์„ ์ƒ๊ฐํ•˜๋Š” ๋Šฅ๋ ฅ์ด ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฝ๋ ฅ์„ ๋ฌด์‹œํ•˜์ง€ ๋ชปํ•œ๋‹ค๊ณ ํ•œ๋‹ค.)

 

๋‹จ, ์ฃผ์˜ํ•  ์ ์ด ์žˆ๋‹ค.

์ฃผ์˜ํ•  ์ 

์œ„์˜ File Download์ทจ์•ฝ์ ์˜ ๊ฒฝ์šฐ ํ•ดํ‚น์˜ ์ž…์žฅ์—์„œ๋Š” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ฐพ์•„๋‚ด์–ด ๋‚ด๋ถ€์˜ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ๋ณด๊ณ  ์ทจ์•ฝ์ ์„ ์ถ”๊ฐ€์ ์œผ๋กœ ์ฐพ์„ ์ˆ˜๋„ ์žˆ๋Š” ์—„์ฒญ๋‚œ ์ทจ์•ฝ์ ์ด์ง€๋งŒ, ๋ชจ์˜ํ•ดํ‚น์—์„œ๋Š” ํ•ด๋‹น ์ทจ์•ฝ์ ์ด ์กด์žฌํ•œ๋‹ค๊ณ  ๋งˆ์Œ๋Œ€๋กœ ๋‚ด๋ถ€ ํŒŒ์ผ์„ ๋ฐ›์•„์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํ•ดํ‚น์˜ ์ž…์žฅ์—์„œ ํ•ด๋‹น ์ทจ์•ฝ์ ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

1. ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค. (์ด๋ฏธ ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์—„์ฒญ๋‚œ ์ทจ์•ฝ์ ์ด๋‹ค.)
2. ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•œ๋‹ค. 
 -> ๋ถ„์„์˜ ๋‹จ๊ณ„์—์„œ ์ฝ”๋“œ๋ฅผ ๋ณด์ง€ ์•Š๊ณ ๋Š” ์•Œ ์ˆ˜ ์—†๋˜ SQL Injection ๊ฐ€๋Šฅ Point๊ฐ€ ๋Œ€๊ฑฐ ๋ฐœ๊ฒฌ๋  ์ˆ˜ ์žˆ๋‹ค.
(์†Œ์Šค์ฝ”๋“œ ๋ถ„์„์„ ํ†ตํ•ด์„œ๋งŒ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ ์„ ์ถ”๊ฐ€๋กœ ๋ฐœ๊ฒฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.)

์ทจ์•ฝ์ ์„ ๋” ์ฐพ๊ธฐ ์œ„ํ•ด ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ณ  ๋ถ„์„ํ•˜์—ฌ ๋” ๋งŽ์€ ์ทจ์•ฝ์ ์„ ์ฐพ์•„๋‚ธ๋‹ค. ์›ํ•˜๋Š” ํŒŒ์ผ๋“ค์„ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—„์ฒญ๋‚œ ์ทจ์•ฝ์ ์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ์นจํˆฌํ…Œ์ŠคํŠธ์˜ ๊ด€์ (ํ•ดํ‚น์˜ ๊ด€์ )์œผ๋กœ์„œ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ์ทจ์•ฝ์ ์„, ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ƒ๊ฐํ•ด๋ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์ง€ ๋ชจ์˜ํ•ดํ‚น์˜ ๋‹จ๊ณ„์—์„œ๋Š” ํ•ด๋‹น ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋œ๋‹ค๋ฉด, ๋‹ด๋‹น์ž์™€์˜ ์ƒ์˜๋ฅผ ํ†ตํ•ด ์ถ”๊ฐ€์ ์ธ ์ทจ์•ฝ์  ๋ฐœ๊ฒฌ์„ ์œ„ํ•ด์„œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋ฐ›์•„ ์ ๊ฒ€ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ์ง„ํ–‰ํ•ด์•ผํ•œ๋‹ค.

๋งˆ์Œ๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋ฐ›๋Š”๋‹ค๋ฉด, ๋ฒ•์ ์ธ ๋ฌธ์ œ๋กœ๋„ ๋ฒˆ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์žŠ์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

 

POC๋กœ์„œ ๋‹ค์šด๋กœ๋“œ ํ•ด๋ด์•ผํ•  ํŒŒ์ผ

/etc/passwd

Windows
/boot.ini
winnt/win.ini

../../../../../../../../boot.ini

 

File Download ๋Œ€์‘ ๋ฐฉ์•ˆ

File Downlaod ์ทจ์•ฝ์ ์˜ ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๋Œ€์‘๋ฐฉ์•ˆ์€ File Upload ์˜ ๋Œ€์‘๋ฐฉ์•ˆ๊ณผ ํก์‚ฌํ•˜๋‹ค.

๋‚œ๋…ํ™”

๋งŒ์•ฝ javascript ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›์•„ ๋ณด๋Š” ๊ฒฝ์šฐ์— ๋‚œ๋…ํ™”๊ฐ€ ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋‚œ๋…ํ™”๋ฅผ ํ’€์–ด์ฃผ๊ณ  ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์˜จ๋ผ์ธ ์‚ฌ์ดํŠธ์˜ ๋‚œ๋…ํ™” ํˆด์„ ์ด์šฉํ•˜์ž.) ํ˜น์€ ํ•ต์‹ฌ ํ•จ์ˆ˜๋“ค ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋Œ€๋กœ ๋ณด์—ฌ์ง„๋‹ค.

ํˆด๋กœ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฆฌ๋ฒ„์‹ฑ์„ ํ•ด์•ผํ•œ๋‹ค.


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