웹사이트 검색

Linux에서 NSE(Nmap 스크립트 엔진) 스크립트를 사용하는 방법


Nmap은 널리 사용되는 강력한 크로스 플랫폼 명령줄 네트워크 보안 스캐너 및 탐색 도구입니다. 또한 네트워크에 연결된 시스템의 개요를 얻는 데 도움이 될 수 있습니다. 이를 사용하여 라이브 호스트의 모든 IP 주소를 찾고 해당 호스트에서 실행 중인 열려 있는 포트와 서비스를 검색하는 등의 작업을 수행할 수 있습니다.

Nmap의 흥미로운 기능 중 하나는 훨씬 더 많은 유연성과 효율성을 제공하는 Nmap 스크립트 엔진(NSE)입니다. 이를 통해 Lua 프로그래밍 언어로 자신만의 스크립트를 작성하고 이러한 스크립트를 다른 Nmap 사용자와 공유할 수 있습니다.

더 읽기: Linux용 Nmap 명령의 29가지 실제 사례

NSE 스크립트에는 다음과 같은 네 가지 유형이 있습니다.

  • 사전 규칙 스크립트 – Nmap의 스캔 작업 전에 실행되는 스크립트로, Nmap이 대상에 대한 정보를 아직 수집하지 않았을 때 실행됩니다.
  • 호스트 스크립트 – Nmap이 대상 호스트에 대한 호스트 검색, 포트 검색, 버전 감지 및 OS 감지와 같은 일반적인 작업을 수행한 후에 실행되는 스크립트입니다.
  • 서비스 스크립트 – 대상 호스트에서 수신 대기하는 특정 서비스에 대해 실행되는 스크립트입니다.
  • 사후 규칙 스크립트 – Nmap이 모든 대상 호스트를 스캔한 후에 실행되는 스크립트입니다.

그런 다음 이러한 스크립트는 인증(auth), 호스트 검색(브로드캐스트), 인증 자격 증명을 추측하기 위한 무차별 대입 공격(무차별<), 네트워크에 대한 추가 검색(검색), 서비스 거부 유발(dos), 일부 취약점 악용(악용) 등. 다수의 스크립트가 기본 범주에 속합니다.

참고: 더 진행하기 전에 다음 주요 사항을 기록해 두시기 바랍니다.

  • 비판적으로 검토하지 않거나 작성자를 신뢰하는 경우에만 제3자의 스크립트를 실행하지 마십시오. 이는 이러한 스크립트가 샌드박스에서 실행되지 않아 예기치 않게 또는 악의적으로 시스템을 손상시키거나 개인 정보를 침해할 수 있기 때문입니다.
  • 둘째, 이러한 스크립트 중 다수는 prerule 또는 postrule 스크립트로 실행될 수 있습니다. 이를 고려하여 일관성을 위해 사전 규칙을 사용하는 것이 좋습니다.
  • Nmap은 scripts/script.db 데이터베이스를 사용하여 사용 가능한 기본 스크립트와 카테고리를 파악합니다.

사용 가능한 모든 NSE 스크립트의 위치를 보려면 다음과 같이 터미널에서 찾기 유틸리티를 실행하십시오.

locate *.nse

/usr/share/nmap/scripts/acarsd-info.nse
/usr/share/nmap/scripts/address-info.nse
/usr/share/nmap/scripts/afp-brute.nse
/usr/share/nmap/scripts/afp-ls.nse
/usr/share/nmap/scripts/afp-path-vuln.nse
/usr/share/nmap/scripts/afp-serverinfo.nse
/usr/share/nmap/scripts/afp-showmount.nse
/usr/share/nmap/scripts/ajp-auth.nse
/usr/share/nmap/scripts/ajp-brute.nse
/usr/share/nmap/scripts/ajp-headers.nse
/usr/share/nmap/scripts/ajp-methods.nse
/usr/share/nmap/scripts/ajp-request.nse
/usr/share/nmap/scripts/allseeingeye-info.nse
/usr/share/nmap/scripts/amqp-info.nse
/usr/share/nmap/scripts/asn-query.nse
...

NSE 스크립트는 --script 플래그를 사용하여 로드됩니다. 이를 통해 범주, 스크립트 파일 이름 또는 스크립트가 있는 디렉터리 이름을 제공하여 자신만의 스크립트를 실행할 수도 있습니다.

스크립트를 활성화하는 구문은 다음과 같습니다.

nmap -sC target     #load default scripts
OR
nmap --script filename|category|directory|expression,...   target    

--script-help 옵션을 사용하면 스크립트에 대한 설명을 볼 수 있습니다. 또한 --script-args--script-args-file 옵션을 통해 일부 스크립트에 인수를 전달할 수 있습니다. 명령줄 인수.

대부분의 기본 스크립트를 사용하여 스캔을 수행하려면 -sC 플래그를 사용하거나 표시된 대로 --script=default를 사용하십시오.

nmap -sC scanme.nmap.org
OR
nmap --script=default scanme.nmap.org
OR
nmap --script default scanme.nmap.org
샘플 출력
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:36 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.0027s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
80/tcp open  http
|_http-title: Go ahead and ScanMe!

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

적절한 목적으로 스크립트를 사용하려면 먼저 스크립트가 실제로 수행하는 작업에 대한 간략한 설명(예: http-headers)을 확인할 수 있습니다.

