Path traversal이란
공격자가 경로를 조작하여 상위 디렉터리로 이동한 뒤 원래 접근할 수 없는 파일에 접근할 수 있는 취약점이다. 이 때 공격자가 읽을 수 있는 파일에는 애플리케이션 코드 및 데이터,자격증명,운영체제 파일 등이 있으며 일부 경우 공격자가 서버의 임의 파일에 쓰기도 수행할 수 있다.
공격 기법
- 경로 조작을 통한 임의 파일 읽기
ex)
http://insecure-website.com/loadimage?filename=../../../etc/passwd
공격자는 경로 조작 방어가 없는 url에 ../를 통해 상위 디렉터리로 이동하여 서버 사용자의 계정을 저장하는 /etc/passwd 파일을 읽는다.
+) windows에선 ../와 ..\이 동일하게 작동한다.
- 경로 조작 방어 구현 시 우회 방법
- 루트 디렉터리에서 시작하는 절대 경로를 사용하여 상위 디렉터리로 이동하지 않고 바로 파일을 참조한다.
- 중첩된 traversal 시퀀스 ex)...// .../\ →../로 변환되어 우회 가능
- 특정 확장자로 끝나야 하는 경우 - Null byte(%00)를 삽입하여 무시 가능
- 웹서버에서 필터링하는 경우 - url 인코딩 혹은 이중 url 인코딩으로 우회 가능 ex) ../ → %2e%2e%2f
방어 방법
사용자가 제공한 입력을 파일 시스템 API에 직접 전달하지 않는 것이 중요하다. 만약 넘겨야 한다면 2단계 방어를 적용해야 한다.
- 입력값 검증 - 허용된 값의 목록과 사용자 입력을 비교,입력값이 허용된 문자만 포함하는지 확인
- 경로 정규화 + 검증 - 입력 검증한 뒤 기본 디렉터리에 붙이고 해당 경로를 정규화한다. 이 경로가 예상한 기본 디렉터리로 시작하는지 확인하고 아닐 시 차단
실습
- 소스 코드를 확인해보면 . < > /는 막는다는 것을 확인할 수 있다.
- 업로드한 파일을 열어 안에 플래그 값을 쓰면 그 문자열로 덮어씌워져 플래그 값을 얻을 수 있는 파일이 만들어진다.
- E_ALL은 모든 오류 보기
↓
디렉터리 구조를 확인하기 위해 파일명을 길게 하여 에러를 내고 에러메시지를 확인하는 방법으로 문제 풀이

버프 스위트로 문제를 접속한 뒤 아무 파일이나 업로드하여 파일이름을 확인하였다.

에러를 내기 위해 파일 이름 뒤에 1을 넣어 길게 만들 뒤 forward를 하였더니

경로와 함께 오류 메시지가 뜬다. 빈파일을 생성한 뒤 url에 해당 경로를 이어 붙이고 업로드를 하면

플래그 값을 얻을 수 있다.
과제
https://portswigger.net/web-security/file-path-traversal/lab-simple
Web Application Security, Testing, & Scanning - PortSwigger
PortSwigger offers tools for web application security, testing, & scanning. Choose from a range of security tools, & identify the very latest vulnerabilities.
portswigger.net

버프스위트로 문제에 접속한 뒤 패킷을 확인하였다. 파일 이름을 수정하기 위해 jpg 즉 이미지인 패킷을 하나 골라 repeater로 보내주었다.

파일 이름을 상위 디렉터리로 이동 후 /etc/passwd를 열람할 수 있도록 변경하였고 send하였더니

정보가 나온다.
'웹해킹' 카테고리의 다른 글
| Authentication vulnerabilities (0) | 2025.11.11 |
|---|---|
| XSS (0) | 2025.11.05 |
| Command injection (0) | 2025.09.30 |
| SQL Injection (0) | 2025.09.24 |
| [Root Me]HTTP - POST 풀이 (0) | 2025.05.28 |