[보안] 파일 업로드, 다운로드 취약점 공격 및 대응방안

파일을 업로드 또는 다운로드 시 취약할 수 있는 소스코드 상의 문제를 파악하고 예방하는 방법에 대해서 소개합니다.
특정 사이트에 파일을 업로드 할 수 있는 기능을 제공하고 있고 보안 의식에 취약한 개발자가 개발을 했다면 파일 업로드/다운로드 취약점이 존재할 수 있습니다. 파일 업로드와 다운로드 시 일어날 수 있는 취약한 점들을 알고 미리 예방하는 차원에서 알려 드립니다.

파일 다운로드 취약점


파일 업로드

악성파일 업로드 부문

1. 업로드 기능 찾기


2. 업로드 기능을 이용해서 웹 서버가 실행가능한 언어로 작성된 악성파일 업로드

 1) ASP언어로 개발된 사이트 -> 웹서버는 ASP 확장자를 가진 파일을 실행

 2) JSP언어로 개발된 사이트 -> 웹서버는 JSP 확장자를 가진 파일을 실행

 3) PHP언어로 개발된 사이트 -> 웹서버는 PHP 확장자를 가진 파일을 실행


3. 악성파일을 업로드 하여 웹 서버에 저장되었을 때 확장자가 .asp / .php / .jsp 형태로 저장되어야 함


4. 우회기법

악성파일 실행 부문

1. 공격자가 업로드한 .asp / .php / .jsp 악성파일이 업로드된 경로명(폴더명) 추측

2. 업로드 된 경로명(폴더명)과 악성파일의 이름을 이용해서 URL로 호출(실행)

3. 악성파일이 실행 되었을 때 웹 페이지에서 웹서버에 대한 시스템 명령 실행 가능

4. 악성파일의 기능에 따라 다양한 위험성이 존재함


모의사이트 업로드 테스트

1. 게시판 글쓰기 파일첨부 기능 이용

2. ASP(VBScript)언어로 작성된 악성파일 업로드 시도

 1) 클라이언트측 언어에서 업로드 확장자 필터링

 2) 허용방식(positive, whitelist)을 이용한 차단 적용(허용하는 확장자만 허용하고 나머지 다 업로드 차단)

 3) hwp / jpg / txt /pdf 등 문서기반 확장자와 그림파일 확장자만 허용


3. 우회기법(1)

 1) 클라이언트측 언어에서 필터링 하는 소스코드 조작 후 서버 재검증 확인

 2) 웹 프록시 디버거 도구 중 Burp Suite를 이용한 우회시도

 3) board.asp(글쓰기) 호출 시 웹 프록시 도구를 이용해서 인터셉트한 Reponse 부문의 소스코드 조작

  - 허용하는 확장자 부문을 asp로 변경해서 업로드 시도


4. 우회기법(2)

 1) 확장자 연장 우회기법

 2) webshell.txt.asp

 3) webshell.txt.jpg.hwp.pdf.asp


5. 우회기법(3)

 1) 종단문자를 이용한 우회기법

 2) w3shcool urlencode 사이트에서 URL Encording Reference표

 3) null -> %00

 4) 파일이름에 허용하는 확장자 + %00 + asp 조합해서 변경한 후 업로드 시도(F2)

 5) 웹 서버에서 저장될 때 %00를 포함한 뒷문장을 공백(삭제, 무시)으로 저장됨


악성파일 실행부문

1. 업로드된 악성파일 경로명 추측 방법

 1) 업로드된 파일 속성을 통해서 경로명 노출 가능성 확인(이미지 게시판에서 많이 나옴)

 2) 파일다운로인 경우 파일 다운로드 요청시 URL 분석을 통한 업로드 경로명 추측

(GET) http://호스트/demo/download.asp?strFileName=webshell.asp&f_path=upload_file

 3) 업로드 경로의 올라간 악성파일 실행 -> URL로 요청(GET)


2. 모의사이트에서 Dark1.5.asp 웹쉘을 업로드하고 실행해 보세요.


파일 다운로드

1. 인가되지 않은 웹서버의 중요파일을 다운로드 받을 수 있는 취약점

2. 공격문자

 1) ../   -> %2e%2e%2f

 2) ..\   -> %2e%2e%5c

3. 점검방법

 1) 파일 다운로드 기능을 확인

 2) 파일 다운로드 요청 URL 확인 및 분석

http://호스트/demo/download.asp?strFileName=1dark1.5.asp&f_path=upload_file

  - 파일명 매개변수 -> strFileName

  - 경로명 매개변수 -> f_path


 3) 파일 다운로드 기능에서 매개변수 값의 ../ 또는 ..\ 이용해서 다른 위치에 파일 다운로드가 가능한지 테스트

- http://호스트/demo/download.asp?strFileName=파일명&f_path=../경로명

- http://호스트/demo/download.asp?strFileName=../경로명/파일명