<?php
$myfile_save_dir = 'upload/';
if($_FILES['fileToUpload']['size'] >= 1024 * 1024 * 1){ exit("<script>alert(`file is too big`);history.go(-1);</script>"); }
$allowed_types = ['image/jpeg', 'image/png']; # 지정된 MIME_Type
$file_type = $_FILES['fileToUpload']['type']; # 업로드된 파일의 MIME_Type
if(in_array($file_type, $allowed_types)){
move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $myfile_save_dir . $_FILES['fileToUpload']['name']);
exit("<script>alert(`upload ok`);location.href=`file.php`;</script>");
}
else{
exit("<script>alert(`이미지 파일만 업로드가 가능합니다.`);location.href=`file.php`;</script>");
}
?>
MIME_Type을 기반으로한 필터링을 우회 해 보자
MIME_Type이란 https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types
해당 링크를 참조하여 개념을 파악하면 쉽다.
MIME_Tpye이 application/octet-stream를 image/jpeg로 변경하여 전송
업로드 성공
웹쉘 테스트 시작
정상업로드 및 정상작동 우회완료
이 외에도 다양한 방법이 많지만 아직은 공부를 더 해야 할 듯 싶다.