R's Hacking Daily Log

Directory Traversal Lab 본문

Port Swigger/Directory Traversal

Directory Traversal Lab

hanhxx 2022. 11. 6. 15:03

Wed Security Academy은 Topic과 간단한 Lab으로 구성되어있다!

Directory Traversal에 관련된 lab을 풀어보자

 

 


1) File path traversal, simple case

lab에 대한 간단한 설명이 기재되어있고 Access the lab을 누르면 lab page가 나타난다

Burp suite를 이용해서 lab page를 intercept 해보았다.

 

 

맨 윗줄을 보니 Get Method인 HTTP request임을 알 수 있다.

쭉 살펴볼 필요도 없이 바로 옆에 filename에 대한 내용이 적혀있는 걸 볼 수 있다.

이 부분을 이용해 /etc/passwd 파일을 요청하자

 

일단 /var/www/images라는 기본 경로에서 얼마나 들어가야 /etc/passwd 파일이 있는지 모르기 때문에 

Repeater를 사용해서 확인해보았다. 

filename = /etc/passwd

filename = ../etc/passwd

filename = ../../etc/passwd

위의 경우, 모두 400 status code가 반환되었다. 해당 경로에는 /etc/passwd 파일이 존재하지 않는 듯하다..

한 레벨 더 내려가면 있을까 싶어 시도해보았더니..!

 

200 Ok가..!! response가 정확히 무슨 내용인지 모르겠으나 

 

이 경로에 해당 파일이 있다는 것을 알게 되었다. 

 

 

proxy로 돌아와서 filename 값을 바꾸고 Forward 해주면

 

마지막에 section tag로 시작하는 정체모를(?) 내용이 뜨는 데 뭔지 모르겠으니 그냥 넘긴다ㅎ.ㅎ

 

Congratulations, you solved the lab!!

해당 lab을 풀었을 경우, 우측 상단의 lab box가 Solved라고 표시가 바뀐다.

 

 

 

2) File path traversal, traversal sequences blocked with absolute path bypass

기본적인 내용은 lab1과 같지만, 절대 경로에 의해 traversal sequence를 사용할 수 없다고 한다..!!

 

lab1과 마찬가지로, Burp suite를 실행해보았다. 

 

 

절대 경로라고 해서 sequence 사용 없이 바로 /etc/passwd를 filename 값으로 보내봤더니 200 Ok를 받았다!!

 

 

lab2는 절대 경로라고 하니 굉장히 쉽게 풀린 기분

 

 

 

3) File path traversal, traversal sequences stripped non-recursively

lab3은 filename의 값을 사용하기 전, sequence가 있다면 그것을 제거하는 경우이다.

 

nested sequence : ....// or ....\/

Repeater로 중첩 sequence를 사용해보았다. 

중첩 sequence 중 ....\/의 경우는 유효하지 않은 듯하다

 

다른 sequence ....//로 해보니 Ok!!

 

 

중첩 sequence를 사용하니 lab3가 풀렸다.

 

 

 

4) File path traversal, traversal sequences stripped with superfluous URL-decode

lab4에서는 traversal sequence를 차단하며, URL-decode를 실행한다고 한다. 

 

decode를 할 경우, sequence를 %2e%2e%2f or %252e%252e%252f로 나타낼 수 있다고 했으니

일단은 Repeater로 이동하여, %2e%2e%2f로 filename 값을 넣어보았다. 

response를 보니 이 방법은 안 먹히는 거 같고.. 

 

 

encoding을 2번 했을 경우의 sequence를 filename값으로 넣어보았다. 

sequence를 %252e%252e%252f로 해보니 원하는 response를 얻을 수 있었다.

 

 

궁금해서 확인해보니 %252e%252e%252f를 URL-decode 해보면 %2e%2e%2f가 나오는 걸 볼 수 있다.

 

 

 

 

 

따라서 원래 filename으로 넣던 값, 

../../../etc/passwd 를 URL-encoding 하면 

%2e%2e%2f%2e%2e%2f%2e%2e%2fetc/passwd

 

%2e%2e%2f%2e%2e%2f%2e%2e%2fetc/passwd를 URL-encoding하면,

 

%252e%252e%252f%252e%252e%252f%252e%252e%252fetc/passwd가 되는 것!

 

결국, traversal sequence를 제거당하지 않게

두 번 encoding 된 형태를 사용한 것이다. 

 

 

 

 

 

encoding된 형태의 sequence를 사용하여 제거당하지 않고 원하는 파일에 접근할 수 있었다!

 

 

 

5) File path traversal, validation of start of path

lab5에서는 filename으로 받을 값이 특정 폴더를 포함하는 경로로 시작되야한다는 조건을 제시하고 있다. 

 

내용을 살펴봤을 때, image가 알아서 저장되는 기본 경로는 /var/www/images 였던 것을 기억하자. 

아니나 다를까 intercept 한 내용을 보니, filename이 /var/www/images로 시작하는 것을 볼 수 있다!!

 

기본 경로를 그대로 두고 접근하고자 하는 파일의 경로를 붙여 Repeater로 실행해보니

알맞게 filename 값을 넘긴 듯하다!

 

 

 

6) File path traversal, validation of file extension with null byte bypass

lab6은 lab5와 비슷하게, filename의 값을 특정 파일 확장자 형태로 넘겨야 하는 조건이 제시되어있다.

 

intercept 한 내용을 보니 jpg로 끝나길래 null byte를 사용해서 jpg형태로 request를 보냈다.

 

큰 어려움 없이 성공!

 

 

 


 

 

Directory Traversal에 관련된 lab을 풀어보았다. 

모두 lab은 이론적인 걸 기반으로 가볍게 실행해보는 게 목적인 듯하다. 

 

 

#Sumnnary

#lab1 : simple case 
filename = ../../../etc/passwd 

#lab2 : 절대 경로
filename = /etc/passwd 

#lab3 : nested sequence
filename = ....//....//....//etc/passwd

#lab4 : double Url-encoding
filename = %252e%252e%252f%252e%252e%252f%252e%252e%252fetc/passwd

#lab5 : expected folder
filename = /var/www/images/../../../etc/passwd

#lab6 : expected file extention
filename = ../../../etc/passwd%00.jpg

'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 (Path Traversal) (1)  (0) 2023.05.17
Directory Traversal  (0) 2022.11.02
Comments