파일 다운로드 취약점이란

: 파일 다운로드 기능 사용 시 임의의 문자나 주요 파일의 입력을 통해 웹 서버의 홈 디렉터리를 벗어나 임의의 위치에 있는 파일을 열람하거나 다운 가능한 취약점(passwd, 중요파일/백업, 데이터베이스, 소스코드 정보 등)

 

발생 원인

- 파일 다운로드 시 파일의 절대경로 또는 상대 경로가 노출되는 경우

- 다운로드 모듈이 파일의 경로나 이름을 파라미터로 사용하는 경우

- 파일 경로와 파일명 필터링 미흡하여 ../를 이용해 상위 디렉터리에 접근이 가능한 경우

- 다운로드 경로가 노출되지 않더라도 구조가 단순하여 파라미터 변조를 통해 접근이 허용되지 않은 파일에 접근이 가능할 경우

 

절대 경로 란??

- 웹 페이지나 파일이 가지고 있는 고유한 경로

ex) C:\Apache24\bin\iconv\test.txt

 

상대 경로 란

- 현재 위치한 곳을 기준으로 하여 그곳의 위치

ex) http://192.168.0.0/board/data/../../qna/test.txt

 

취약한 소스코드 형태

String fileName = request.getParameter("fileName"); -> 파일명을 입력값으로 받음

String Filepath = request.getParameter("filePath"); -> 파일 경로를 입력값으로 받음

File file=new File(filePath+fileName); 필터링 없이 경로명+파일명을 조합하여 File객체 생성

 

진단 방법

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

- 사용되는 파라미터 중 변조에 의해 다른 파일에 접근이 가능한 부분이 있는지 확인

- 파일명으로 다운로드 하는것을 확인 후  상위 경로로 이동하는 명령어(../) 삽입

- 다운로드한 주요 파일을 바탕으로 시스템 정보수집

 

주요 파일 경로

 

Windows

-../../../../boot.ini

-../../../../winnt/win.ini

-..%2F..%2 Fboot.ini           %2F -> /값 인코딩

-..%5C..%5 Cboot.ini          %5C -> \(역슬래쉬) 인코딩

-../../../../writetest.txt

- /../../../windows/system32/config/sam

 

UNIX

- etc/passwd

- etc/shadow

- etc/security/passwd

- etc/security/user

 

우회 기법

 

Windows

경로 추적 - http://192.168.0.0/scripts/..%255c..%255c../winnt/system32/cmd.exe?c+dir+c:\

cmd를 통해 해당 시스템 경로를 추적하는 방법

- URL인코딩 특수문자를 인코딩하여 경로 설정 시 적용

- 유니코드 인코딩 파일명을 유니코드 인코딩을 적용하여 파일 다운로드 시도

- 특수문자 변형 (.../.../..//) 사용하여 다운로드 시도

 

중요 정보 파일

중요 정보 파일
/var/log/message 시스템 메시지 로그
/etc/service 서비스 정보
/etc/passwd 시스템유저 계정 리스트
/etc/shadow 계정 패스워드 파일
/etc/hosts 호스트명을 IP로 풀어줌
~.bash_history 사용자 명령어 기록
/etc/sysconfig 시스템과 네트워크 설정 파일
/var/log/wtmp who명령에 의해 보여지는 현재 로그인 유저 기록 파일

대응방안

- 파일명과 경로명을 DB에서 관리

- 경로 관련 필터링 로직 구현

- 다운로드 시 권한 체크

- 파일 업로드, 다운로드 모두 조치가 이루어져야 하고 DB 테이블 수정 필요

 


실습 진행

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



1. 다운로드 기능 이용 시도

업로드 된 첨부파일 다운로드 시도

2. 프록시를 이용하여 경로 및 파일명 수정

path = 경로이동, filename = 데이터베이스 정보 파일 입력

3. 다운로드한 파일 확인

데이터 베이스 정보가 담긴 파일 다운로드

 

 

 

'기술보안 > Web' 카테고리의 다른 글

SSTI 개념 정리  (0) 2021.07.16
[beebox] SSRF  (0) 2021.07.02
파일 업로드(File Upload Attack) 취약점 설명  (0) 2021.03.31
XXE(XML External Entities) 공격 분석  (0) 2021.02.28
XSS 공격(Cross Site Scripting Attack) 설명  (0) 2021.02.27
복사했습니다!