공격 기법 - 파일 업로드 / 파일 다운로드

공격 기법 - 파일 업로드 / 파일 다운로드

1. 파일 업로드

2. 파일 다운로드

※ 개인적인 공부를 위해 작성하였습니다. 이 글을 참고하여 허가되지 않은 곳에 사용하지 마시고 법 적인 문제가 생길 시 책임지지 않습니다.

※ 잘못된 정보가 있을 경우에는 댓글 혹은 방명록을 통해서 알려주시면 바로 수정하도록 하겠습니다!

1. 파일 업로드(File Upload)

1. 파일 업로드 취약점이란?

[그림] 파일 업로드 Attack 예시 (출처 : 구글 이미지)

- 파일 업로드 취약점이란 웹 사이트의 파일 업로드 기능을 이용하여 인가 받지 않은 파일(ex. .jsp, .php, .asp 등)을 서버에 임의로 업로드하여 업로드한 파일을 통해 공격을 통해 공격을 실행할 수 있는 취약점을 말함

- 웹 쉘 형태의 파일을 업로드하고 실행하게 되면 서버의 자원을 장악하고 서비스를 실행하는 서버의 권한을 취득하는 것이 가능해짐

[그림] 웹 쉘 형태 (출처 : 이글루 시큐리티 블로그)

2. 파일 업로드 공격 조건 및 방법

2.1. 공격 조건

- 악의적인 파일을 업로드 하기 위해서는 확장자의 체크가 미흡한 웹 사이트에서 공격이 가능하며, 악의적인 파일을 업로드 하여 저장된 디렉터리의 경로가 확인이 가능해야 함

[그림] 파일 업로드의 공격 조건

2.2. 공격 과정 예시

1. 파일 업로드 기능을 이용하여 임의의 확장자를 가진 파일을 업로드

2. 확장자 체크 미흡 및 업로드 파일의 경로 노출이 되는지 확인

3. 악의적인 스크립트 혹은 파일 업로드

4. 업로드 경로에 URL로 접근하여 업로드한 파일을 실행

> 간단한 공격 예시

더보기 확장자 변조 - 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의 약자이며, 정보를 주고받을 때 에는 바이너리로 된 문서를 텍스트로 변환해서 전달하여야 하기에 사용되며 파일 종류/ 파일 포맷 형태로 사용됨)

2.3. 공격 방법

1. Client Side Script 조작을 통해 업로드 시도

2. 확장자 연장 : webshell.txt.asp / webshell.txt.jpg.hwp.asp 등

3. 종단 문자 : webshell.asp%00.txt (NULL문자가 있을 경우 문자가 끝난 것으로 간주하기 때문)

2.4. 취약점 테스트(진단)

1. 파일 업로드 어플리케이션 사용 유무를 확인

2. .asp, .aspx, .jsp, .php 등의 확장자로 업로드가 가능한지 여부 확인

3. 클라이언트 측 검증인지 서버 측 검증인지 확인

3. 기본적인 대응 방안

1. 파일 업로드 확장자를 제한, 화이트 리스트 방식을 권고함

2. 특수 문자 필터링을 적용하여 이름의 변조를 방지함

3. 실행 권한을 제어하여 일반 사용자가 실행할 수 없도록 함

4. 서버 외부 경로로 저장되게 하여 사용자가 내부 경로를 알 수 없도록 함

2. 파일 다운로드(File Download)

1. 파일 다운로드 취약점이란?

[그림] 파일 다운로드 Attack 에시 (출처 : 구글 이미지)

- 파일 다운로드 기능이 존재하는 웹 페이지에서 다운로드 진행 시, 파일의 경로 및 파일명을 파라미터로 받아 처리하는 경우 다운로드 취약점을 이용 가능

- 필터링 없이 다운로드가 되면 공격자가 이를 조작하여 허용되지 않은 파일을 다운로드 받을 수 있고 임의의 위치에 있는 파일을 열람하거나 다운로드가 가능해짐

2. 파일 다운로드 공격 조건 및 방법

2.1. 공격 조건

[그림] 파일 다운로드의 공격 조건

- 파일 경로와 파일명이 노출되었을 경우와 파일 경로와 파일명 필터링이 부족한 경우 파일 다운로드 취약점을 이용하여 공격이 가능

2.2. 취약한 코드 형태의 예시

1. String fileName = request.getParameter("fileName");

- 파일 명을 입력 값으로 받음

2. String Filepath = request.getParameter("filePath");

- 파일 경로를 입력 값으로 받음

3. File file = new File(filePath + fileName);

- 필터링 없이 조합하여 객체 생성함

2.3. 공격 예시

1. 평문화

- http://server/download.php?file=../../../../../../../../etc/passwd

2. URL 인코딩

- file=..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd

3. BASE64 인코딩

- http://server/download.php?file=Li4vLi4vLi4vLi4vLi4vLi4vZXRjL3Bhc3N3ZA==

2.4. 취약점 테스트(진단)

1. 업로드 된 파일의 속성 정보를 확인하여 해당 파일 경로 노출 여부 확인

2. 파라미터 중 변조에 의해 다른 파일에 접근이 가능한지 확인

3. 상위 경로로 이동하는 명령어(ex. ../ 등) 삽입

4. 다운로드 한 주요 파일을 바탕으로 정보 수집

3. 기본적인 대응 방안

1. 파일 명을 직접 소스 상에서 사용하거나 입력 받지 않도록 해야함

2. 게시판 이름과 번호를 이용하여 서버 측에서 데이터 베이스 재 검색을 통해 파일을 다운로드할 수 있도록 해야함

3. 저장소를 지정하고, 웹 루트 상위 디렉토리로의 이동이 불가하도록 만들어야 함

from http://secure-world.tistory.com/10 by ccl(A) rewrite - 2021-12-30 14:26:04

댓글