Directory Listing
웹 서버가 특정 디렉터리(폴더)에 대해 기본 문서(index.html, index.php 등)을 찾지 못했을 때, 그 폴더 안에 있는 파일/하위 디렉터리 목록을 그대로 보여주는 기능
발생원인
주된 원인은 서버 설정 때문이다.
대표적으로
- 해당 디렉터리에 index 파일이 없음
- 웹 서버에서 자동 인덱싱(autoindex) 기능이 켜져 있음
- 접근 제어가 제대로 설정되지 않음
- 개발/테스트용 디렉터리를 운영 환경에 그대로 둠
즉, 서버가 보여줄 메인 문서가 없으니, 대신 폴더 안 목록이라도 보여주자 라고 동작하는 것이다.
어떤 서버에서 보이나
Apache
: Apache에서는 Options Indexs 설정이 있으면 디렉터리 목록이 보일 수 있다.
Nginx
: Nginx에서는 autoindex on; 이 설정되어 있으면 디렉터리 목록이 노출된다.
특정 서버만의 문제가 아니라 어떤 웹 서버든 설정 실수로 발생 가능하다.
위험 수준
Directory Listing 자체가 바로 원격 코드 실행 같은 치명점은 아닐 수 있지만, 정보 노출(Information Disclosure) 관점에서 매우 위험하다.
☞ 공격자 입장에서 몰라야 할 파일과 경로를 한 번에 확인할 수 있기 때문
1. 민감 파일 발견 가능
- 백업 파일: backup.zip, site.tar.gz
- 설정 파일: config.bak, .env.old
- 로그 파일: error.log
- 테스트 파일: test.php, debug.txt
- 데이터 덤프: db.sql
- 문서 파일: admin-guide.pdf
2. 공격 표면 파악 쉬워짐
디렉토리 구조를 보면서
- 업로드 경로
- 백업 위치
- 오래된 소스 파일
- 개발자가 남긴 파일
같은 것들을 쉽게 볼 수 있고, 즉, 정찰하는 단계가 쉬워진다.
3. 취약점 연계
Directory Listing은 다른 공격의 출발점이 되는 경우가 많다.
- 특정 스크립트 파일 발견
- 백업 파일 다운로드
- 업로드된 파일/디렉터리 확인
- DB 정보나 관리자 경로 발견
실무 사례
1. 업로드 폴더
- /uploads/
- /files/
사용자가 올린 파일 목록이 그대로 노출될 수 있음
2. 백업 폴더
- /backup/
- /old/
운영자가 예전 파일을 잠깐 올려놨다가 잊어버린 경우가 많다.
3. 정적 파일 폴더
- /assets/
- /downloads/
의도적으로 공개한 파일만 있어야 하는데, 다른 문서까지 섞여 들어가는 경우가 있다.
4. 개발/테스트 경로
- /test/
- /dev/
- /temp/
개발 흔적이 운영 서버에 남아 있을 수 있다.
점검 방법
웹에서 접근 시도
- https://target.com/uploads/
- https://target.com/backup/
- htps://target.com/images/
Index of / ... 형태가 뜨면 directory listing 가능성이 크다.
방어방법
1. 디렉터리 목록 기능 비활성화
가장 기본적인 대응방법이다.
Apache
- Options -Indexs
Nginx
- autoindex off;
2. index 파일 배치
해당 폴더에 index.html 등을 둬서 목록 대신 기본 페이지가 나오게 할 수 있다.
3. 접근 제어 적용
민감한 디렉터리는 인증/인가 또는 서버 레벨 파단을 적용해야 한다.
- /backup/
- /admin/
- /internal/
4. 민감 파일 웹 루트 밖으로 이동
백업본, 설정 파일, DB 덤프는 애초에 웹에서 직접 접근 가능한 경로 밖에 둬야 한다.
5. 불필요한 파일 제거
운영 서버에는 테스트 파일, 덤프 파일, 임시 파일 같은 것들을 남겨두지 않는 것이 좋다.
'Web Study' 카테고리의 다른 글
| Host Split Attack (0) | 2026.03.04 |
|---|---|
| HTTP Session Hijacking (0) | 2026.03.04 |
| Parameter Tampering Attack (0) | 2026.03.04 |
| JS Obfuscation (0) | 2026.03.03 |
| AWK Code Injection (0) | 2026.02.20 |