Nmap Scripting Engine (NSE) 기초

NmapBeginner
지금 연습하기

소개

이 실습에서는 Nmap 을 단순한 포트 스캐너에서 다재다능한 감사 도구로 전환하는 방법을 배웁니다. Nmap 의 가장 강력하고 유연한 기능 중 하나인 Nmap Scripting Engine(NSE) 을 살펴볼 것입니다.

NSE 를 사용하면 사용자가 간단한 스크립트를 작성하고 공유하여 다양한 네트워크 작업을 자동화할 수 있습니다. 이러한 스크립트는 Nmap 에서 기대하는 속도와 효율성으로 병렬 실행됩니다. 이 실습을 마치면 Linux 시스템에서 이러한 스크립트의 위치를 찾고, 기본적이고 비침해적인 스크립트를 실행하며, 특정 스크립트를 실행하여 HTTP 웹 페이지 제목과 같은 정보를 자동으로 추출하는 방법을 알게 될 것입니다.

NSE 가 중요한 이유는 Nmap 을 단순한 매퍼 (mapper) 에서 소규모 감사 플랫폼으로 변화시키기 때문입니다. 포트가 발견되면 스크립트를 통해 별도의 도구를 즉시 사용할 필요 없이 애플리케이션에 대해 더 자세한 정보를 질문할 수 있습니다.

NSE 스크립트 위치 찾기

이 단계에서는 Nmap 이 스크립트를 저장하는 위치와 특정 스크립트를 검색하는 방법을 알아봅니다.

Nmap Scripting Engine(NSE) 은 Lua 프로그래밍 언어로 작성된 스크립트를 사용합니다. Linux 시스템에 Nmap 을 설치하면 기본 네트워크 탐색부터 복잡한 취약점 공격까지 모든 것을 다루는 수백 개의 스크립트가 함께 제공됩니다.

스크립트가 어디에 있는지 아는 것은 중요합니다. 방어자와 테스터 모두 대상에 대해 실제로 어떤 로직이 실행되고 있는지 이해해야 하기 때문입니다.

기본적으로 Nmap 은 모든 NSE 스크립트를 /usr/share/nmap/scripts/ 디렉토리에 저장합니다. 이 디렉토리의 내용을 나열하여 무엇을 사용할 수 있는지 확인할 수 있습니다.

다음 명령어를 실행하여 디렉토리의 첫 번째 스크립트 몇 개를 나열해 보세요.

ls /usr/share/nmap/scripts/ | head -n 10

다음과 유사한 출력이 표시됩니다.

acarsd-info.nse
address-info.nse
afp-brute.nse
afp-ls.nse
afp-path-vuln.nse
afp-serverinfo.nse
afp-showmount.nse
ajp-auth.nse
ajp-brute.nse
ajp-headers.nse

모든 파일이 Nmap Scripting Engine 을 의미하는 .nse 확장자로 끝나는 것을 확인할 수 있습니다.

600 개가 넘는 스크립트가 있기 때문에 특정 서비스와 관련된 스크립트를 검색하는 것이 유용할 때가 많습니다. 예를 들어, HTTP(웹 서버) 와 관련된 스크립트를 찾으려면 grep 명령어를 사용하여 결과를 필터링할 수 있습니다.

다음 명령어를 실행하여 HTTP 관련 스크립트를 찾아보세요.

ls /usr/share/nmap/scripts/ | grep http | head -n 10

웹 페이지 제목을 가져오는 http-title.nse나 인증 메커니즘을 확인하는 http-auth.nse와 같이 웹 서버와 상호 작용하도록 설계된 스크립트 목록이 표시됩니다.

기본 스크립트 실행 (-sC)

이 단계에서는 Nmap 의 기본 스크립트 세트를 실행하는 방법을 배웁니다.

Nmap 은 목적과 침해 정도에 따라 스크립트를 여러 그룹으로 분류합니다. default 카테고리에는 안전하고 빠르며 신뢰할 수 있다고 간주되는 스크립트가 포함되어 있습니다. 이 스크립트들은 대상을 공격하거나 서비스 중단을 일으키지 않으면서 유용한 정보를 수집합니다.

카테고리는 위험 및 의도 분류입니다. 이를 통해 사용 가능한 모든 것을 무작정 실행하는 대신 상황에 맞는 스크립트를 선택할 수 있습니다.

기본 스크립트 세트를 실행하려면 -sC 플래그를 사용할 수 있습니다. 이는 --script=default를 입력하는 것과 같습니다.

이 실습을 위해 포트 8080에서 가벼운 웹 서버가 백그라운드에서 실행 중이며, 포트 22에서는 표준 SSH 서비스가 실행되고 있습니다. 기본 스크립트를 사용하여 로컬 머신 (localhost) 의 특정 포트를 스캔해 보겠습니다.

다음 명령어를 실행하세요.

nmap -sC -p 22,8080 localhost

다음과 유사한 출력이 표시됩니다.

Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 14:56 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00013s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE SERVICE
22/tcp   open  ssh
8080/tcp open  http-proxy
|_http-title: LabEx Nmap NSE Target

Nmap done: 1 IP address (1 host up) scanned in 0.49 seconds

