파일 다운로드 취약점 원리를 알아보기 앞서 절대 경로와 상대 경로부터 살펴보겠습니다
절대 경로
컴퓨터가 지정한 파일의 최초 경로를 절대 경로라고 합니다 예를 들어 hello.txt 파일을 생성할 때 이 경로가 C:\users\document\hello.txt으로 표시된다면 hello.txt 파일의 절대 경로가 됩니다
이처럼 절대 경로를 알고 있으면 파일 위치를 어디서든 접근할 수 있습니다 그러나 절대 경로가 변경되면 그 위치를 수정해야 하는 단점이 있습니다
요약 : 절대적인 기준인 최초 디렉터리(/)를 기준으로 경유한 경로를 모두 기입하는 방식
상대 경로
현재 파일의 위치를 기준으로 파일의 상대적인 경로를 표현합니다 예를 들어 hello.txt 파일이 ./musa/hello.txt 경로에 존재할 때 절대 경로와 다르게 상대 경로는 ./ 기호를 사용합니다
기호 | 의미 |
/ | 최상위 경로 |
./ | 현재 경로 |
../ | 상위 경로 |
요약 : 특정 경로를 기준으로 다른 경로를 표시하는 방식
절대 경로는 /(루트)가 포함된 경로를 의미하고 상대 경로는 현재 파일 위치를 기준으로 작성된 경로를 의미한다
파일 다운로드 취약점(File Download Vunerability)이란?
파일을 다운로드할 때 발생하는 취약점입니다 이 취약점이 발생하는 원리는 파일명이 포함된 URL의 파라미터를 조작하여 임의의 파일 경로의 접근하면 파일 다운로드가 가능하게 되는 취약점입니다 즉 비상적인 파일을 받는 행위를 의미합니다
파일 다운로드 취약점(File Download Vulnerability) 원리
파일 다운로드 취약점 원리에 대해 자세히 설명하자면 공격자가 파일명이 포함된 경로 값에 ../(상위 경로) 기호를 입력해 파일 경로를 변조합니다 이때 공격자가 변조한 파일 경로로 파일을 다운로드하게 됩니다
공격자가 기존 파일명 경로를 ../../../../../etc/passwd < 이렇게 변조 후 웹 서버에 요청하면 웹 서버는 'download.jsp'라는 애플리케이션에 요청을 전달합니다
download.jsp : 웹 서버의 upload 폴더에 존재하는 파일의 이름을 입력받으면 그 파일을 다운로드해주는 페이지 입니다
이후 ../ (상위 경로) 기호는 기존에 passwd 파일이 저장된 파일 경로 이름과 동일하게 인식되어 download.jsp를 통해 passwd 파일을 다운로드하게 해줍니다 이처럼 파일 다운로드 취약점은 passwd 파일 말고도 웹 서버에 존재하는 모든 파일들을 다운로드할 수 있기 때문에 위험합니다
passwd : 사용자의 정보들이 담긴 파일입니다
파일 다운로드 취약점(File Download Vulnerability) 보안조치
파일 다운로드 취약점은 ../ (상위 경로)와 같은 사용자가 입력한 값에 의해 파일이 호출되기 때문에 사용자 입력 값에 대한 검증이 필요합니다
해당 취약점을 보완하기 위해서는 사용자 입력값에 '/', '../', '\' 와 같은 문자 기호를 공백으로 치환하는 필터링 과정을 추가하거나 파일 다운로드 시 권한을 체크하여 권한이 없으면 파일 다운로드가 불가능하게 설정해 줍니다
Directory Traversal 이란?
Directory Traversal은 디렉터리 접근 공격을 말합니다 앞서 공격자가 URL 파라미터 값에 ../ (상위 경로) 명령어를 이용하여 기존에 디렉터리 경로가 아닌 상위 경로를 강제적으로 접근하는 방식을 의미합니다 즉 디렉터리에 대한 접근 권한을 우회하여 접근하는 공격 방식이라 할 수 있습니다 원리와 보안조치는 위에서 설명한 파일 다운로드 취약점과 동일합니다
[ 참고 자료 ]