파일 다운로드 취약점이란
: 파일 다운로드 기능 사용 시 임의의 문자나 주요 파일의 입력을 통해 웹 서버의 홈 디렉터리를 벗어나 임의의 위치에 있는 파일을 열람하거나 다운 가능한 취약점(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. 프록시를 이용하여 경로 및 파일명 수정
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 |