nmap이 rtsp라고 한 포트가 실제로는 AirPlay였다
부트캠프 첫날 기록이다. 칼리 환경을 세우고 정찰 도구를 처음 돌려봤는데, 마지막에 얻은 교훈이 제일 컸다 — nmap이 말하는 서비스는 추측이다.
칼리 환경 세우기 (UTM)
ISO로 직접 설치하려다 부팅이 멈췄다(of_root node is NULL). serial console 세팅까지 해야 해서 비효율이라, UTM 갤러리의 사전 빌드 Kali 2023 ARM64 이미지를 임포트하는 쪽으로 틀었다.
GPG 키링 에러
NO_PUBKEY ED65462EC8D5E4C5 가 떴다.
원인은 2025년 4월에 Kali가 서명 키를 분실해서 새 키로 교체했기 때문이다. 구버전 이미지에는 새 키가 없다.
sudo wget https://archive.kali.org/archive-keyring.gpg \
-O /usr/share/keyrings/kali-archive-keyring.gpg
여기서 배운 것
오래된 이미지에 apt full-upgrade 를 풀로 돌리면 커널까지 바뀌면서 부팅이 깨진다(블랙스크린). 실습용 VM은 키링만 고치고 도구는 개별 설치(apt install <도구>)하는 게 안전하다.
환경을 최신으로 맞추려다 환경 자체를 날리는 게 제일 흔한 첫날 사고다.
정찰 A — 외부 대상
security-wave.kro.kr 을 nmap -sV 로 훑었다.
| 포트 | 서비스 | 비고 |
|---|---|---|
| 22 | OpenSSH 9.6p1 | |
| 80 | nginx 1.24.0 | http |
| 443 | nginx 1.24.0 | ssl/http |
| 2121 | FTP (커스텀) | 배너에 clue=ftp-banner-only |
| 8088 | SecurityWave-DevPortal/0.3 | 커스텀 포털 |
| 9091 | 정체불명 | nmap 식별 실패 |
curl -I 로 헤더를 보니 리다이렉트 체인이 드러났다.
http ─301→ https ─302→ /week01/
http://→ 301 (영구 이동, HTTP 강제 업그레이드)https://→ 302 (임시 이동,/week01/로)
301과 302를 구분해서 읽으면 “이건 정책이고 저건 임시 안내”라는 게 보인다.
정찰 B — 내부망
| 포트 | nmap 추측 | 실제 | 판단 |
|---|---|---|---|
| 53 | domain | DNS | 보조 |
| 443 | https | filtered | 차단됨 |
| 5000 | rtsp | AirPlay/AirTunes | 노이즈(Mac) |
| 7000 | rtsp | AirPlay/AirTunes | 노이즈(Mac) |
| 8090 | http | SimpleHTTPServer 0.6 (Python 3.14.4) | 타겟 |
여기가 핵심이다. nmap은 5000·7000번을 rtsp 로 추측했지만 실제로는 맥의 AirPlay/AirTunes 였다. 포트 번호만 보고 서비스를 단정했다면 없는 스트리밍 서버를 파고들며 시간을 버렸을 것이다.
진짜 타겟은 8090이었다.
8090에서 나온 것
- 디렉터리 리스팅이 노출돼 있었다 →
.DS_Store,security-wave.kro.kr파일이 그대로 보임 security-wave.kro.kr파일 내용은 “Hello World” (더미).DS_Store노출은 그 자체로 정보 노출 취약점이다. macOS 폴더 메타데이터라서 숨겨진 파일명을 복구할 수 있다
빈 디렉터리 리스팅처럼 보여도 .DS_Store 하나가 폴더에 뭐가 있었는지 알려준다.
정리한 개념들
- nmap — 어떤 포트가 열렸고 무슨 서비스인지 1차 스캔. 추측이 섞여 있다
- curl -I — 헤더(서버, 상태코드, 리다이렉트, 쿠키) 빠른 확인
- curl — 본문(실제 내용, HTML 주석, 파일 목록) 자세히 분석
- 포트는 곧 다른 서비스다 — IP가 건물 주소면 포트는 방 번호다
프로토콜을 맞추는 것도 생각보다 중요했다. http 포트엔 http://, ssl/http 포트엔 https:// 로 붙어야 한다. 8090에 https:// 로 붙었다가 wrong version number 에러를 봤다.
남는 한 줄
nmap의 추측과 실제는 다를 수 있다. 반드시 curl이나 배너로 교차검증해야 한다.
첫날에 이걸 겪은 게 운이 좋았다. 안 그랬으면 이후 실습마다 스캐너 출력을 사실로 믿고 시작했을 것이다.