hhkb.dev

BLOG

2025-11-19 / 호스트기반모의해킹 · 07

Nmap 스크립트 엔진

1. 개요와 구조

Nmap 스크립트 엔진(NSE)은 Nmap 기능을 확장하는 자동화 도구다. 단순 포트 스캔을 넘어서 추가 점검이나 정보 수집을 붙일 때 많이 쓴다.

1.1 스크립트 저장소 디렉토리

기본 구조는 아래 정도만 알아 두면 충분하다.

  • 경로: 리눅스 기준 /usr/share/nmap/scripts/에 저장된다.
  • 구성: 기본 제공되는 .nse 스크립트가 다수 포함된다.
  • 카테고리: default, safe, intrusive, vuln, exploit, auth, brute 등으로 나뉜다.

nmap -sC는 이 중 default 카테고리 스크립트를 실행한다.

2. 심화 사용법

2.1 특정 스크립트 지정 실행

기본 스크립트 외에 특정 목적을 가진 스크립트만 콕 집어 실행할 수 있다.

  • 문법: --script [script_name]
  • 예시: SSH 인증 방식 확인
    nmap -p 22 --script ssh-auth-methods [Target_IP]
    
    결과에는 publickey, password처럼 지원하는 인증 방식이 표시된다.

2.2 인자 전달(Passing Arguments)

스크립트 실행 시 필요한 파라미터(Parameter)를 전달할 수 있다.

  • 문법: --script-args [key=value]
  • 예시: SSH 사용자 리스트 파일 지정
    nmap -p 22 --script ssh-brute --script-args userdb=/root/users.txt [Target_IP]
    

각 스크립트의 사용법과 인자는 nmap.org 공식 문서나 nmap --script-help [script_name]으로 확인할 수 있다.

3. 외부 스크립트 활용

기본 스크립트만으로 부족할 때는 GitHub 같은 곳의 외부 스크립트를 참고하기도 한다.

3.1 워드프레스 테마 탐지(WordPress Theme Enumeration) 예시

기본 스크립트로 해결되지 않을 때, 커뮤니티에서 개발된 스크립트를 활용한다.

  1. 검색(Finding): 구글이나 GitHub에서 wordpress theme enumeration nse 같은 키워드로 찾는다.
  2. 분석(Analysis): Lua 코드를 열어 동작 원리를 먼저 본다.
  3. 설치(Installation): scripts 디렉토리에 .nse 파일을 넣는다.
  4. 실행(Execution)
    nmap -p 80 --script http-wordpress-themes [Target_IP]
    

4. 커스텀 스크립트 개발

NSE는 Lua(루아)로 작성된다. 문법이 비교적 단순해서 기본 구조를 익히면 직접 스크립트를 읽고 손보기에도 무리가 없다.

4.1 스크립트 구조

보통 구조는 세 부분으로 나뉜다.

  1. Head: 스크립트 설명, 카테고리, 의존성을 적는 부분이다.
  2. Rule: 언제 실행할지 조건을 정하는 부분이다.
  3. Action: 실제 요청, 응답 파싱, 결과 반환을 처리하는 부분이다.

4.2 프로그래밍 실습 제안

처음부터 복잡하게 만들 필요는 없다. 특정 URL 뒤에 파일명을 붙여 요청을 보내고, 200 OK가 오는지만 확인하는 단순한 로직도 좋은 연습이 된다.

실무에서는 내부 애플리케이션 점검이나, 새로 공개된 점검 로직을 자동화할 때 NSE 형태로 정리해 쓰는 경우가 있다.