Season 1/기술 보안

파일 업로드(File Upload Attack) 취약점 설명

작성자 - 한수임

파일 업로드 공격, 취약점 설명

 

공격 설명

- 파일 업로드 기능 사용 시 공격자가 서버 스크립트 코드(웹쉘, 허용되지 않은 파일)가 포함된 파일을 업로드시키는 취약점 업로드 이후 파일(코드)을 실행하는

  공격

 

영향도

- 실행된 웹쉘을 통하여 사용자 정보, 데이터베이스에 저장된 다른 데이터베이스 정보, 시스템상 계정, os 종류 등 탈취    가능

 

공격 방식

- 업로드 기능이 존재하는 곳에 제한 및 검증을 우회하여 파일이 업로드될 수 있도록 함 

- 확장자 변조, 대소문자 치환, 이중 확장자 사용, 특수문자 삽입, 인코딩, 요청 값 변조 등 을 이용하여 우회 시도

 

간단한 예시입니다.

 

확장자 변조 - test.jpg->test.jsp

대소문자 치환 - file.pHp, file.Jsp, file.PhAr

이중 확장자 사용 - file.png.php

특수문자 삽입 - file.php%00.png, file.jsp%zz.gif, file.asp;jpg, file.php...., file.php/

(특수문자 (%00, %zz, . 등)를 통해 이전의 확장자를 마지막으로 인식하도록 함)

인코딩 - file.js%70, file%22jsp

2중 파라미터 삽입 - filename=test.jpg, filename=test.jsp

MIME Type 변조 - contentType=image/jpeg, contentType=image/gif

(MIME - MIME은 Multipurpose Internet Mail Extensions의 약자이며, 정보를 주고받을 때 에는 바이너리로 된 문서를 텍스트로 변환해서 전달하여야 하기에 사용되며  파일 종류/ 파일 포맷 형태로 사용이 된다)

 

- 이 외에도. htaccess 파일을 이용한 공격, 시그니처를 통한 공격법 등 이 존재.

 

해결방안

1. 파일을 업로드할 수 있는 확장자를 제한한다. 화이트리스트 방식을 이용하여 허용된 확장자만 업로드 할 수 있도록 하는 것이다.

2. 특수문자를 통해 우회할 수 없도록 특수문자에 대한 필터링을 적용시킨다.

3. 업로드가 되더라도 실행될 수 없도록 실행 권한을 제한시킨다.

4. 업로드된 파일들은 서버 외부 경로에 저장을 하도록 하여 외부로부터 업로드 디렉터리에 접근할 수 없도록 해야 한다. 


실습 진행

준비사항 : 파일 업로드 취약점이 존재하는 페이지, 프록시 툴
* 해당 실습은 테스트를 위해 만들어진 페이지에서 진행되었으며, 일반 페이지에서 따라 하시면 안 됩니다.

1. 업로드 기능이 있는 곳에 ASP파일 업로드 시도

ASP 파일 업로드 시도

 

2. 에러 메시지 확인

화이트 리스트 방식 적용 확인

 

3. 이중 확장자를 통한 업로드 시도

화이트 리스트에 맞춰 .asp.gif 로 이중 확장자를 이용한 업로드 시도

 

4. 요청 값 내 확장자 변경 시도

filename="PHP_TEST_1.0.asp.gif"-> "PHP_TEST_1.0.asp." gif 확장자 삭제

 

5. 업로드 가능 확인

asp 파일 업로드 확인

6. 업로드된 파일 실행(클라이언트 IP주소 가져옴, 업로드는 "."를 포함하여 업로드 후 실행 시 "." 삭제)

파일 선택 후 . 삭제하여 업로드된 파일 실행

 

*

파일 업로드는 서버에 따라 실행될 수 있는 언어가 무엇인지 소스보기 및 패킷 등을 이용하여 파악 후 업로드된 파일이 실행 가능한지 확인하는 것이 중요! (확인불가 시 다양한 서버 측 언어 파일들을 올려봄으로 써 확인 가능)

Contents

이 글이 도움이 되었다면, 응원의 댓글 부탁드립니다.