IT/영어 공부노트

Path Traversal 정리 본문

🛡️ security/web

Path Traversal 정리

소저어엉 2023. 8. 1. 12:53
반응형

Path Traversal 디렉토리 순회 

사용자의 입력 데이터가 적절한 검증 없이 URL/File Path에 직접적으로 사용될 경우 의도하지 않은 임의의 경로에 접근할 수 있는 취약점이다. 

출처: https://www.bugbountyclub.com/pentestgym/view/50


사용자의 입력 데이터가 URL Path에 사용될 경우 URL 구분 문자를 사용하지 못하도록 필터링 or 인코딩이 부재하다면, 의도한 경로가 아닌 타 경로로 접근해 다른 API를 호출할 수 있다. 
사용자 입력 데이터가 경로로 사용되어야 한다면 URL Encoding과 같은 인코딩이 필요하다. 

 

URL에서 해석되는 구분 문자

문자 의미
/ Path identifier
.. Parent directory
* /tmp/test/../1234 => /tmp/1234
? Query identifier
* ? 뒤는 query로 해석
# Fragment identifier
* # 뒤의 값은 Server로 전달되지 않음
& Parameter separator
* key1=value&key2=value... 형식으로 사용

 

예시

외부 웹사이트에 있는 파일과 스크립트 첨부

http://some_site.com.br/some-page?page=http://other-site.com.br/other-page.htm/malicius-code.php 


예방방법

1. 입력 유효성 검사 적용: 디렉토리 순회 시퀀스나 NULL byte가 존재하는지 검증하고 제거

2. 인덱스를 통한 파일 참조: 요청에 파일경로나 파일명을 직접 요청하도록 구현하지 않고, 특정 인덱스와 파일을 매핑하여 요청시에는 인덱스를 통해 요청되도록 구현

example.com?filename=some-file.html   (X)
example.com?fileidx=3                 (O) # some-file.html을 3으로 인덱싱

3. 최소 권한 적용: 웹 애플리케이션을 구동하는 사용자 계정이 불필요한 시스템 디렉토리나 파일에 접근할 수 없도록 권한을 최소화

4. 서버 패치: 항상 최신 버전으로 유지 

 

점검방법

Step1. 파일 시스템과 연결된 요청 탐색

1. 파일 업로드/다운로드 기능 점검

2. GET매개변수, URL 경로, POST Body데이터, 요청헤더 등을 통해 설정을 동적으로 로드하는 요청이 있는지 점검

  • GET 매개변수: http://www.target.com/view.php?file=some-file.html
  • URL 경로: http://www.target.com/download/some-file.pdf
  • POST Body 데이터: 
POST /getcontents HTTP/1.1
Host: www.target.com
...생략...

filename=some-file.html
  • Cookie 요청 헤더를 통한 템플릿 동적 생성: Cookie: bbc_id=bcae2ff6d760458ebbee5b48df22150c; bbc_asx=1245431 ; bbc_template=some-template

3. 요청에 파일명이나 디렉토리명이 사용된 요청 찾기 (이미지파일, pdf 파일)

 

 

Step2. 디렉토리 순회 공격에 취약한지 점검

1. 의심되는 요청을 디렉토리 순회 시퀀스를 이용해 /etc/passwd 또는 win.ini 파일을 읽을 수 있는지 확인

  • 리눅스: http://www.target.com/view.php?file=../../../../../etc/passwd
  • 윈도우: http://www.target.com/view.php?file=../../../../../windows/win.ini 

2. 파일이 읽힌다면 취약한 것, 혹시 유효성 검사를 하는 경우 위 방법은 차단될 수 있으니 필터 우회를 시도

 

 

Step 3. 유효성 검사 우회 

1. 필터가 있더라도, 안전하지 않은 방식으로 구현되었다면 우회할 수 있음

출처: https://www.bugbountyclub.com/pentestgym/view/50

문자 URL 인코딩 16비트
유니코드 인코딩
 (닷,dot) %2e %u002e
/ (슬래시) %2f %u2215
\ (백슬래시) %5c %u2216

참조

https://dreamhack.io/lecture/courses/15

https://owasp.org/www-community/attacks/Path_Traversal

https://www.bugbountyclub.com/pentestgym/view/50

반응형