서버에 있는 파일을 다운로드하는 기능에 대해서 비정상적인 파일을 다운로드 받도록 하는 취약점이다.
경로 이동 문자를 삽입해서 지정된 경로가 아닌 지정된 경로를 벗어난 경로에서 비정상적인 파일을 받게 한다.
정상적인 파일 다운로드 기능과 비정상적인 파일 다운로드 기능의 기준은 정상적인 경로인지, 아니면 지정된 경로를 벗어난 경로에서 다운로드하는 것인지가 있다.
CASE 1 : 파일명만 입력 받기 때문에 filename에 경로 이동 문자를 삽입하여 지정된 경로를 벗어날 수 있다.
CASE 2 : 일부 경로와 파일명을 입력받는 케이스이며 해당 케이스는 공격 방법이 두 가지이다.
일부 경로를 받는 곳에 경로 이동 문자를 삽입하거나, 파일명에 경로 이동 문자를 삽입할 수 있다.
CASE 3 : 전체 풀 경로가 나오는 케이스이며 /etc 경로를 삽입하여 공격할 수 있는 가장 취약한 케이스이다.
운영 체제별 경로 구분 기호
- Unix, Linux : /
- Windows : /와 \
- 윈도우 환경의 경우 /(슬래시)와 (역 슬래시) 모두 대응해야 한다.
절대 경로 : 파일의 root부터 해당 파일까지의 전체 경로를 의미한다.
상대 경로 : 현재 파일의 위치를 기준으로 연결하려는 파일의 상대적인 경로를 적는 것을 의미한다.
/
: root를 의미
./
: 현재 위치를 의미
../
: 상위 경로
./
를 삽입하였을 경우에는 파일이 다운로드 되지만 ../
를 삽입하였을 경우 파일이 다운로드 되지 않았다. ../
의 경로가 웹 디렉터리라는 것을 파악 후, 상위 경로로 이동 후에 대표적인 index.php를 다운로드 할 수 있게 된다.1. 전체 경로 + 파일명
2. 일부 경로 + 파일명
/(슬래시)
또는 \(역슬래시)
, ..(두 개의 점)
이 존재할 경우에는 경고창을 출력하고 어플리케이션을 종료시키는 방법이 좋다. (치환을 통해 제거를 하게 되면 우회를 통해 공격할 수 있게 된다.)3. 파일명
/(슬래시)
또는 \(역슬래시)
, ..(두 개의 점)
이 존재할 경우 경고창 출력 및 어플리케이션을 종료시키는 방법이 좋다.4. 키(Key) 값
../
또는 ..\
를 치환하여 제거하게 된다면 다른 방식으로 우회가 가능하다는 점이 있다.
../
를 통해 웹 디렉터리로 이동하여 접근하여야 한다. ../
또는 ..\
가 치환되어 제거가 된다면 상위 경로로 이동할 수 있는 방법은 ../
가 제거된 후 남아 있는 .
과 ./
가 합쳐져 ../
가 되기 때문에 상위 경로로 이동이 가능하다. ../
가 제거되고 ../index.php
가 남게 되는 것이다. ../
의 치환을 우회할 수 있게된다.마찬 가지로 ./
를 치환하여 제거하는 방식도 우회가 가능하게 된다.
예시) ../와 ./가 치환되어 제거가 되며, 위와 같이 index.php를 다운로드 해야하는 상황.
GET /웹 서버 URL/download.php?file=...././/index.php HTTP/1.1로 경로 이동 문자를 삽입할 경우
GET /웹 서버 URL/download.php?file=..(../).//index.php HTTP/1.1에서 ../
가 제거되어
GET /웹 서버 URL/download.php?file=..(./)/index.php HTTP/1.1 해당 경로가 되고 마지막 ./
가 제거되어
GET /웹 서버 URL/download.php?file=../index.php HTTP/1.1로 경로가 지정되며 상위 경로에 접근이 가능하게 된다.