본문 바로가기

InfoSec Log/NSE

[NSE] NSE(Nmap Scripting Engine) 란?

 

NSE(Nmap Scripting Engine)는 Nmap(Network Mapper) 도구에 스크립트 기능을 추가한 것으로, Nmap은 네트워크 탐사 및 보안 감사에 널리 사용되는 도구입니다.

NSE를 통해 Nmap은 스캔 결과를 보다 심층적으로 분석하거나 특정 취약점을 찾아내기 위해 사용자 정의 스크립트를 실행할 수 있습니다.

NSE(Nmap Scripting Engine) 개요

  1. 목적

NSE의 주요 목적은 Nmap의 기능을 확장하고, 네트워크 스캔의 유연성과 깊이를 더하는 것입니다. NSE 스크립트는 다음과 같은 다양한 작업을 수행할 수 있습니다.

  • 특정 서비스의 버전 확인
  • 취약점 탐지
  • 네트워크 정책 준수 확인
  • 추가 정보를 수집하는 다양한 네트워크 조사

 

  1. 스크립트 언어

NSE 스크립트는 주로 Lua 프로그래밍 언어로 작성됩니다. Lua는 가볍고 빠르며, 내장형 스크립팅 언어로 널리 사용됩니다.

 

  1. 스크립트 실행

NSE 스크립트는 Nmap 스캔의 여러 단계에서 실행될 수 있습니다. 예를 들어, 서비스 버전 탐색 후나 특정 포트가 열려 있을 때 실행됩니다. 스크립트는 스캔 대상의 호스트와 포트 정보에 접근할 수 있으며, 이를 통해 다양한 네트워크 서비스를 분석합니다.

 

 

NSE 스크립트 구조

  1. 헤더
  • 스크립트의 이름, 설명, 작성자, 라이선스, 카테고리 등을 정의합니다.

예시:

description = [[
Checks if an FTP server allows anonymous logins.
]]
author = "Your Name"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"default", "auth", "safe"}
  1. 모듈 로드
  • 스크립트에서 사용할 Lua 모듈을 로드합니다.

예시:

local nmap = require "nmap"
local shortport = require "shortport"
local stdnse = require "stdnse"
  1. 포트 규칙
  • 스크립트가 실행될 포트나 서비스 조건을 정의합니다.

예시:

portrule = shortport.port_or_service(21, "ftp")
  1. 액션 함수
  • 스크립트의 주요 기능을 정의하는 함수입니다. 이 함수는 Nmap이 스크립트를 실행할 때 호출됩니다.

예시:

action = function(host, port)
  -- 주요 로직
end

 

스크립트 실행

 

다음과 같은 Nmap 명령을 통해 특정 NSE 스크립트를 실행할 수 있습니다.

 

nmap --script=<nse-script-name> <target-ip>