본문 바로가기
Hack/Web

파일 업로드 취약점

by Becoming a Hacker 2025. 5. 26.
반응형

파일 업로드 취약점

공격자가 실행 가능한 악의적인 파일(ex : php, jsp, asp, html 등)을 서버에 업로드할 수 있는 경우, 서버 권한 탈취, 악성 스크립트 실행, 데이터 탈취, Lateral Movement(측면 이동) 등의 위협이 발생할 수 있음

 

공격 시나리오

웹 셸 업로드를 통한 서버 권한 탈취

ex : PHP 기반 웹 서버에 .php 파일을 업로드하여 웹 셸을 실행할 수 있음

ex : 일부 로직에 따라 Polygot 파일 또는 이미지 파일 내 Exif Header를 활용하여 웹 셀을 실행할 수 있음

 

HTML 파일 업로드를 통한 악의적인 목적의 사이트 활용

ex : html과 같은 파일을 업로드하여 신뢰할 수 있는 도메인 악용 (피싱 페이지 등)

 

우회 방안

- .htaccess 설정 파일을 업로드할 수 있는 경우, .png를 .php와 같은 파일로 인식하게 할 수 있음

- 블랙 리스트 방식으로 검증하는 경우 .phar와 같은 일반적이지 않은 확장자를 활용해 공격을 수행할 수도 있음

- S3 Bucket의 경우 저장 시 사용되는 Content-Type을 기준으로 파일을 불러오기 때문에 Content-Type을 조작하여 우회 가능함

- RFC2047 표준을 활용하여 부적절하게 WAF에서 검증하는 로직을 우회 가능함 (=?UTF8?B?YWJjZC5qcGc=?=.jpg)

- .php%00.png와 같은 방식으로 우회가 가능한 경우도 있음 (PHP 5.x 이하에서만 인식됨)

- .shell.asp;.jpg 와 같은 방식으로 우회가 가능한 경우도 있음 (구형 IIS에서 인식됨)

 

대응 방안

파일 확장자 제한

- 화이트 리스트 방식으로 파일 확장자(.jpg, .png 등)를 허용 

 

Content-Type 검증

- S3 Bucket의 경우, 저장 시 사용된 Content-Type을 활용하여 파일을 불러오기 때문에 Content-Type에 대한 검증이 필요함

   - image/jpeg와 같은 이미지 Content-Type만을 허용할 것을 권고함

   - 파일명과 불러오는 형식은 무관하나 사용자의 혼란을 방지하기 위해 파일명에 대한 검증도 같이 수행할 것을 권고함

 

업로드 폴더의 실행 권한 제거

- 웹 서버 설정을 통하여 업로드 폴더 내 실행 가능한 확장자의 실행 차단이 필요함

# Apache .htaccess 예시
RemoveHandler .php .phtml .php3
php_flag engine off

# Nginx 예시
location /uploads/ {
    autoindex off;
    default_type text/plain;
    try_files $uri =404;
}

 

폴더 및 파일 명을 서버에서 임의 설정

- 사용자가 업로드된 파일의 경로와 파일명을 사용자가 유추할 수 없도록 임의 설정(UUID, hash 등)하고 경로를 노출하지 않아야 함

- 업로드된 파일을 사용자에게 직접적으로 보여줄 필요가 없는 경우에만 해당될 수 있음

 

파일 보관 서버 별도 구축

- 업로드된 파일을 보관하는 파일 서버를 별도 구축

- 해당 서버가 새로운 공격 포인트가 될 수 있기 때문에 적절한 보안 조치(보안 그룹 설정, 실행 권한 제거, 접근 제어, 보안 모니터링, 정기 보안 검사 등)가 필요함 

 

 

반응형

댓글