R's Hacking Daily Log

Directory Traversal (Path Traversal) (1) 본문

Port Swigger/Directory Traversal

Directory Traversal (Path Traversal) (1)

hanhxx 2023. 5. 17. 11:41

What is Directory Traversal  

Directory Traversal (or Path Traversal)은서버에 있는 파일을 읽기 위해 서버가 의도한 경로를 이탈하여 공격자가 읽고 싶은 임의의 파일에 접근 가능하게 만드는 취약점이다. 

 

 

:) 경로를 이탈한다!? 

어떤 웹 페이지 하나를 띄워놓고 URL을 보면 path 내용이 /abc/def/..처럼 나오는 경우가 있다.이는 해당 페이지가 들어있는 경로를 나타내는 데

 

경로를 이탈한다고 표현한 것은 서버로부터 페이지를 받을 때 directory를 이동해서 제공자가 의도하지 않은 경로로 이동하려는 걸 표현하고자 한 것이다!

 

 

 

Reading arbitrary files via directory traversal

쇼핑 어플리케이션에서 할인 중인 아이템을 출력하는 데 다음과 같은 img를 포함한다고 상상해 보자.

<img src="/loadImage?filename=218.png">

218.png라는 이미지가 결과적으로 반환되는 것인데 기본적으로 웹 서버 안에서 이 이미지에 접근하기 위한

경로는 /var/www/images/image_name이다.

 

 

https://insecure-website.com/loadImage?filename=218.png

위와 같은 형태로 이미지 이름에 대한 값을 얻게 되면 

 

 

이미지까지의 접근 경로는 다음과 같다.

/var/www/images/218.png

 

정리해 보자면

1. url로부터 웹 서버는 filename 값을 얻어서

2. 해당하는 이미지 이름을 /var/www/images 경로 뒤에 붙여

3. 만들어진 /var/www/images/218.png 파일을 찾아 img tag에 넣는다.

 

 

이때 서버에서 path traversal에 대한 그 어떤 방어도 하지 않는다면 공격자 입장에서는 아래와 같이 

https://insecure-website.com/loadImage?filename=../../../etc/passwd

path traversal 공격으로 /etc/passwd file에 접근이 가능해진다. 

 

 

위의 filename 값이 어떻게 동작하는지 보자면 

/var/www/images/../../../etc/passwd

서버는 images directory에서 이미지를 찾는 게 아니라 최상위 directory로 올라가서 /etc/passwd 파일을 읽는 동작으로

바뀌게 되는 것이다.

 

 

 

var directory 안에 www directory가 있는 걸 볼 수 있고 이해를 위해 www 안에 images directory를 만들었다.

 

 

url에 입력한 대로 [ ../../.. ]을 입력하면 총 3번 directory를 이동해서 "/ directory"로 이동하게 되고

 

 

그 안에 etc directory가 있기 때문에 결과적으로 etc directory 안에 있는 passwd file에 접근이 가능하게 된다. 

 

따라서 공격자는 directory를 이동함으로써 자신이 원하는 파일을 읽을 수 있게 되는 것!

 

 

 

** 여기서 알 수 있듯이 [ ../ ]는 directory를 바꿀 때(= 이동) 사용할 수 있는 시퀀스로 

현재 directory에서 한 단계 위의 directory로 빠져나가!라는 의미이다.

 

 

** ../ 시퀀스를 이용하여 directory를 이리저리 옮겨 다니는 공격이다~ 해서 directory(or path) traversal이라고 한다. 

 

 

** /var/www/images/../../../etc/passwd

1. 첫 번째 ../

/var/www/images → /var/www로 이동

 

2. 두 번째 ../

/var/www → /var

 

3. 세 번째 ../ (= ..)

/var → / (root)

 

4. /etc

/ → /etc로 이동 

 

5. /passwd

/etc → /etc 안에 있는 passwd file 

'Port Swigger > Directory Traversal' 카테고리의 다른 글

Directory Traversal - Lab(2)  (0) 2023.05.19
Directory Traversal - Lab(1)  (0) 2023.05.19
Directory Traversal (2)  (0) 2023.05.18
Directory Traversal Lab  (0) 2022.11.06
Directory Traversal  (0) 2022.11.02
Comments