업데이트로 돌아가기
New releaseAug 18, 2026

nmap-vulners v1.5

감지된 네트워크 서비스에 대한 알려진 취약점(CVE)을 식별하기 위해 Vulners API를 쿼리하는 Nmap NSE 스크립트로, 자동화된 CVE 조회 및 CVSS 점수 산정을 통해 표준 포트 스캐닝을 향상시킵니다.

공유

nmap-vulners

nmap 서비스 스캔을 실제 공격 대상이 되는 CVE 및 익스플로잇의 순위 목록으로 변환합니다.

nmap이 이미 식별한 소프트웨어를 가져와 Vulners 데이터베이스에 해당 소프트웨어에 대해 알려진 내용을 질의하고, 그 답변을 스캔 보고서 안에 출력하는 하나의 NSE 스크립트입니다. 실제로 익스플로잇 가능한 항목을 기준으로 가장 심각한 것부터 나열합니다.

tests license nmap data stars

API 키가 없는 SSH 포트, 키가 있는 동일 포트, 그리고 Coyote 배너 뒤의 Tomcat을 식별하는 웹 포트에 대한 세 가지 스캔

스캔용으로 공개된 호스트에 대한 실제 스캔입니다. 키 없음, 그다음 키 있음, 그다음 웹 포트: nmap의 -sV가 Coyote 배너를 보고하고 스윕이 그 뒤의 Tomcat과 jQuery를 식별합니다.


기능

열려 있는 모든 포트에 대해 nmap이 식별한 소프트웨어(-sV가 생성한 CPE)를 조회하고 Vulners가 해당 소프트웨어에 대해 알고 있는 내용을 출력합니다. 점수만이 아니라 실제로 익스플로잇되고 있는 항목을 기준으로 가장 심각한 것부터 나열하며, 각 행은 해당 정보의 상세 페이지로 연결되는 링크입니다.

HTTP 포트에서는 웹 스택 자체도 지문 분석하여 -sV가 볼 수 없는 소프트웨어(애플리케이션 프레임워크, CMS, 리버스 프록시 뒤의 PHP 버전)를 식별합니다. 721개의 규칙이 버전 정보를 담고 있는 응답의 부분( Server 헤더, X-Powered-By, 쿠키, 페이지 제목, <meta> 태그, <script src> 파일 이름 및 본문)을 읽습니다. 이러한 식별 결과도 조회되어 포트에 게시되므로 나머지 스캔에서 활용할 수 있습니다.

스윕 외에 추가로 수행하는 두 가지 작업:

  • nmap 자체의 서비스 배너를 읽습니다. -sV가 서비스를 식별하지 못한 경우, 원시 배너를 FTP, SMTP, SSH, MySQL, DNS, NTP, LDAP 등에 대한 규칙과 대조합니다. 이는 추가 요청 비용이 들지 않으며, 그 외에는 포트가 아무것도 보고하지 않을 상황에서 유용합니다.
  • 자신을 밝히지 않는 제품에 질의합니다. 자신의 이름은 밝히면서 버전을 숨기는 CMS는 흔하며, 아무리 패턴 매칭을 해도 페이지에 없는 숫자를 추출할 수는 없습니다. 제품이 인식되었지만 버전이 인식되지 않은 경우, 답을 알 수 있는 곳에 요청 하나를 보냅니다. Drupal의 경우 /CHANGELOG.txt, Joomla의 경우 /administrator/manifests/files/joomla.xml입니다. 여섯 가지 프로빙 대상 제품 중 어느 것도 실행하지 않는 호스트에는 추가 요청이 전송되지 않습니다.```sh nmap -sV --script vulners
That is the whole interface. It works without an API key; with one it tells you
more. There is no mode switch.```
PORT      STATE SERVICE VERSION
80/tcp    open  http    Apache httpd 2.4.7 ((Ubuntu))
| vulners: cpe:/a:apache:http_server:2.4.7  272 findings, 56 exploitable
|   SEVERITY  CVSS    AI  FLAGS    LINK
|   ========  ====  ====  =======  ==============================================================
|   CRITICAL  10.0   8.8  EXP      https://vulners.com/gitee/3E6BA608-776F-5B1F-9BA5-589CD2A5A351
|   CRITICAL   9.8   9.9  EXP      https://vulners.com/zdt/1337DAY-ID-39214
|   CRITICAL   9.8   9.6  EXP      https://vulners.com/packetstorm/PACKETSTORM:171631
|   CRITICAL   9.8   9.9           https://vulners.com/cve/CVE-2021-44790
|   CRITICAL   9.8   9.8           https://vulners.com/cve/CVE-2023-25690
|_  262 more not shown; -v shows all, -vv adds where each was found

