## File Upload 취약점


* 일반적으로 업로드가 허용되는 이미지 파일등 외에 허용되지 않은 (웹쉘같은) 악의적인 파일을 올려서 서버를 장악할 수 있는 취약점이다.

jsp, php, asp 등의 파일을 업로드하여 악성행위를 하게 된다.




## File Upload 취약점 원인


* 해당 페이지에서 허용하는 파일만 업로드 할 수 있게 해놓아야 하는데, 업로드 파일에 대한 검증 부분이 취약하여 해커가 악성코드를 서버에 심을 수 있게 된다.





## Upload File 확장자 필터링 방식


* 클라이언트가 업로드하는 파일의 확장자를 검사하여 파일을 필터링 하게 된다. 



#### 확장자 필터링 우회 방식 예시

* 확장자의 대소문자를 바꿔가며 시도해 본다.   ex) a.php -> a.pHp

* 확장자만 바꿔서 올린다 ex) a.php -> a.jpg

* a.php -> a.php.kr

* a.php -> a.php.

* a.php -> a.php;.jpg    (세미콜론 사용)

* a.php -> a.php%00.jpg (NULL Byte 사용)



#### 파일 업로드 후 파일의 절대경로가 바로 나오는 경우도 있으나 그렇지 않을 경우 디렉토리 구조를 파악한 후 업로드 된 파일의 절대경로를 찾아야 한다.




## File Upload 취약점 대응 방식

#### 서버에서 대응 방식

* 파일이 업로드 되는 디렉토리의 실행 권한을 제거 한다.

* 업로드 된 파일의 이름을 무작위로 변경한다.

* 너무 작거나 큰 파일을 처리하는 로직을 포함해야 한다.

* 임시 디렉토리에서 업로드된 파일을 지우거나 다른곳으로 이동시킨다.

* 폼에서 어떠한 파일도 선택되지 않았다면 파일 업로드에 사용되는 변수를 초기화 시킨다.

* Content-Type 이나 File Signature를 확인하여 허용하는 파일 형식만 업로드할 수 있게끔 한다.


#### 확장자 필터링 우회 대응 방식 예시

* Server Side에서 구현한다.

* 확장자 부분의 문자를 모두 upper case로 바꾼 뒤 검사한다.



#### 아파치 서버 설정 변경

* http.conf에서 해당 디렉토리

<Directory "/usr/local/apache">

AllowOverride FileInfo

....

</Directory>


* 파일 업로드 디렉토리에 .htaccess 파일 생성한 후 Server Side 에서 Script가 실행되지 않도록 설정

<.htaccess>

<FileMatch "\.(ph|inc|lib)">

order allow,deny

deny from all

</FileMatch>

AddType text/html .html .htm .php .php3 .php4 .phtml .phps .in .cgi .pl .shtml .jsp



#### IIS 설정 

* 시작 -> 제어판 -. 관리도구 -> 인터넷 서비스 관리자

* 해당 업로드 폴더를 선택하여 실행 권한을 "없음"으로 설정한다.





## 실습













+ Recent posts