서비스 열거 & NSE¶
요약
열린 포트는 숫자일 뿐입니다. -sV가 그것을 제품과 버전으로 바꾸고, NSE 스크립트가 서비스에 더 물어봅니다. 그 버전이 CVE를 찾는 단서가 됩니다.
버전 탐지¶
| 플래그 | 의미 |
|---|---|
-sV |
열린 포트를 프로빙해 서비스와 버전 식별 |
-v |
열린 포트를 찾는 즉시 출력 |
--stats-every=5s |
5초마다 진행 상황 출력 |
--version-trace |
-sV가 쓴 프로브와 매칭 결과 표시 |
Nmap은 먼저 핸드셰이크 뒤 서버가 스스로 보내는 배너를 읽고, 안 되면 시그니처 프로브를 보냅니다 (더 느림). 출력에는 배너 중 파싱된 부분만 나오므로 쓸모 있는 정보가 가려질 수 있습니다. 비교해 보세요.
Nmap은 Postfix smtpd만 보여 줬지만 nc는 220 inlane ESMTP Postfix (Ubuntu)를 돌려줬습니다. OS 계열이 원문 배너에 있었던 것입니다. Nmap 안에서는 --packet-trace/--version-trace로, 원문 대화를 보고 싶으면 nc로 확인합니다. 둘 다 됩니다. 배너는 관리자가 지우거나 위조할 수 있으니 힌트로만 보세요.
NSE 카테고리¶
스크립트는 Lua로 작성합니다. 카테고리는 14개: auth, broadcast, brute, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version, vuln.
sudo nmap <ip> -sC # default category
sudo nmap <ip> --script vuln # a category
sudo nmap <ip> -p 25 --script banner,smtp-commands # named scripts
sudo nmap <ip> -p 80 -A # -sV -O --traceroute -sC
sudo nmap <ip> -p 80 -sV --script vuln # vuln needs -sV for useful matches
읽는 법: http-enum이 /wp-login.php와 WordPress 버전을 보여 주면 CMS와 정확한 버전을 찾아볼 수 있고, smtp-commands에 VRFY가 있으면 사용자 열거가 가능하며, vulners는 탐지된 CPE에 대한 CVE ID와 CVSS 점수를 출력합니다.
vulners/vuln 결과는 버전 매칭일 뿐 실제 익스플로잇 가능 여부가 아닙니다. 보고서에 쓰기 전에 직접 검증하세요.
펜테스터 관점¶
- 발견한 포트에
-sC -sV가 표준 2차 스캔입니다. intrusive,dos,brute,exploit,fuzzer는 계정 잠금이나 서비스 중단을 일으킬 수 있습니다. 범위가 허용하지 않으면 운영 환경에서 돌리지 마세요.-A는 OS 탐지와 traceroute까지 하므로 랩에서는 괜찮지만, 약한 망에서는 한 번 더 생각하세요.
방어자 관점¶
- NSE HTTP 스크립트는 바꾸지 않으면 식별 가능한 User-Agent를 보냅니다 (
http.log/프록시 로그의Nmap Scripting Engine). -sV는 이상한 프로브 문자열의 짧은 연결을 많이 만들어 서비스 쪽에 잘못된 요청이 쌓입니다. 웹 서버는 400/404 폭증, SMTP는 알 수 없는 명령을 기록합니다.- 배너를 줄이는 것(
ServerTokens Prod, 리버스 프록시)은 버전 기반 CVE 조회를 늦출 뿐 그 자체로 해결책은 아닙니다.
CPTS 시험 메모
CTF식 플래그는 배너나 NSE 출력(banner, http-title, smtp-commands)에 있는 경우가 많습니다. -sV에 없으면 --script banner로 다시 돌리거나 직접 접속하세요.