키가 있으면 동일한 호스트에 대한 동일한 스캔이 다르게 응답합니다. KEV는 CISA가 해당 취약점이 실제 환경에서 악용된 것으로 기록했음을 의미하고, EPSS는 악용될 게시된 확률입니다:``` | vulners: cpe:/a:apache:http_server:2.4.7 272 findings, 78 exploitable | SEVERITY CVSS EPSS FLAGS LINK | ======== ==== ==== ======= ============================================================== | CRITICAL 9.1 >99% KEV EXP https://vulners.com/cve/CVE-2024-38475 | CRITICAL 9.0 >99% KEV EXP https://vulners.com/cve/CVE-2021-40438 | CRITICAL 9.1 >99% KEV https://vulners.com/cnvd/CNVD-2024-36387 | CRITICAL 10.0 71% EXP https://vulners.com/gitee/3E6BA608-776F-5B1F-9BA5-589CD2A5A351 | CRITICAL 9.8 97% EXP https://vulners.com/cve/CVE-2021-44790 |_ 262 more not shown; -v shows all, -vv adds where each was found

동일한 272개의 발견 항목, 다른 순서, 다른 최상위 행 - 그리고 그중 22개는 더 많이
악용 가능한 것으로 알려져 있는데, 이는 각 익스플로잇을 해당 CVE에 연결하는 키가 있기 때문이다.
이 두 결과 모두 vulners.com의 실제 응답으로, 해당 배너를 제시하는 로컬 서버를 대상으로 캡처된 것이다.

## 순위

사실은 예측보다 우선한다. 발견 항목은 다음과 같이 정렬된다:

1. **CISA KEV** - 실제 환경에서 악용된 것으로 기록됨
2. **SSVC `active`** - 조정자가 악용이 진행 중이라고 판단한 경우
3. **익스플로잇 존재** - 이 취약점 또는 해당 CVE에 대해 코드가 공개됨
4. **높은 EPSS** - 모델이 악용을 예측함
5. 그 외 모든 항목

CVSS는 동일한 대역 내에서만 동률을 깨며, 대역 간에는 적용되지 않는다: 악용된 7.5는
악용되지 않은 9.8보다 더 심각한 문제이며, 이를 말해주는 순서가 바로 이것이다.

열은 데이터를 따른다. 응답이 담지 않은 신호는 빈 셀을 표시하는 대신 해당 열을 잃는다.
빈 EPSS는 "조용함"으로 읽히기 때문이며, 이는 존재하지 않는 필드가 뒷받침할 수 없는 주장이다.

## API 키가 추가하는 것

| | |
|---|---|
| **키 없음** | nmap이 찾은 모든 CPE가 무료 엔드포인트에서 조회된다. 발견 항목, 점수, 익스플로잇 플래그 및 Vulners 자체 AI 점수. 크레딧 없음, 계정 없음 |
| **키 있음, 크레딧 없음** | 각 발견 항목은 id 엔드포인트가 아는 정보를 얻는다: 제목, 날짜, 상위 권고 또는 익스플로잇 페이지, 익스플로잇-대-CVE 연결, CISA KEV, 그리고 라이선스에 따라 EPSS 및 SSVC |
| **키 있음, 크레딧 1개** | 무료 경로로 전혀 식별할 수 없었던 소프트웨어가 원시 배너에서 식별된다. 여기서 비용이 드는 유일한 항목이며, CPE가 없는 서비스에만 해당한다 |

이미 CPE를 보유한 포트는 크레딧을 소모하지 않는다: 네 가지 제품을 대상으로 측정한 결과,
무료 조회는 CPE에 대해 유료 조회와 **동일한 CVE**를 반환한다. 크레딧이 구매하는 것은
식별이지 더 많은 취약점이 아니다.

무료 키는 [vulners.com/userinfo](https://vulners.com/userinfo)에서 얻을 수 있다.

## 설치

**macOS, Linux, Kali, WSL** - 인수 없이 한 줄로:```sh
curl -fsSL https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.sh | sh