출력을 자세히 살펴보세요. 포트 8080 아래에서 Nmap 이 자동으로 http-title 스크립트를 실행하여 "LabEx Nmap NSE Target"이라는 웹 페이지 제목을 성공적으로 추출했습니다. Nmap 은 이러한 기본 스크립트를 사용하여 열린 포트에 대한 정보를 원활하게 수집합니다.

이는 -sC 플래그가 어떻게 Nmap 을 단순한 포트 스캐너에서 정보 수집 도구로 즉시 업그레이드하는지 보여줍니다.

특정 카테고리 스크립트 실행

이 단계에서는 --script 인수를 사용하여 특정 스크립트나 전체 스크립트 카테고리를 실행하는 방법을 배웁니다.

기본 스크립트 (-sC) 는 일반적인 정찰에 유용하지만, 때로는 특정 작업을 위해 특정 스크립트를 실행해야 할 때가 있습니다. 스크립트 이름을 --script 인수에 전달하여 이를 수행할 수 있습니다.

예를 들어, 다른 기본 스크립트를 실행하지 않고 포트 8080에서 실행 중인 웹 서버의 HTTP 제목만 가져오려면 http-title 스크립트를 직접 지정할 수 있습니다.

다음 명령어를 실행하세요.

nmap --script=http-title -p 8080 localhost

출력은 매우 집중되어 포트 상태와 http-title 스크립트의 결과만 표시합니다.

Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 14:56 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000057s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE SERVICE
8080/tcp open  http-proxy
|_http-title: LabEx Nmap NSE Target

Nmap done: 1 IP address (1 host up) scanned in 0.28 seconds

개별 스크립트 이름 외에도 스크립트 카테고리를 지정할 수 있습니다. Nmap 은 스크립트를 safe, intrusive, vuln(취약점 탐지), discovery, exploit과 같은 카테고리로 그룹화합니다.

다음 명령어를 실행하여 포트 8080에 대해 모든 safe 스크립트를 실행하세요.

nmap --script=safe -p 8080 localhost

참고: 전체 카테고리의 스크립트를 실행하는 것은 네트워크 환경과 해당 카테고리의 스크립트 수에 따라 상당한 시간 (때로는 9 분 이상!) 이 걸릴 수 있습니다. 일부 스크립트는 타임아웃을 기다릴 수도 있습니다. 기다리기 싫다면 Ctrl+C를 눌러 스캔을 취소하고 이 단계를 건너뛸 수 있습니다.

출력에는 HTTP 제목이 포함되지만, 정확한 Nmap 버전과 환경에 따라 다른 안전한 검사 결과도 포함될 수 있습니다.

Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 14:56 CST
Pre-scan script results:
| targets-asn: 
|_  targets-asn.asn is a mandatory parameter
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000057s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE SERVICE
8080/tcp open  http-proxy
|_http-date: Mon, 09 Mar 2026 06:57:04 GMT; 0s from local time.
|_http-fetch: Please enter the complete path of the directory to save data in.
| http-headers: 
|   Server: SimpleHTTP/0.6 Python/3.10.12
|   Date: Mon, 09 Mar 2026 06:57:03 GMT
|   Content-type: text/html
|   Content-Length: 103
|   Last-Modified: Mon, 09 Mar 2026 06:55:32 GMT
|   
|_  (Request type: HEAD)
|_http-title: LabEx Nmap NSE Target

Host script results:
| dns-blacklist: 
|   SPAM
|     list.quorum.to - SPAM
|     l2.apews.org - FAIL
|_    bl.nszones.com - SPAM
|_fcrdns: FAIL (No PTR record)
| resolveall: 
|   Host 'localhost' also resolves to:
|   Use the 'newtargets' script-arg to add the results as targets
|_  Use the --resolve-all option to scan all resolved addresses without using this script.
| unusual-port: 
|_  WARNING: this script depends on Nmap's service/version detection (-sV)

Post-scan script results:
| reverse-index: 
|_  8080/tcp: 127.0.0.1
Nmap done: 1 IP address (1 host up) scanned in 551.51 seconds

--script 인수를 사용하면 감사 프로세스를 세밀하게 제어할 수 있어 특정 보안 테스트 요구 사항에 맞게 스캔을 조정할 수 있습니다.

요약

축하합니다! Nmap Scripting Engine(NSE) 기초 실습을 성공적으로 완료했습니다.

이 실습에서 배운 내용은 다음과 같습니다.

  • NSE 스크립트의 기본 디렉토리 (/usr/share/nmap/scripts/) 를 찾고 표준 Linux 명령어를 사용하여 특정 스크립트를 검색하는 방법.
  • -sC 플래그를 사용하여 기본적이고 안전한 스크립트 모음을 실행하고 SSH 호스트 키나 HTTP 웹 페이지 제목과 같은 정보를 자동으로 수집하는 방법.
  • --script 인수를 사용하여 개별 스크립트를 이름으로 실행하거나 전체 스크립트 카테고리를 실행하여 네트워크 감사 작업을 정밀하게 제어하는 방법.

이러한 기초 기술을 통해 향후 네트워크 탐색 및 모의 해킹 작업에서 Nmap 을 강력하고 자동화된 보안 감사 도구로 활용할 수 있게 될 것입니다.