본문 바로가기
3. 웹 애플리케이션 취약점 진단/비박스를 활용한 웹 애플리케이션 취약점 진단

[비박스를 활용한 웹 취약점 진단] 11-1. 기능 수준의 접근 통제 누락 [디렉터리 리스팅 취약점(파일)]

by Robert8478 2023. 12. 14.

[난이도 하]

이번 페이지도 디렉터리를 이동한 것처럼 GET 방식으로 인해 변수가 노출된다. 변수 값이 파일에 대한 값을 받을 때에 파일 디렉터리 리스팅이 가능한듯 하다. 이제 etc 폴더의 passwd 파일을 살펴보자

../../../etc/passwd 경로를 넣어준 결과 서버의 passwd 파일이 페이지에 노출된 것을 볼 수 있다. passwd 파일은 비박스 서버에 접근할 수 있는 아이디와 접근 권한 등을 기록한 파일이다. 이번엔 절대경로로 지정해주어 파일을 확인해 보자.

admin/phpinfo.php 경로를 넣어주어 phpinfo 파일의 내용이 페이지에 출력된 것을 볼 수 있다. 이처럼 파일이 저장된 디렉터리와 파일명을 정확이 알고 있으면 쉽게 파일의 내용을 출력할 수 있다.

[난이도 중]

난이도 중에서도 ../ 구문 없이 절대경로 입력으로 파일을 확인하는 것은 가능한 상태였다.

하지만 ../를 입력하면 필터링에 잡혀 방어되었다. php 코드를 살펴보자.

보면 check_1 함수로 필터링 하는 것을 볼 수 있다.

check_1 함수는 ../ 와 같은 구문을 필터링하여 상대경로 입력을 막지만 여전히 취약점은 존재하는 상태이다. ../ 구문의 우회 구문을 이용하면 여전히 공격이 가능하였다.


[난이도 상]
이번에는 message.txt 파일 이외에 다른 경로의 파일을 출력하지 않는다. php 코드를 살펴보자.

난이도 상은 check_3 함수로 필터링한다.

이 함수는 사용자가 변수에 입력한 데이터가 올바른 데이터인지 검사하여 필터링하고 있다.
realpath 함수를 호출해서 상대경로를 절대경로로 반환하고 strpos 함수를 통해 기본경로에 사용자가 입력한 경로가 포함되는지 체크한다. 포함되지 않는 경우 올바르지 않은 경로를 요청하기에 오류메시지가 출력된다.