Windows - 관리자 권한의 PowerShell:```powershell irm https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.ps1 | iex

설치 프로그램은 nmap에 데이터가 저장되는 위치를 묻고, 스크립트와 해당 데이터 파일을 그곳에 복사한 다음 스크립트 데이터베이스를 재구축하고, `--script vulners`가 방금 설치한 항목으로 실제로 해석되는지 확인합니다. nmap에는 자체 `vulners.nse`가 포함되어 있으며, 이 설치가 그것을 대체합니다.

<details>
<summary><b>루트 권한 없이, 및 기타 옵션</b></summary>```sh
# into ~/.nmap, no sudo; the installer prints the NMAPDIR line to add to your profile
curl -fsSL https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.sh | sh -s -- --user

# a specific directory
./install.sh --prefix /usr/local/share/nmap

# a specific release
./install.sh --ref v2.0

# remove everything it installed
./install.sh --uninstall

PowerShell도 동일한 옵션을 사용합니다: -User, -Prefix, -Ref, -Uninstall.

체크아웃에서```sh git clone https://github.com/vulnersCom/nmap-vulners cd nmap-vulners ./install.sh ``` 설치 프로그램은 옆에 있는 파일들을 사용하므로, 이 방식은 여러분이 클론한 내용을 정확히 설치합니다. 체크아웃 디렉터리에서 스크립트를 직접 실행해도 작동합니다:```sh nmap -sV --script "$PWD/vulners.nse" ``` > 체크아웃에서 실행할 때는 **절대** 경로를 사용하세요. nmap은 상대 경로 > `--script ./vulners.nse`를 자체 `script.db`에 대해 먼저 확인하고, > nmap에 포함된 복사본을 조용히 실행하므로 여러분의 것이 아닌 복사본이 실행됩니다.
수동 설치

파일 하나: vulners.nse를 <nmap data dir>/scripts/에 복사하고 sudo nmap --script-updatedb를 실행하세요. 배치할 다른 것은 없습니다. 스크립트는 사전을 스캔 시점에 다운로드하고 디스크에 아무것도 쓰지 않으므로, 잊을 것도 없습니다. 이전에는 실행은 되지만 아무것도 찾지 못하고 그 이유를 알려주지 않는 스크립트가 생기곤 했습니다.

1.x에서 업그레이드하는 경우, 해당 디렉터리에서 vulners_enterprise.nse와 http-vulners-regex.nse도 삭제하세요. 남아 있는 http-vulners-regex.nse는 여전히 default 카테고리를 포함하며, 일반 -sC에서도 대상을 계속 훑습니다. 설치 프로그램이 이 작업을 대신 처리합니다.

nmap 데이터 디렉터리는 보통 /usr/share/nmap(Debian, Ubuntu, Kali), /usr/local/share/nmap(소스에서 빌드), /opt/homebrew/share/nmap (Homebrew) 또는 C:\Program Files (x86)\Nmap(Windows)입니다. 확실히 하려면 nmap에 물어보세요:```sh nmap -d2 --script-help probe 2>&1 | grep nse_main.lua

`nse_main.lua` 파일이 들어 있는 디렉터리가 이 nmap이 사용하는 디렉터리입니다.

</details>

## 스크립트 인자

| 인자 | 기본값 | 의미 |
|---|---|---|
| `vulners.mincvss` | `0` | 이 값보다 낮은 점수의 결과를 숨깁니다. 점수가 매겨지지 않은 게시판과 알려진 익스플로잇이 있는 항목은 임계값과 관계없이 표시됩니다 |
| `vulners.paths` | 게시된 939개 경로 | 웹 스캔용 경로: Lua 목록, 줄마다 경로 하나씩 있는 파일을 가리키는 문자열 하나, 또는 스캔을 끄는 `none`. 읽을 수 없는 파일을 지정하면 게시된 목록으로 대체하지 않고 스캔을 중단하고 그 사실을 알립니다 |
| `vulners.width` | `80` | 테이블이 배치되는 터미널 너비 |
| `vulners.max_items` | `32` | 전체 스캔에서 청구되는 항목의 상한 |
| `vulners.api_key` | - | API 토큰. 누출 위험: nmap이 자체 명령줄을 `-oX`에 복사합니다 |
| `vulners.api_key_file` | - | 첫 줄이 토큰인 파일의 절대 경로 |
| `vulners.api_host` | `vulners.com` | API의 호스트 이름 |
| `vulners.api_port` | `443` | `api_host`의 포트 |

이름만 사용해도 되므로 `--script-args mincvss=7`만으로 충분합니다.

카테고리