개념 사전 · 개념

경로 순회와 파일 포함

Path Traversal · Directory Traversal · 디렉터리 순회

경로 순회는 외부 입력이 밖의 파일을 가리키도록 해석되는 문제다. 파일을 읽는 취약점과 파일을 코드로 포함하는 ·는 사용 API와 실행 조건에 따라 영향이 다르다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

01무엇이고, 어떤 일을 하나

  • 사용자 식별자를 서버의 파일 경로로 바꾸는 경계를 분석한다.
  • 허용된 저장 루트와 실제 열린 파일이 일치하도록 한다.
  • 다운로드·압축 해제·템플릿·파일 포함 기능의 접근 범위를 제한한다.

02어떤 순서로 동작하나

  1. 입력 해석

    사용자에게 받은 파일명·식별자가 어느 코드에서 경로로 변환되는지 찾는다. 식별자를 서버 내부 목록에 매핑하면 사용자에게 경로 문법을 노출하지 않을 수 있다.

  2. 경로 결정

    정규화된 결과와 허용 루트의 관계를 확인한다. 단순 문자열 접두사 검사만으로 디렉터리 경계와 심볼릭 링크를 모두 처리할 수는 없다.

  3. 파일 열기

    실제 접근 권한과 대상 파일의 종류를 검사한다. 검사 이후 링크나 파일이 바뀔 수 있는 환경에서는 검사한 대상과 사용하는 대상의 동일성이 필요하다.

  4. 응답 제공

    허가된 대상만 내용 유형·다운로드 정책에 맞게 제공한다. 파일 바이트 열람과 스크립트 포함·실행의 결과는 별도로 판단한다.

03먼저 알아둘 용어와 구성요소

접근이 허용된 파일 저장 경계.
상대 경로 등의 표현을 해석한 실제 경로 표현.
로컬 파일이 포함 기능의 입력으로 사용되는 문제.
원격 자원이 포함 기능에 연결되는 문제로 런타임 설정 조건이 필요하다.
LEARN THROUGH PRACTICE

업로드 성공과 서버 실행 가능성을 두 단계로 분리하기

파일이 저장되는 경계와 웹 서버가 그 파일을 실행하는 경계를 나누어 분석한다.

실습 구성과 전제

  • 교육용 의 격리 스냅샷에서 화면을 읽는다.
  • 직접 재현은 무해한 텍스트·이미지 파일로 한정하고 운영 서버나 실제 웹셸은 사용하지 않는다.
  1. 업로드 응답이 보장하는 범위를 읽는다

    • 성공 메시지는 서버가 선택한 경로에 파일을 저장했다는 단서다. 안전 검사 통과나 비실행 저장소 분리까지 증명하지 않는다.
    • multipart의 파일명·Content-Type은 클라이언트가 보낸 입력이다. 서버에서 확장자·형식·크기·저장 이름을 독립적으로 결정해야 한다.
    파일 포함·업로드와 실행 경계 · file upload원본 크기로 보기 ↗
    • File Upload 화면에 PHP 확장자의 파일이 업로드됐다는 메시지가 표시된다.
    • 반환 경로가 웹 애플리케이션 아래 uploads 위치를 가리킨다. 제공 경로와 실행 정책을 이어서 확인해야 한다.
    확인 기준

    업로드 성공과 파일 제공 정책을 별도 항목으로 적는다.

  2. 제공 경로가 실행 경로가 되는 조건을 찾는다

    • 다른 화면은 업로드 파일에 요청을 보내 서버 측 작업 디렉터리가 응답된 교육 사례다. 실행 권한이 없는 파일 저장소라면 같은 방식으로 프로그램이 실행되지 않아야 한다.
    • 웹 루트 밖 저장, 서버가 만든 식별자, 정적 다운로드 처리, 실행 엔진과의 분리가 서로 다른 통제다.
    파일 포함·업로드와 실행 경계 · file upload원본 크기로 보기 ↗
    • 주소 경로에 업로드된 PHP 파일이 있고 화면에 서버 디렉터리 결과가 나타난다.
    • 업로드 메시지와 달리 이 화면은 저장 파일이 실행 경로에 놓였음을 보여 주는 별도 증거다.
    확인 기준

    공격 입력을 반복하기보다 저장소·확장자 처리·서버 핸들러 설정을 조사한다.

  3. 무해한 파일로 수정 경계를 확인한다

    • 허용 이미지, 잘못된 확장자, 제한 크기 초과를 각각 제출한다. 저장 후 이름이 서버에서 생성되는지와 다운로드 응답의 MIME·Disposition을 확인한다.
    • 검사 중 파일은 제공하지 않고, 검사한 바이트와 제공하는 바이트가 같은지 확인한다.
    확인 기준

    거부된 파일이 디스크나 공개 경로에 남지 않는지도 점검한다.

실습에서 확인한 동작 원리

  • 업로드 성공은 안전 판정이 아니다.
  • 저장 정책과 웹 실행 정책을 함께 분리해야 한다.
관련 개념·전체 실습 화면 이어서 읽기 →
동작·명령 참고 문서

04예제로 따라가기

  • 가상 다운로드 API에서 문서 ID를 서버 저장 이름으로 매핑하면 사용자가 임의의 절대 경로를 고를 필요가 없다.
  • 허용 루트가 /srv/data일 때 문자열이 /srv/data로 시작한다는 검사만으로 /srv/database를 같은 경계라고 판단하면 안 된다.
  • 압축 파일 내부 경로도 외부 입력이므로 추출 결과가 목적 디렉터리 안에 남는지 검사한다.

05혼동하기 쉬운 점과 확인 기준

  • 문자열에서 특정 부분만 한 번 삭제하면 중복 인코딩·구분자·링크 해석 등 다른 경로 표현을 놓칠 수 있다.
  • 다운로드에 성공했다는 사실만으로 코드 실행을 주장하지 않는다. include·실행 기능과 권한 조건이 추가로 필요하다.

06상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.