Path Traversal 문제이다.

제목에서 알 수 있듯이 파일확장자를 널 바이트로 우회한다. 는 뜻이다.

 

 

우리가  파일 업로드 취약점 우회 공격 기법을 공부하다보면

파일 확장자를 우회하기 위해 %00(null byte)를 쓰면서 Server-Side Script 파일 업로드를 진행한다.

 

예로 shell.php 업로드를 위해 shell.php%00.jpg 로 확장자를 변경해주면 shell.php 파일이 인식되게 된다.

 

 

이를 이용하여 💡널 바이트로 jpg 파일 확장자를 우회하고 /etc/passwd 파일을 불러오면 된다. 

 

 

filename=../../../../../../../etc/passwd%00.jpg 로 입력하면 passwd 파일에 접근이 가능하게 된다. 👏

 

 

Path Traversal 문제이다.

제목에서 경로의 시작이 유효하다는 힌트를 주고 있다. 

 

 

테스트 페이지에 접근 후 임의의 게시글 클릭 시 filename=/var/www/images/8.jpg 로 요청을 전달하고 있다.

 

 

즉, 제목에서 힌트를 얻었듯이 /var/www/imges 경로에 8.jpg 파일이 존재한다.

그렇다면 💡해당 경로에서 부터(시작) 우리가 원하는 /etc/passwd 파일의 경로로 접근하면 된다.

 

 

먼저 ../ 특수문자가 필터링되고 있는지 확인하기 위해

filename=/var/www/images/../images/8.jpg 를 입력했을 때 응답이 같은지 확인한다.

 

 

정상 요청과 응답이 같기 때문에 ../ 를 사용하여 파일에 접근이 가능하게 된다.

filename=/var/www/images/../../../etc/passwd 입력해주면 passwd 파일에 접근이 가능하다. 👏

 

 

Path Traversal 문제이다.

제목에서 불필요한 URL decode로 경로 조작 시퀀스를 제거했다..는 뜻이다.

여기서 URL Encoding 으로 우회가 가능하다는 생각이 든다.

 


먼저 ../../../../../etc/passwd 입력 시 "No such file" 응답을 확인할 수 있다. 

 

 

그렇다면, 제목에서 힌트를 얻은 것처럼 url encoding을 활용해보자.

../../../../../etc/passwd 는

%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2Fetc%2Fpasswd 로 작성이 가능하다.

 

그러나 % 특수문자를 필터링하는 것인지.. 위와 같은 response 를 확인했다. 

그렇다면 💡 double url encoding 을 활용해보자!

 

../../../../../etc/passwd

 

[ url encoding ]

%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2Fetc%2Fpasswd

 

[ double url encoding ]

%252E%252E%252F%252E%252E%252F%252E%252E%252F%252E%252E%252F%252E%252E%252F%252E%252E%252Fetc%252Fpasswd

 

 

double url encoding 으로 request 를 보내면? /etc/passwd 에 접근이 가능하게 된다. 👏

 

 

Path Traversal 문제이다.

제목에서 봤을 때 경로 조작 순서가 제거되었다.. 라는 뜻이라고 한다.

아마 경로 특수문자(../)가 필터링된 것 같다.

 

 

테스트 페이지에 접근해보면 앞선 문제들 처럼 임의의 shop 페이지를 확인할 수 있다.

 

 

임의의 게시글을 클릭한 뒤 request 값을 확인해보면 filenamae 파라미터를 통해 파일을 불러오고 있어

../../../../../../etc/passwd 를 시도하였으나 "No such file"을 확인할 수 있다.

 

 

예상대로, ../ 를 필터링하고 있는 것으로 보인다.

그렇다면 ../ 자체를 필터링 하고 있는지 특수문자(. / 등) 을 필터링하는 것인지 확인하기 위해

💡....//....//....//....//....//....//etc/passwd 를 시도하면 된다.

 

 

../ 필터링이 우회되어 /etc/passwd 파일에 접근이 가능하게 된다. 👏

 

 

Path Traversal 문제이다.

문제 제목에서 힌트를 얻을 수 있다.

absolute path bypass 즉, 절대 경로 우회라는 뜻이다.

 

 

테스트 페이지에 접근해보면 임의의 shop 페이지가 존재한다.

 

 

임의의 게시글 클릭 후 burp suite로 request를 잡아보면,

filename 파라미터를 통해 게시글의 이미지를 불러오는 것을 알 수 있다.

 

 

먼저 ./8.jpg로 접근을 시도하였을 때 이미지를 그대로 불러오는 것으로 보아 ./가 먹히는 것으로 확인해

filename=../../../../../etc/passwd 를 입력하였으나

response 에서 /etc/passwd 파일을 불러오지 못하고 "No such file" 문구를 확인하게 된다.

 

 

그럼 제목에서 처럼 절대경로 우회 방법을 사용하면 어떨까?

 

절대경로를 간단히 설명하자면, root에서부터의 전체 경로로 어느 곳에서든 접근이 가능하고

 

이와 반대되는 상대경로의 경우 파일의 위치를 기준으로 상대적인 경로를 갖는다.

 

 

 

../../../../etc/passwd 구문의 경우 현재 위치에서의 경로를 나타내기 때문에 💡절대경로로 접근하기 위해 filename=/etc/passwd 로 접근을 시도해보자.

 

절대경로로 입력 시 passwd 파일의 내용에 접근이 가능하다.👏

 

 

+ Recent posts