Path Traversal 공격이란? ( 워게임 )

Moon Junsu·2025년 6월 3일

먼저 Path Traversal이 무엇인지 간단하게 알아본다.

Path Traversal이란?

공격자가 웹 어플리케이션이 파일 경로를 잘못 검증하는 취약점을 이용하는 것을 의미한다. 원래 접근이 불가능한 시스템 파일이나 민감한 정보에 접근하는 공격이다.

웹 어플리케이션이 사용자 입력을 이용해 파일을 읽거나 쓰는 경우, 공격자는 ../ 과 같은 상위 디렉터리 참조를 통해 루트 디렉토리까지 올라간 후 민감한 파일에 접근할 수 있다.

예를 들어 어떤 파일의 내용을 보여주는 POST 요청이 있다고 한다.

정상적인 파일 요청은
http://example.com/view?file=report.pdf

위와 같이 문제가 없다.

하지만 만약 공격자가 url을 다음과 같이 조작하고, 서버에는 별다른 제재가 없을 경우 아래와 같이

http://example.com/view?file=../../../etc/passwd

공격자는 시스템 파일을 열어 정보유출로 이어질 수 있다.

방어 방법

  1. 입력 검증 : ../ 과 같은 패턴 차단 또는 제거

  2. 화이트리스트 사용 -> 허용된 파일 이름 목록을 이용하여, 파일 허용의 목록을 최소화

  3. 가상 디렉터리 제한 : chroot, Docker 등으로 루트 디렉토리의 범위 제한

  4. 권한 설정 제한 : 서버가 읽을 수 있는 파일 범위를 최소화 ( 권한 분리 )

  5. 파일 경로 고정 : 사용자에게 전체 경로를 노출시키지 않고, 서버 내부에서 매핑 처리

워게임 문제 및 풀이 (pathtraversal)

드림핵의 문제를 통해 더 자세히 알아본다.

먼저 문제파일과 웹 사이트가 주어진다.

사용자 정보를 조회하는 API 서버라고 한다.

각 함수별로 살펴보면

먼저 '/'은 초기 화면, 'get_info' 는 get과 post요청을 처리한다.

post요청에서는 사용자의 userid Input을 통해 해당 userid에 대한 내용을 읽어와서 텍스트로 출력해준다.

flag는 /api/flag.txt의 경로에 존재한다. 만약 우리가 /api/flag에 접속하면 자연스럽게 flag를 반환할 것 이다.

아래는 웹사이트이다. userid에 admin을 입력하였더니 나온 결과이다.

먼저 처음에는 바로 접속을 시도해 보았다.

1. api 직접 호출

직접 호출을 하니 코드에 나와있는대로 401 에러를 반환한다.

Path Traversal을 이용해야 하니 ../flag 를 입력해 보았다. get_info에서 {API_HOST}/api/user/{userid} 로 요청받고 있으므로 userid 자리에
../flag를 넣으면 반환을 해줄 것 만 같다.

2. 입력값 변조(1)

반환을 해주지 않는다. 어디에선가 문제가 생긴 것 같다.

경로가 틀린건가 하고 다른 경로도 해보았지만 같았다. Burpsuite를 이용해서 요청 값을 제대로 확인해 보았다.

userid에 admin을 넣고 해당 요청을 잡아보았더니, 1로 변환되어 있었다. 아까 코드에서 내부 API의 동작 코드를 보여주었는데, 그 때문인 것 같다. 즉 API 요청 시에 적절

한 값으로 변경이 되는 로직이 추가되어 있는 것 같다.

3. 입력값 변조(2)

그래서 이번에는 이 Burpsuite를 통해 userid 파라미터에 직접 ../flag를 추가해 보았다.

이렇게 Path Traversal를 이용해서 FLAG를 획득하였다.

profile
보안 인프라 엔지니어

0개의 댓글