경로 탐색 공격이란?
경로 탐색 공격은 디렉터리 탐색 공격이라고도 한다.
여러분이 도서관에 방문했다고 가정합시다. 보통 우리는 도서관 열람실에 방문하여 책을 선택하고 빌려봅니다.
하지만 만약, 도서관 관리자만 들어갈 수 있는 통로를 찾아내서, 도서관의 비밀서고까지 들어간다면 어떨까요?
웹 서버(홈페이지)는 보통 특정 폴더 안에서만 파일이 보이게 설정되어 있습니다.
예를 들어 당신이 어느 웹서버에 접속하면 웹서버의 /home/web/user/ 폴더 안의 파일만 볼 수 있습니다.
그런데 해커가 파일 이름을 적는 칸에 ../../ 같은 특수 문자를 입력한다면 어떨까요?
..은 컴퓨터에서 '한 단계 위 폴더로 올라가라'는 뜻입니다.
즉, ../../를 반복하면 원래 폴더를 탈출해서 서버의 메인 시스템 파일까지 올라갈 수 있고, 거기서 조금 더 움직인다면 비밀번호를 저장해두는 etc/passwd 등의 중요한 폴더까지 접근할 수 있게 됩니다.
이러한 취약점을 이용하면 공격자는 애플리케이션이 실행 중인 서버에서 임의의 파일을 읽을 수 있습니다. 여기에는 다음이 포함될 수 있습니다.
- 애플리케이션 코드 및 데이터
- 백엔드 시스템용 자격 증명
- 민감한 운영 체제 파일
경우에 따라 공격자는 서버의 임의 파일에 쓰기 권한을 얻어 애플리케이션 데이터나 동작을 수정하고 궁극적으로 서버에 대한 완전한 제어권을 확보할 수 있습니다.
경로 탐색을 통해 임의의 파일 읽기
부제: 희희 니네집 비번 내꺼
판매 상품 이미지를 보여주는 쇼핑 애플리케이션을 상상해 보세요. 이 애플리케이션은 다음과 같은 HTML을 사용하여 이미지를 로드할 수 있습니다.
<img src="/loadImage?filename=218.png">
이 loadImageURL은 filename매개변수를 받아 지정된 파일의 내용을 반환합니다. 이미지 파일은 디스크의 지정된 위치 /var/www/images/ 에 저장됩니다. 이미지를 반환하기 위해 애플리케이션은 요청된 파일 이름을 기본 디렉터리에 추가하고 파일 시스템 API를 사용하여 파일 내용을 읽습니다. 즉, 애플리케이션은 다음 파일 경로에서 읽습니다.
/var/www/images/218.png
이 애플리케이션은 경로 탐색 공격에 대한 방어 기능을 구현하지 않았습니다. 따라서 공격자는 다음 URL을 요청하여 /etc/passwd서버의 파일 시스템에서 파일을 가져올 수 있습니다.
https://insecure-website.com/loadImage?filename=../../../etc/passwd
이로 인해 애플리케이션은 다음 파일 경로에서 데이터를 읽게 됩니다.
/var/www/images/../../../etc/passwd
이 순서는 ../파일 경로 내에서 유효하며 디렉터리 구조에서 한 단계 위로 이동함을 의미합니다. 세 개의 연속된 ../순서는 파일 시스템 루트로 이동하므로 /var/www/images/실제로 읽히는 파일은 다음과 같습니다.
/etc/passwd
유닉스 기반 운영 체제에서는 서버에 등록된 사용자 정보가 담긴 표준 파일이지만, 공격자는 동일한 기법을 사용하여 임의의 다른 파일도 탈취할 수 있습니다.
Windows에서는 ../와 모두 ..\유효한 디렉터리 탐색 시퀀스입니다. 다음은 Windows 기반 서버에 대한 동등한 공격의 예입니다.
https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini
내용은 읽어도 잘 이해가 안갈테니까, 실습을 해보자.
1) 아카데미에서 지원하는 홈페이지에 방문한다. (해당페이지는 버프슈트 아카데미를 통해 방문할 수 있다.)

2) 버프슈트의 프록시 메뉴에 들어가 [Intercept on] 상태로 변경 후, 오픈브라우저를 클릭한다.

3) 브라우저가 활성화 되면 우리가 필요한 정보를 얻기 위해 이미지 파일의 주소를 획득한다.


4) 이미지 주소를 활성화시킨 버프슈트 브라우저에 입력한다.
-> 이때 무한 로딩이 걸리는데 정상이다. 버프슈트에서 데이터를 낚아챈 다음, 서버에 전달하고 있지 않기 때문이다.

5) 버프슈트에서 확인해보면, 이미지의 주소값이 나온다.
실제로 상위 폴더로 이동할 수 있는지(사용자로부터 경로 입력값을 통한 이동을 허용하는지)
[./]를 입력해 확인해보기 위해, Intercept 화면에서 우클릭 -> Send to Repeater를 클릭한다.
./: 내 폴더를 의미하는 명령어, 여기서는 내 폴더의 17.jpg파일을 찾으라고 명령하는 것임.

6) 경로를 수정하고, 보낸 후, 기록을 확인한다.
./: 내 폴더를 의미하는 명령어, 여기서는 내 폴더의 17.jpg파일을 찾으라고 명령하는 것임.

7) 200 ok를 응답받았다. 경로탐색(디렉터리 조작)공격이 가능하다는 의미이다.

8) 우리가 찾으려는 것은 이 폴더 상위에 있는 passwd파일이기 때문에 경로이동을 진행한다.
../: 상위 폴더로 이동하라는 명령어


9) 정상적으로 답변을 얻었다. 해당 위치에 있는 passwd파일을 읽을 수 있다.

/etc/passwd 파일 읽는 법
화면의 첫 줄인 root:x:0:0:root:/root:/bin/bash를 예로 들면:
root: 사용자 계정 이름 (최고 관리자)
x: 비밀번호 (암호화되어 다른 파일에 저장됨을 뜻함)
0:0: 사용자 ID와 그룹 ID (관리자는 보통 0번입니다)
/root: 관리자의 홈 디렉토리 위치
/bin/bash: 사용하는 쉘(명령어 입력기) 종류
/etc/passwd 파일에서 두 번째 필드가 x로 표시되는 이유는 보안상의 이유로 실제 암호화된 비밀번호(해시값)를 별도의 공간인 /etc/shadow 파일로 옮겨두었기 때문이다. ㅎㅎㅋㅋ
'웹 해킹 > portswigger' 카테고리의 다른 글
| 버프슈트를 이용한 웹 해킹, 서버 측 취약점: OS 명령 주입 (0) | 2026.03.30 |
|---|---|
| 버프슈트를 이용한 웹 해킹, 서버 측 취약점: 파일 업로드 취약점 (0) | 2026.03.30 |
| 버프슈트를 이용한 웹 해킹, 서버 측 취약점: 서버 측 요청 위조(SSRF, Server-side request forgery) (0) | 2026.03.30 |
| 버프슈트를 이용한 웹 해킹, 서버 측 취약점: 인증 authentication (0) | 2026.03.29 |
| 버프슈트를 이용한 웹해킹: 버프슈트 설치 (1) | 2026.03.17 |