프로젝트/DVWA 실습

DVWA 실습 #5-3 - File Inclusion(high)

하루히즘 2021. 1. 12. 17:33

2021/01/12 - [프로젝트/DVWA 실습] - DVWA 실습 #5 - File Inclusion

 

DVWA 실습 #5 - File Inclusion

DVWA의 네 번째 실습 대상인 File Inclusion이다. 각 파일을 클릭하면 특정 php 코드가 실행되며 URL에 파일 이름이 파라미터로 전달된다. 이 특성을 활용하여 웹 서버가 다른 파일을 읽도록 하는 것이

haruhiism.tistory.com

문제 해결 방법

이번에는 Directory Traversal을 시도했을 경우 에러 메시지가 출력되는 게 아니라 아예 전용 문구만 출력되고 아무것도 나타나지 않는다.

그렇다면 '../' 같은 Directory Traversal을 사용하지 않고 직접 절대 경로를 입력하여 파일을 확인해보면 어떨까? '/etc/passwd' 파일을 입력했더니 여전히 동일한 에러 문구가 발생하는 것을 볼 수 있었다.

그런데 파라미터에 file1.php 부터 file4.php까지 쭉 입력하다 file5.php를 입력하니 다음처럼 에러가 그대로 출력되는 것을 볼 수 있었다.

그렇다면 특정 조건에 부합하지 않으면 이 "ERROR: File not found!" 메시지가 나타나지만 그 외의 경우(에지 케이스) 위처럼 php 에러가 그대로 출력되는 것이다. 그럼 지금까지 page에 넘겼을 때 "ERROR: File not found!" 문자열이 출력되지 않던 값들의 공통점은 무엇일까? 바로 첫 4글자가 file이라는 것이다.

위처럼 앞에 file 문자열만 붙어 있으면 뒤에 뭐가 오든 필터링되지 않는 것을 볼 수 있었다. 필터링을 수행하는 fnmatch() 함수에서는 정규표현식이 아니라 shell wildcard pattern을 사용한다. 이에 대해서는 이곳을 참고해보자.

 

Wildcards

Wildcards Wildcards are useful in many ways for a GNU/Linux system and for various other uses. Commands can use wildcards to perform actions on more than one file at a time, or to find part of a phrase in a text file. There are many uses for wildcards, the

tldp.org

하지만 file 문자열이 붙어 있으면 정상적으로 경로를 지정할 수 없기 때문에 File Inclusion을 시도할 수 없는데 그렇다면 어떻게 해야 할까? 여기서는 low 단계 포스트에서 조사했던 php의 Wrapper를 쓸 수 있다.

2021/01/12 - [프로젝트/DVWA 실습] - DVWA 실습 #5-1 - File Inclusion(low)

 

DVWA 실습 #5-1 - File Inclusion(low)

2021/01/12 - [프로젝트/DVWA 실습] - DVWA 실습 #5 - File Inclusion DVWA 실습 #5 - File Inclusion DVWA의 네 번째 실습 대상인 File Inclusion이다. 각 파일을 클릭하면 특정 php 코드가 실행되며 URL에 파일..

haruhiism.tistory.com

Wrapper 중 로컬 파일 저장소에 대한 URI를 다루는 'file://'를 사용하면 URL을 통해 특정 위치에 저장된 파일에 접근할 수 있다. 이 경우 '../'를 사용한 Directory Traversal은 불가능하기 때문에 절대 주소를 이용해 플래그 파일을 include 해야 하는데 php 에러 메시지에 관련 디렉토리가 전부 노출되어 있기 때문에 이를 참조하여 쉽게 디렉터리를 추측할 수 있다.

이런 경우에서 어떻게 php 파일의 소스 코드를 확인할 수 있을까? 꼭 파일을 읽어야 하는 것은 아니지만 문제에서 목표가 5가지 명언을 찾아내는 것이기 때문에 한번 읽어보려 했으나 아직 그 방법은 찾아내지 못했다. 추후 해결책을 발견하면 업데이트하겠다.