2021/01/12 - [프로젝트/DVWA 실습] - DVWA 실습 #5 - File Inclusion
문제 해결 방법
이번에는 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을 사용한다. 이에 대해서는 이곳을 참고해보자.
하지만 file 문자열이 붙어 있으면 정상적으로 경로를 지정할 수 없기 때문에 File Inclusion을 시도할 수 없는데 그렇다면 어떻게 해야 할까? 여기서는 low 단계 포스트에서 조사했던 php의 Wrapper를 쓸 수 있다.
2021/01/12 - [프로젝트/DVWA 실습] - DVWA 실습 #5-1 - File Inclusion(low)
Wrapper 중 로컬 파일 저장소에 대한 URI를 다루는 'file://'를 사용하면 URL을 통해 특정 위치에 저장된 파일에 접근할 수 있다. 이 경우 '../'를 사용한 Directory Traversal은 불가능하기 때문에 절대 주소를 이용해 플래그 파일을 include 해야 하는데 php 에러 메시지에 관련 디렉토리가 전부 노출되어 있기 때문에 이를 참조하여 쉽게 디렉터리를 추측할 수 있다.
이런 경우에서 어떻게 php 파일의 소스 코드를 확인할 수 있을까? 꼭 파일을 읽어야 하는 것은 아니지만 문제에서 목표가 5가지 명언을 찾아내는 것이기 때문에 한번 읽어보려 했으나 아직 그 방법은 찾아내지 못했다. 추후 해결책을 발견하면 업데이트하겠다.
'프로젝트 > DVWA 실습' 카테고리의 다른 글
DVWA 실습 #6-1 - File Upload(low) (0) | 2021.01.14 |
---|---|
DVWA 실습 #6 - File Upload (0) | 2021.01.12 |
DVWA 실습 #5-2 - File Inclusion(medium) (0) | 2021.01.12 |
DVWA 실습 #5-1 - File Inclusion(low) (0) | 2021.01.12 |
DVWA 실습 #5 - File Inclusion (0) | 2021.01.12 |