nmap --script-help http-headers scanme.nmap.org
샘플 출력
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:37 IST

http-headers
Categories: discovery safe
https://nmap.org/nsedoc/scripts/http-headers.html
  Performs a HEAD request for the root folder ("/") of a web server and displays the HTTP headers returned.

Nmap 스캔을 수행하기 위해 NSE 스크립트 로드

아래 설명된 다양한 방법으로 검사를 수행하기 위해 스크립트를 선택하거나 로드할 수 있습니다.

스크립트 이름 사용

스크립트의 기능을 알고 나면 이를 사용하여 스캔을 수행할 수 있습니다. 하나의 스크립트를 사용하거나 쉼표로 구분된 스크립트 이름 목록을 입력할 수 있습니다. 아래 명령을 사용하면 대상 호스트의 웹 서버에 구성된 HTTP 헤더를 볼 수 있습니다.

nmap --script http-headers scanme.nmap.org
Starting Nmap 7.01 ( https://nmap.org ) at 2017-11-15 10:39 IST
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.27s latency).
Not shown: 996 closed ports
PORT      STATE    SERVICE
22/tcp    open     ssh
80/tcp    open     http
| http-headers: 
|   Date: Wed, 15 Nov 2017 05:10:04 GMT
|   Server: Apache/2.4.7 (Ubuntu)
|   Accept-Ranges: bytes
|   Vary: Accept-Encoding
|   Connection: close
|   Content-Type: text/html
|   
|_  (Request type: HEAD)
179/tcp   filtered bgp
31337/tcp open     Elite

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

카테고리 사용

한 카테고리 또는 쉼표로 구분된 카테고리 목록에서 스크립트를 로드할 수도 있습니다. 이 예에서는 기본 및 브로드캐스트 범주의 모든 스크립트를 사용하여 192.168.56.1 호스트에서 검사를 수행합니다.

nmap --script default,broadcast 192.168.56.1

* 와일드카드 사용

이는 주어진 이름 패턴을 가진 스크립트를 선택하려는 경우에 유용합니다. 예를 들어 이름이 ssh로 시작하는 모든 스크립트를 로드하려면 터미널에서 아래 명령을 실행합니다.

nmap --script "ssh-*" 192.168.56.1

부울 표현식 사용

and, ornot 연산자를 사용하여 작성할 수 있는 부울 표현식을 사용하여 스크립트를 선택할 수도 있습니다. 부울 표현식의 이름은 카테고리, script.db의 파일 이름 또는 모두일 수 있습니다.

다음 명령은 기본 또는 브로드캐스트 범주에서 스크립트를 로드합니다.

nmap --script "default or broadcast" 192.168.56.10

이는 다음과 같습니다.

nmap --script default,broadcast 192.168.56.10

vuln 범주에 있는 스크립트를 생략하고 모든 스크립트를 로드하려면 터미널에서 이 명령을 실행하세요.

nmap --script "not vuln" 192.168.56.10

다음 명령은 약간 복잡해 보이지만 이해하기 쉽습니다. 기본 또는 브로드캐스트 범주에서 스크립트를 선택하고 이름이 ssh-로 시작하는 스크립트는 제외합니다.

nmap --script "(default or broadcast) and not ssh-*" 192.168.56.10

중요한 것은 다음과 같이 범주, 스크립트 이름, 사용자 정의 스크립트가 포함된 디렉터리 또는 부울 표현식을 결합하여 스크립트를 로드할 수 있다는 것입니다.

nmap --script broadcast,vuln,ssh-auth-methods,/path/to/custom/scripts 192.168.56.10

NSE 스크립트에 인수 전달

다음은 –script-args 옵션을 사용하여 스크립트에 인수를 전달하는 방법을 보여주는 예입니다.

nmap --script mysql-audit --script-args "mysql-audit.username='root', \
mysql-audit.password='password_here', mysql-audit.filename='nselib/data/mysql-cis.audit'"

포트 번호를 전달하려면 -p nmap 옵션을 사용하세요.

nmap -p 3306 --script mysql-audit --script-args "mysql-audit.username='root', \ 
mysql-audit.password='password_here' , mysql-audit.filename='nselib/data/mysql-cis.audit'"

위 명령은 CIS MySQL v1.0.2 벤치마크의 일부에 대해 MySQL 데이터베이스 서버 보안 구성 감사를 실행합니다. 다른 MySQL 감사를 위해 유용한 사용자 정의 감사 파일을 직접 생성할 수도 있습니다.

지금은 그게 다입니다. Nmap 매뉴얼 페이지에서 자세한 정보를 찾거나 NSE 사용법을 확인하세요.

자신만의 NSE 스크립트 작성을 시작하려면 이 가이드를 확인하세요: https://nmap.org/book/nse-tutorial.html

결론

Nmap은 모든 시스템 또는 네트워크 관리자가 보안을 위해 필요한 매우 강력하고 유용한 도구입니다. NSE는 여기에 효율성을 더해줍니다.

이 도움말에서는 Nmap 스크립트 엔진을 소개하고 다양한 카테고리에서 사용 가능한 다양한 스크립트를 찾고 사용하는 방법을 살펴보았습니다. 질문이 있으시면 주저하지 말고 아래 의견 양식을 통해 답장해 주세요.