본문 바로가기
해킹&보안/웹

[Writeup] Forbidden Paths

본 블로그는 학습용입니다. 명시적 동의 없는 시스템 접근·정보수집은 불법이며 형사·민사 책임이 따릅니다.
실습은 격리된 테스트 환경에서만 허용됩니다. (형법·정보통신망법·정보통신기반보호법 등)

1. 주제

웹 보안의 고전적이면서도 여전히 강력한 취약점인 경로 탐색에 대해 다룹니다. 사용자가 웹 서버에 특정 파일을 요청할 때 입력값 검증이 미흡하면 공격자가 웹 애플리케이션의 루트 디렉토리를 벗어나 시스템의 민감한 파일에 접근할 수 있게 됩니다.

핵심 요약: 경로 탐색은 ../ 와 같은 특수 문자를 이용해 상위 디렉토리로 이동하여 허용되지 않은 파일(설정 파일, 시스템 파일 등)을 읽어내는 공격 기법입니다. 단순한 실수로 인해 서버 전체가 장악될 수 있는 심각한 취약점입니다


2. 정의 및 작동 원리

2.1. 상세 정의

경로 탐색 또는 디렉토리 탐색은 사용자가 제공한 파일 경로를 서버가 제대로 검증하지 않을 때 발생하는 취약점입니다. 공격자는 경로를 조작하여 웹 서버의 문서 루트(Document Root) 디렉토리 바깥에 존재하는 파일 시스템의 다른 부분에 접근할 수 있습니다. 예를 들어, 웹사이트는 /var/www/html 디렉토리의 파일만 보여줘야 하지만, 이 취약점을 이용하면 /etc/passwd 같은 시스템 파일을 읽을 수 있습니다

 

2.2. 흐름

공격은 서버가 상대 경로(../)를 해석하는 방식을 악용합니다. 서버는 사용자가 입력한 경로를 웹 루트 디렉토리 기준으로 해석하는데, 필터링이 없다면 상위 디렉토리로 얼마든지 이동할 수 있습니다.

  • 정상 사용자: GET /downloads?file=report.pdf → 서버는 /var/www/html/downloads/report.pdf 파일을 반환합니다.
  • 공격자: GET /downloads?file=../../../../etc/passwd → 서버는 /var/www/html/downloads/../../../../etc/passwd 경로를 해석하여 최종적으로 /etc/passwd 파일을 반환합니다.

3. 시나리오 및 실습 환경

3.1. 목표 

웹사이트의 파일 경로 필터링을 우회하여 서버 최상위 디렉토리(/)에 위치한 flag.txt 파일을 읽어 숨겨진 Flag 값을 획득한다.

 

3.2. 실습 환경 

  • Target: picoCTF - Forbidden Paths 
  • Tool(s): 웹 브라우저
  • 주요 정보
    웹 서버의 루트 디렉토리: /user/share/nginx/html
    필터링 규칙: 절대 경로( /로 시작하는 경로) 사용 금지

4. 분석 및 공격 절차

4.1. [1단계: 정보 수집 및 분석]

먼저 주어진 정보를 확인합니다

문제를 확인해보면 

  1. 웹 페이지는 /user/share/nginx/html 에서 실행
  2. 웹사이트는 /flag.txt 처럼 /로 시작하는 절대 경로 입력을 차단함

 

우리는 현재 위치에서 최상위 디렉토리까지 상대 경로를 이용해 거슬러 올라가야 합니다

현재 위치인 html에서 루트(/)까지의 깊이를 계산합니다

 

/(1)/user/(2)/share/(3)/nginx/(4)/html → 총 4단계 깊이입니다.

즉, 상위 디렉토리로 4번 이동(../ 를 4번 사용)하면 루트(/)에 도달할 수 있습니다

 

4.2. [2단계: 취약점 테스트 및 페이로드 구성]

확인한 내용을 바탕으로 페이로드를 구성합니다.

  • 상위 디렉토리로 4번 이동: ../../../../
  • 목표 파일 지정: flag.txt

 

이 페이로드는 /로 시작하지 않으므로 웹사이트의 단순한 절대 경로 필터를 우회할 수 있습니다.

 

4.3. [3단계: 공격 수행 및 목표 달성]

구성한 페이로드를 웹사이트의 파일명을 입력하는 부분에 삽입하고 요청을 보냅니다. 서버는 이 상대 경로를 해석하여 웹 루트를 벗어나 최상위 디렉토리에 있는 flag.txt 파일의 내용을 화면에 출력합니다.



5. 핵심 코드 및 결과 

5.1. 주요 페이로드

이번 공격의 핵심은 서버의 필터링 로직을 우회하고 파일 시스템을 탐색하게 만든 아래의 상대 경로 페이로드입니다.

../../../../flag.txt

 

5.2. 최종 결과

입력 결과 서버는 flag.txt 파일의 내용을 성공적으로 반환고 플래그를 획득할 수 있었습니다.


6. 대응 방안 및 결론

6.1. 보안 대책

이러한 경로 탐색 공격을 방어하기 위한 핵심적인 방법은 다음과 같습니다.

  1. 사용자 입력값 처리: 사용자가 입력한 파일 경로에서 ../..\\ 같은 문자열을 완전히 제거하거나 요청 자체를 거부해야 합니다
  2. 화이트리스트
  3. 기반 검증: 사용자가 요청할 수 있는 파일의 목록을 미리 정해두고, 이 목록에 포함된 파일에 대한 요청만 처리합니다.
  4. 경로 정규화 후 검증: 서버단에서 사용자가 입력한 경로의 최종 절대 경로(Canonical Path)를 확인하고, 이 경로가 여전히 웹 루트 디렉토리 내에 속해 있는지 반드시 검증해야 합니다.
  5. 최소 권한 원칙 준수: 웹 서버를 실행하는 계정에 파일 시스템을 읽을 수 있는 최소한의 권한만 부여하여, 취약점이 발생하더라도 피해 범위를 최소화합니다.

6.2. 결론

이번 실습을 통해 경로 탐색 취약점의 위험성을 확인했습니다. 개발자가 /로 시작하는 절대 경로만 막는 불완전한 필터링을 적용했기 때문에 공격자는 ../를 이용한 상대 경로 조작으로 손쉽게 보안을 우회할 수 있었습니다.

실무에서는 사용자로부터 입력받는 모든 값은 신뢰할 수 없다는 원칙을 기억하고 항상 서버 측에서 강력한 입력값 검증 로직을 구현하여 안전한 시스템을 구축해야 합니다.

참고 자료 

OWASP - Path Traversal: https://owasp.org/www-community/attacks/Path_Traversal

'해킹&보안 > ' 카테고리의 다른 글

[Writeup] NoSQL Injection  (0) 2025.10.31
Command-injection  (0) 2025.10.19
[Writeup] SQL Injection  (0) 2025.10.01
CSRF 취약점 A to Z  (0) 2025.09.30
세션 기반 인증과 JWT 토큰 기반 인증  (0) 2025.09.27