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

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

by Robert8478 2023. 12. 14.

접근 권한 통제는 모든 단계에서 제어해야 한다. 관리자페이지, 비인가페이지에 대한 올바른 접근 제한 레벨을 설정해야 한다. 기능 수준의 접근 통제 누락은 접근 통제가 서버의 설정이나 관리 측면에서 제대로 이루어지지 않을 때 발생하는 취약점이다.
공격자는 이 취약점을 통해 요청을 변조하여 권한이 없는 기능을 사용할 수 있다.
대표적으로 파일 다운로드와 업로드 취약점을 이용 웹서버에 접근하는 공격 유형이 존재한다.

경로 탐색 취약점(Directory Traversal)은 주로 파일 다운로드 취약점과 같은 뜻으로 사용한다.
상대경로나 파일명, 디렉터리 명을 통해 관리자가 접근을 허용하지 않은 디렉터리나 파일에 접근한다.
경로 탐색 취약점이 있으면 공격자는 시스템과 DB의 정보를 수집할 수 있게 된다.


[난이도 하]

이번 페이지는 GET 방식으로 변수가 노출되는데 보면 directory 변수값에 따라 변수값에 해당하는 디렉터리 내부를 페이지에 출력하는듯 싶다. 한번 admin 폴더와 passwords 폴더 명을 변수값으로 넣으면 해당 폴더 내부 파일을 확인할 수 있을지 보자.

admin 변수값을 넣었더니 admin 폴더 내부의 파일들이 노출되었다. 설정값과 phpinfo 등의 정보가 노출되었다.

이번에는 passwords를 변수값으로 넣었더니 passwords 폴더 내부의 파일이 노출되었다. 계정에 대한 정보가 노출되는 것을 볼 수 있다. 이번에는 상대경로법을 이용해 경로를 순회해보자.

../../../ 상위 디렉터리로 가는 값을 세번 넣었더니 root 디렉터리의 정보를 확인할 수 있었다. 

../../../etc/ 와 같은 값을 넣게 되면 passwd와 shadow 파일이 있는 etc 폴더로 이동할 수 있다.

[난이도 중]

난이도 중에서도 passwords나 admin같은 현재 경로에 있는 다른 폴더명을 입력했을 때에 이동할수 있다.

하지만 ../를 입력하면 Directory Traversal detected! 가 떠서 상대경로 이동법이 막힌 것을 볼 수 있다.

혹시나 해서 . 만 쳐보았더니 같은 메시지를 출력하는 것을 보아 . 특수문자가 들어가면 블로킹 하는듯 싶었다. php 코드를 살펴보자

코드를 보니 check_2 함수로 필터링을 하고 있었다.

이 함수는 . 특수문자를 필터링 하고 있는 것을 볼 수 있다. 그러기에 상대경로 이동법은 막을 수 있지만 여전히 취약점이 존재하는 상태였다.

[난이도 상]

난이도 상에서는 상대경로 이동과 절대경로 이동 모두 되지 않는다. php 코드를 살펴보자.

보면 $base_path 값이 ./documents로 되어있다. 즉, directory 변수의 값을 documents 만 되도록 만든 것이다.
또한 check_3 함수로 필터링도 수행하고 있다.

이 함수는 사용자가 입력한 경로와 유저가 입력한 경로가 맞지 않으면 에러 메시지를 출력하도록 코드가 입력된것을 볼 수 있다.