소개
이 랩에서는 Nmap 의 스크립팅 엔진 (NSE, Nmap's Scripting Engine) 에 대해 배우고 Nmap 스크립트를 분류하고 업데이트하는 방법을 익힐 것입니다. 강력한 오픈 소스 네트워크 검색 및 보안 감사 도구인 Nmap 은 NSE 를 통해 기능을 확장합니다. NSE 를 통해 사용자는 다양한 네트워킹 작업을 자동화하기 위한 스크립트를 작성하고 공유할 수 있습니다.
이 랩에서는 Nmap 의 스크립트 카테고리를 탐색하고, 사용자 지정 스크립트 디렉토리를 생성하고, 자체 스크립트를 추가하고, Nmap 스크립트 데이터베이스를 업데이트하는 과정을 안내합니다. 이러한 기술은 네트워크 관리자 및 보안 전문가가 네트워크를 효율적으로 스캔하고 취약점을 식별하는 데 매우 중요합니다.
Nmap 스크립트 카테고리 탐색
이 단계에서는 시스템에 사전 설치된 Nmap 스크립트의 카테고리를 탐색해 보겠습니다. Nmap 스크립트는 사이버 보안 분야에서 강력한 도구입니다. 기능에 따라 구성됩니다. 예를 들어, 일부 스크립트는 검색 (discovery) 에 사용됩니다. 즉, 네트워크에서 장치와 서비스를 찾을 수 있습니다. 다른 스크립트는 취약성 평가 (vulnerability assessment) 에 사용되어 시스템의 보안 취약점을 식별하는 데 도움이 됩니다.
먼저 터미널을 열어야 합니다. 터미널은 시스템과 상호 작용하기 위해 명령을 입력할 수 있는 텍스트 기반 인터페이스입니다. 터미널이 열리면 올바른 디렉토리에 있는지 확인해야 합니다. 디렉토리는 컴퓨터에서 파일 및 기타 폴더가 저장되는 폴더와 같습니다. 터미널에서 다음 명령을 실행합니다.
cd /home/labex/project
이 명령은 현재 작업 디렉토리를 /home/labex/project로 변경합니다.
이제 시스템에 설치된 Nmap 의 버전을 확인해 보겠습니다. 버전을 아는 것은 중요합니다. 왜냐하면 버전마다 기능과 호환성이 다를 수 있기 때문입니다. 터미널에서 이 명령을 실행합니다.
nmap --version
출력은 다음과 유사합니다.
Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1f libpcre-8.39 libpcap-1.9.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select
다음으로 사용 가능한 Nmap 스크립트 카테고리를 검토합니다. Nmap 스크립트는 /usr/share/nmap/scripts/ 디렉토리에 저장됩니다. 어떤 스크립트를 사용할 수 있는지 파악하기 위해 스크립트를 나열하고 이름별로 정렬할 수 있습니다. 터미널에서 이 명령을 실행합니다.
ls /usr/share/nmap/scripts/ | grep -v .lua | sort | head -10
이 명령은 먼저 /usr/share/nmap/scripts/ 디렉토리의 모든 파일을 나열합니다. 그런 다음 grep -v .lua를 사용하여 .lua 확장자를 가진 파일을 제외합니다. 그 후, 나머지 파일을 이름별로 정렬하고 처음 10 개의 결과를 표시합니다. 출력은 다음과 유사합니다.
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
ajp-methods.nse
모든 스크립트 카테고리를 보려면 다음 명령을 사용할 수 있습니다.
grep -r categories /usr/share/nmap/scripts/*.nse | grep -o "categories = {[^}]*}" | sort | uniq | head -10
이 명령은 /usr/share/nmap/scripts/ 디렉토리의 모든 .nse 스크립트 파일에서 "categories" 문자열을 검색합니다. 그런 다음 카테고리 정보를 추출하고, 정렬하고, 중복 항목을 제거하고, 처음 10 개의 결과를 표시합니다. 출력은 다음과 유사합니다.
categories = {"auth", "brute", "intrusive"}
categories = {"auth", "default", "discovery", "safe"}
categories = {"auth", "discovery", "safe"}
categories = {"auth", "intrusive"}
categories = {"auth", "safe"}
categories = {"broadcast", "discovery"}
categories = {"broadcast", "discovery", "safe"}
categories = {"default", "discovery"}
categories = {"default", "discovery", "safe"}
categories = {"default", "discovery", "safe", "version"}
더 나은 구성을 위해 기능에 따라 스크립트를 분류하기 위한 디렉토리 구조를 만들 것입니다. 이렇게 하면 나중에 스크립트를 더 쉽게 찾고 사용할 수 있습니다. 서로 다른 카테고리에 대해 별도의 디렉토리를 만들 것입니다. 터미널에서 다음 명령을 실행합니다.
mkdir -p /home/labex/project/NmapScripts/vulnerability
mkdir -p /home/labex/project/NmapScripts/discovery
mkdir -p /home/labex/project/NmapScripts/authentication
mkdir -p 명령은 디렉토리를 만듭니다. 상위 디렉토리가 존재하지 않으면 해당 디렉토리도 생성합니다.
이제 새로 생성된 vulnerability 디렉토리에 일부 취약성 관련 스크립트를 복사해 보겠습니다. 터미널에서 이 명령을 실행합니다.
cp /usr/share/nmap/scripts/smb-vuln* /home/labex/project/NmapScripts/vulnerability/
이 명령은 이름이 smb - vuln으로 시작하는 /usr/share/nmap/scripts/ 디렉토리의 모든 스크립트를 /home/labex/project/NmapScripts/vulnerability/ 디렉토리에 복사합니다.
파일이 올바르게 복사되었는지 확인해 보겠습니다. 터미널에서 이 명령을 실행합니다.
ls -la /home/labex/project/NmapScripts/vulnerability/
출력은 복사된 취약성 스크립트를 표시합니다.
total 88
drwxr-xr-x 2 labex labex 4096 Mar 15 12:30 .
drwxr-xr-x 4 labex labex 4096 Mar 15 12:30 ..
-rw-r--r-- 1 labex labex 3355 Mar 15 12:30 smb-vuln-conficker.nse
-rw-r--r-- 1 labex labex 8045 Mar 15 12:30 smb-vuln-cve2009-3103.nse
-rw-r--r-- 1 labex labex 5100 Mar 15 12:30 smb-vuln-cve-2017-7494.nse
-rw-r--r-- 1 labex labex 9595 Mar 15 12:30 smb-vuln-ms06-025.nse
-rw-r--r-- 1 labex labex 11645 Mar 15 12:30 smb-vuln-ms07-029.nse
-rw-r--r-- 1 labex labex 12558 Mar 15 12:30 smb-vuln-ms08-067.nse
-rw-r--r-- 1 labex labex 9719 Mar 15 12:30 smb-vuln-ms10-054.nse
-rw-r--r-- 1 labex labex 7326 Mar 15 12:30 smb-vuln-ms10-061.nse
-rw-r--r-- 1 labex labex 8091 Mar 15 12:30 smb-vuln-ms17-010.nse
-rw-r--r-- 1 labex labex 4245 Mar 15 12:30 smb-vuln-regsvc-dos.nse
마찬가지로, 일부 discovery 및 authentication 스크립트를 해당 디렉토리에 복사해 보겠습니다. 터미널에서 다음 명령을 실행합니다.
cp /usr/share/nmap/scripts/dns-* /home/labex/project/NmapScripts/discovery/
cp /usr/share/nmap/scripts/ssh-* /home/labex/project/NmapScripts/authentication/
이제 특정 작업에 사용할 수 있도록 기능에 따라 일부 Nmap 스크립트를 카테고리로 구성했습니다.
스크립트 기능 이해
이 단계에서는 Nmap 스크립트를 검토하고 이해하여 스크립트가 수행할 수 있는 작업을 파악하는 방법을 배웁니다. 이를 아는 것은 매우 중요합니다. 왜냐하면 다양한 네트워크 스캔 작업에 적합한 스크립트를 선택하는 데 도움이 되기 때문입니다.
이전 단계에서 복사한 취약성 스크립트 중 하나를 자세히 살펴보는 것으로 시작해 보겠습니다. cat 명령을 사용하여 스크립트의 내용을 표시한 다음 head -20을 사용하여 처음 20 줄만 표시합니다. 이렇게 하면 스크립트 시작 부분의 중요한 정보를 빠르게 확인할 수 있습니다.
cat /home/labex/project/NmapScripts/vulnerability/smb-vuln-ms17-010.nse | head -20
출력은 스크립트의 시작 부분을 표시합니다. 이 부분에는 일반적으로 스크립트의 용도와 사용 방법에 대한 세부 정보가 있습니다.
local smb = require "smb"
local vulns = require "vulns"
local stdnse = require "stdnse"
local string = require "string"
description = [[
Attempts to detect if a Microsoft SMBv1 server is vulnerable to a remote code
execution vulnerability (ms17-010, a.k.a. EternalBlue). The vulnerability affects
Windows Vista, 7, 8.1, 10, Server 2008, Server 2008 R2, Server 2012 Gold and R2, and Server 2016.
The script connects to the $IPC tree, executes a transaction on FID 0 and
checks if the error "STATUS_INSUFF_SERVER_RESOURCES" is returned to
determine if the target is not patched against ms17-010. Additionally it checks
for a matching error code on EternalChampion.
References:
* https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
* https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/
* https://msrc-blog.microsoft.com/2017/05/12/customer-guidance-for-wannacrypt-attacks/
* https://github.com/rapid7/metasploit-framework/pull/8654/files
이 스크립트는 Microsoft SMBv1 서버에 EternalBlue 라고도 알려진 MS17-010 취약점이 있는지 확인하도록 설계되었습니다.
이제 Nmap 스크립트의 구조를 살펴보고 다양한 부분을 이해해 보겠습니다. 대부분의 Nmap 스크립트에는 다음과 같은 주요 구성 요소가 있습니다.
- 설명 섹션: 이 섹션은 스크립트가 수행하는 작업을 알려줍니다. 스크립트의 목적을 빠르게 이해하는 데 도움이 되는 짧은 요약과 같습니다.
- 작성자 섹션: 이 섹션은 스크립트를 만든 사람에게 크레딧을 제공합니다. 특히 해당 작성자에게 연락하거나 동일한 작성자의 더 많은 스크립트를 찾아야 하는 경우 스크립트를 만든 사람을 아는 것이 중요합니다.
- 카테고리: 이러한 카테고리는 유사한 스크립트를 함께 그룹화합니다. 예를 들어, 취약성 스캔과 관련된 스크립트는 "vuln" 카테고리에 있을 수 있습니다. 이렇게 하면 스크립트를 더 쉽게 찾고 관리할 수 있습니다.
- 규칙: 이러한 규칙은 스크립트가 실행되어야 하는 시기를 결정합니다.
portrule및hostrule과 같은 다양한 유형의 규칙이 있습니다. 예를 들어,hostrule은 스크립트가 특정 호스트에서만 실행되도록 지정할 수 있습니다. - 주요 작업 함수: 이 함수는 스크립트의 실제 작업이 수행되는 곳입니다. 취약점을 확인하거나 호스트에 대한 정보를 얻는 등 작업을 수행하는 코드가 포함되어 있습니다.
이 구조를 실제로 확인하기 위해 자체 기본 Nmap 스크립트를 만들어 보겠습니다. cat 명령을 사용하여 새 파일을 만들고 스크립트를 작성합니다.
cat << 'EOF' > /home/labex/project/my-ping-check.nse
description = [[
A simple script that checks if a host responds to ICMP echo requests (ping).
]]
author = "LabEx User"
categories = {"discovery", "safe"}
-- The rule section determines when the script should be run
hostrule = function(host)
return true -- Run the script for all hosts
end
-- The action section contains the main function of the script
action = function(host)
local output = "Host status: "
if host.pingresponse then
output = output .. "Responds to ping"
else
output = output .. "Does not respond to ping"
end
return output
end
EOF
이 스크립트를 분석해 보겠습니다.
description섹션은 스크립트가 호스트가 ping 요청에 응답하는지 확인한다고 명확하게 설명합니다.author섹션은 스크립트가 LabEx User 에 의해 생성되었다고 명시합니다.categories섹션은 이 스크립트를 다른 discovery 및 safe 스크립트와 그룹화합니다. Discovery 스크립트는 호스트에 대한 정보를 찾는 데 사용되며, safe 스크립트는 대상에 해를 끼치지 않는 스크립트입니다.hostrule함수는true를 반환하도록 설정되어 있으므로 스크립트는 모든 호스트에 대해 실행됩니다.action함수에는 주요 로직이 포함되어 있습니다. 호스트에 ping 응답이 있는지 확인한 다음 호스트가 ping 에 응답하는지 여부를 나타내는 메시지를 반환합니다.
이제 사용자 지정 스크립트를 localhost (127.0.0.1) 에 대해 실행해 보겠습니다. --script 옵션과 함께 nmap 명령을 사용하여 사용자 지정 스크립트를 지정합니다.
nmap --script /home/labex/project/my-ping-check.nse 127.0.0.1
다음과 유사한 출력이 표시됩니다.
Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000091s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
| my-ping-check: Host status: Responds to ping
3001/tcp open nessus
|_my-ping-check: Host status: Responds to ping
Nmap done: 1 IP address (1 host up) scanned in 0.24 seconds
이 출력은 스크립트가 올바르게 작동하고 있음을 보여줍니다. localhost 가 ping 요청에 응답하는 것을 감지했습니다. 이것은 간단한 예이지만 Nmap 스크립트의 기본 구조와 기능을 보여줍니다.
Nmap 에 사용자 지정 스크립트 생성 및 추가
이 단계에서는 사용자 지정 Nmap 스크립트를 생성하고 Nmap 스크립트 데이터베이스에 추가하는 방법을 배웁니다. Nmap 은 강력한 네트워크 스캔 도구이며, 사용자 지정 스크립트를 추가하여 특정 요구 사항에 맞게 기능을 확장할 수 있습니다. 즉, 기본 Nmap 스크립트에서 다루지 않는 네트워크 스캔 중에 고유한 작업을 수행할 수 있습니다.
먼저, 약간 더 복잡한 새 스크립트를 만들어 보겠습니다. 이 스크립트는 특정 포트가 열려 있는지 확인합니다. 포트는 네트워크의 문과 같습니다. 다양한 유형의 네트워크 트래픽이 장치에 들어오거나 나갈 수 있도록 합니다. 포트가 열려 있는지 확인하여 특정 서비스가 장치에서 실행되고 있는지 확인할 수 있습니다.
cat << 'EOF' > /usr/share/nmap/scripts/port-check.nse
description = [[
A script that checks if a specific port is open and reports its status.
]]
author = "LabEx User"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"discovery", "safe"}
-- The portrule determines when the script should be run
portrule = function(host, port)
return port.protocol == "tcp" and port.state == "open"
end
-- The action section contains the main function of the script
action = function(host, port)
local output = string.format("Port %d is open on host %s", port.number, host.ip)
return output
end
EOF
위의 코드에서 먼저 스크립트가 수행하는 작업에 대한 설명을 정의합니다. 그런 다음 작성자 및 라이선스 정보를 설정합니다. portrule 함수는 스크립트가 실행되어야 하는 시기를 결정합니다. 여기서는 포트가 TCP 프로토콜을 사용하고 열려 있는지 확인합니다. action 함수는 스크립트의 주요 부분입니다. 특정 포트가 특정 호스트에서 열려 있음을 나타내는 메시지를 생성합니다.
이 스크립트를 Nmap 스크립트 디렉토리 (/usr/share/nmap/scripts/) 에서 직접 만들었음을 알 수 있습니다. Nmap 이 이 디렉토리에서 스크립트를 찾기 때문에 중요합니다. 그러나 스크립트를 만드는 것만으로는 충분하지 않습니다. Nmap 은 이 새 스크립트에 대해 알아야 하므로 Nmap 스크립트 데이터베이스를 업데이트해야 합니다.
Nmap 스크립트 데이터베이스를 업데이트하려면 다음 명령을 실행합니다.
sudo nmap --script-updatedb
출력은 다음과 유사합니다.
Starting Nmap 7.80 ( https://nmap.org )
NSE: Updating rule database.
NSE: Script Database updated successfully.
Nmap done: 0 IP addresses (0 hosts up) scanned in 0.36 seconds
이 출력은 스크립트 데이터베이스가 성공적으로 업데이트되었음을 보여줍니다. 이제 스크립트가 Nmap 스크립트 데이터베이스에 추가되었는지 확인해 보겠습니다. script.db 파일에서 스크립트를 검색하여 확인할 수 있습니다.
grep port-check /usr/share/nmap/scripts/script.db
다음과 유사한 출력이 표시됩니다.
Entry { filename = "port-check.nse", categories = { "discovery", "safe", } }
이것은 스크립트가 Nmap 스크립트 데이터베이스에 성공적으로 추가되었음을 확인합니다.
이제 Nmap 스크립트 내에서 라이브러리를 사용하는 방법을 보여주는 스크립트를 하나 더 만들어 보겠습니다. 라이브러리는 스크립트를 더욱 강력하게 만들기 위해 사용할 수 있는 미리 작성된 코드입니다. 이 스크립트는 웹 서버에서 HTTP 헤더를 확인합니다. HTTP 헤더에는 웹 페이지에 대한 중요한 정보 (예: 서버 유형, 마지막으로 수정된 날짜 등) 가 포함되어 있습니다.
cat << 'EOF' > /usr/share/nmap/scripts/http-headers-check.nse
description = [[
A script that retrieves and displays HTTP headers from web servers.
]]
author = "LabEx User"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {"discovery", "safe"}
local http = require "http"
local shortport = require "shortport"
local stdnse = require "stdnse"
-- The portrule determines when the script should be run
portrule = function(host, port)
return shortport.http(host, port)
end
-- The action section contains the main function of the script
action = function(host, port)
local response = http.get(host, port, "/")
if not response or not response.status then
return "Failed to retrieve HTTP headers"
end
local output = stdnse.output_table()
output["Status"] = response.status
if response.header then
output["Headers"] = {}
for name, value in pairs(response.header) do
output["Headers"][name] = value
end
end
return output
end
EOF
이 스크립트는 여러 Nmap 라이브러리를 사용합니다.
- HTTP 요청을 위한
http. 이 라이브러리를 사용하면 스크립트가 웹 서버와 통신하고 웹 서버에서 정보를 얻을 수 있습니다. - 포트가 HTTP 서비스를 실행하고 있는지 확인하기 위한
shortport. 호스트의 특정 포트가 웹 트래픽에 사용되는지 파악하는 데 도움이 됩니다. - 출력 형식을 지정하기 위한
stdnse. 웹 서버에서 얻은 정보를 더 쉽게 읽을 수 있도록 합니다.
Nmap 이 새 스크립트에 대해 알 수 있도록 스크립트 데이터베이스를 다시 업데이트해 보겠습니다.
sudo nmap --script-updatedb
이제 새 스크립트를 웹 서버에 대해 실행해 보겠습니다. 데모 목적으로 포트 3001(개발 서버에서 자주 사용됨) 에서 로컬 웹 서버를 사용합니다.
nmap --script http-headers-check -p 3001 127.0.0.1
포트 3001 에서 웹 서버가 실행되고 있지 않으면 출력은 포트가 닫혀 있거나 필터링되었음을 나타냅니다. 웹 서버가 있으면 검색된 HTTP 헤더가 표시됩니다.
마지막으로, 두 사용자 지정 스크립트를 함께 실행해 보겠습니다. 이렇게 하면 두 스크립트의 결과를 한 번에 볼 수 있습니다.
nmap --script "port-check,http-headers-check" -p 22,3001 127.0.0.1
이 명령은 localhost 의 포트 22 및 3001 에 대해 두 사용자 지정 스크립트를 모두 실행합니다. 포트 22 는 일반적으로 SSH (Secure Shell) 연결에 사용됩니다.
출력은 이러한 포트가 열려 있는지 여부를 표시하고, 포트 3001 에서 HTTP 서비스가 실행 중인 경우 HTTP 헤더를 표시합니다.
Nmap 에 사용자 지정 스크립트를 생성하고 추가하면 네트워크 스캔 및 보안 평가 요구 사항에 필요한 특정 작업을 수행하도록 기능을 확장할 수 있습니다.
스크립트 카테고리 실행 및 스크립트 출력 관리
이 단계에서는 Nmap 스크립트를 카테고리별로 실행하고 이러한 스크립트 스캔의 출력을 관리하는 방법을 살펴봅니다. 이는 여러 관련 스크립트를 각각 별도로 지정하지 않고 실행할 수 있으므로 매우 유용한 기술입니다.
Nmap 스크립트는 수행하는 작업에 따라 다른 카테고리로 그룹화됩니다. 이러한 카테고리를 이해하면 필요한 스크립트를 빠르게 찾고 실행하는 데 도움이 됩니다. 다음은 몇 가지 일반적인 카테고리입니다.
auth: 이러한 스크립트는 인증과 관련이 있습니다. 대상의 인증 메커니즘이 안전한지 확인하는 데 도움이 될 수 있습니다.broadcast: 이 카테고리의 스크립트는 로컬 네트워크에서 브로드캐스트를 보냅니다. 동일한 네트워크에서 장치 및 서비스를 검색하는 데 유용합니다.brute: 이러한 스크립트는 무차별 대입 암호 감사 스크립트입니다. 무단으로 서비스에 액세스할 수 있는지 확인하기 위해 다양한 암호를 시도합니다.default: Nmap 에서-sC옵션을 사용하는 경우 이러한 스크립트가 기본적으로 실행됩니다. 기본 스캔을 위한 좋은 시작점을 제공합니다.discovery: 이러한 스크립트는 호스트 및 서비스 검색에 사용됩니다. 네트워크에서 사용 가능한 호스트와 실행 중인 서비스를 찾을 수 있습니다.dos: 서비스 거부 (Denial of Service, DoS) 스크립트는 대상 시스템을 과부하하여 사용할 수 없도록 설계되었습니다. 이러한 스크립트를 사용할 때는 실제 피해를 입힐 수 있으므로 주의하십시오.exploit: 익스플로잇 스크립트는 시스템의 알려진 취약점을 활용하는 데 사용됩니다. 보안 테스트에 사용할 수 있지만 책임감 있게 사용해야 합니다.external: 이러한 스크립트는 타사 데이터베이스로 데이터를 보낼 수 있습니다. 대상에 대한 추가 정보를 제공할 수 있지만 개인 정보 보호에 미치는 영향을 알아야 합니다.fuzzer: Fuzzer 스크립트는 퍼징 기술을 사용합니다. 오류 또는 취약점이 노출될 수 있는지 확인하기 위해 대상에 무작위 또는 잘못된 데이터를 보냅니다.intrusive: 이 카테고리의 스크립트는 서비스를 중단시키거나 침입적인 것으로 간주될 수 있습니다. 특히 프로덕션 환경에서는 주의해서 사용하십시오.malware: 맬웨어 탐지 스크립트는 대상 시스템이 맬웨어에 감염되었는지 확인하는 데 사용됩니다.safe: 이러한 스크립트는 안전하고 비침입적인 것으로 간주됩니다. 대상 시스템에 해를 끼치지 않습니다.version: 버전 탐지 스크립트는 대상 서비스에서 실행 중인 소프트웨어의 버전을 찾는 데 도움이 됩니다. 이 정보는 잠재적인 취약점을 식별하는 데 유용할 수 있습니다.vuln: 취약성 탐지 스크립트는 대상 시스템에서 보안 약점을 찾는 데 사용됩니다.
이제 특정 카테고리의 스크립트를 실행하는 방법을 살펴보겠습니다. 예를 들어 "discovery" 카테고리의 모든 스크립트를 실행하려면 다음 명령을 사용할 수 있습니다.
nmap --script discovery 127.0.0.1
이 명령은 Nmap 에 localhost (127.0.0.1) 에 대해 모든 discovery 스크립트를 실행하도록 지시합니다. 출력은 모든 discovery 스크립트의 결과를 표시하므로 매우 길어집니다.
경우에 따라 여러 카테고리의 스크립트를 실행해야 할 수 있습니다. 쉼표를 사용하여 카테고리 이름을 구분하여 이 작업을 수행할 수 있습니다. 다음은 예입니다.
nmap --script "discovery,safe" -p 1-100 127.0.0.1
이 명령은 localhost 의 포트 1-100 에 대해 discovery 및 safe 카테고리의 모든 스크립트를 실행합니다.
not 연산자를 사용하여 특정 카테고리를 제외할 수도 있습니다. 예를 들어:
nmap --script "discovery and not broadcast" 127.0.0.1
이 명령은 discovery 스크립트를 실행하지만 broadcast 카테고리에 있는 스크립트는 제외합니다.
다음으로, Nmap 스크립트 스캔의 출력을 형식화하고 저장하는 다양한 방법을 살펴보겠습니다. Nmap 은 다양한 목적으로 유용한 여러 출력 형식을 제공합니다.
- 일반 출력 (기본값): 이것은 Nmap 이 화면에 표시하는 표준 텍스트 출력입니다.
- XML 출력: XML 은 다른 도구에서 쉽게 구문 분석할 수 있는 구조화된 형식입니다.
- Grepable 출력: 이 형식은
grep과 같은 도구를 사용하여 쉽게 검색할 수 있도록 설계되었습니다. - JSON 출력 (적절한 스크립트 사용): JSON 은 데이터 교환에 널리 사용되는 또 다른 구조화된 형식입니다.
XML 형식으로 출력을 저장하려면 다음 명령을 사용할 수 있습니다.
nmap --script vuln -p 1-1000 127.0.0.1 -oX /home/labex/project/scan_results.xml
이 명령은 localhost 의 포트 1-1000 에 대해 모든 취약성 스크립트를 실행하고 결과를 XML 형식으로 /home/labex/project/scan_results.xml 파일에 저장합니다.
XML 파일의 내용을 확인해 보겠습니다.
head -20 /home/labex/project/scan_results.xml
이 명령은 XML 형식의 출력의 처음 20 줄을 표시합니다. 스캔, 사용된 옵션 및 스캔 결과에 대한 정보가 표시됩니다.
Grepable 출력의 경우 다음 명령을 사용할 수 있습니다.
nmap --script "default" 127.0.0.1 -oG /home/labex/project/scan_results.gnmap
이 명령은 결과를 grep과 같은 도구로 구문 분석하기 쉬운 형식으로 저장합니다.
gnmap 파일의 내용을 확인해 보겠습니다.
cat /home/labex/project/scan_results.gnmap
각 호스트가 한 줄에 있으므로 특정 정보를 쉽게 검색할 수 있습니다.
일반 형식과 XML 형식으로 출력을 동시에 저장하려면 다음 명령을 사용할 수 있습니다.
nmap --script "default" 127.0.0.1 -oX /home/labex/project/scan_results2.xml -oN /home/labex/project/scan_results.txt
이 명령은 출력을 일반 텍스트 형식과 XML 형식으로 동시에 저장합니다.
마지막으로, -oA 옵션을 사용하여 출력을 세 가지 형식 (일반, XML 및 grepable) 으로 한 번에 저장할 수 있습니다.
nmap --script "default" 127.0.0.1 -oA /home/labex/project/all_formats
이 명령은 세 개의 파일을 만듭니다.
/home/labex/project/all_formats.nmap(일반 출력)/home/labex/project/all_formats.xml(XML 출력)/home/labex/project/all_formats.gnmap(grepable 출력)
스크립트 카테고리를 실행하고 스크립트 출력을 관리하는 이러한 기술을 마스터하면 네트워크 스캔을 효율적으로 수행하고 추가 분석을 위해 결과를 구성할 수 있습니다.
요약
이 랩에서는 Nmap 의 스크립팅 엔진 (NSE) 을 사용하는 데 필요한 필수 기술을 배웠습니다. 효율적인 네트워크 스캔 및 보안 평가에 필수적인 기능에 따라 Nmap 스크립트를 분류하고 구성하는 방법을 살펴보았습니다.
스크립트 카테고리 탐색, 구성된 디렉토리 생성, 스크립트 구조 이해, 사용자 지정 스크립트 생성, 데이터베이스에 추가, 논리 연산자를 사용하여 카테고리별로 스크립트 실행, 다양한 형식으로 출력 관리 등 여러 측면에서 실질적인 경험을 얻었습니다. 이러한 기술을 통해 특정 요구 사항에 맞게 Nmap 의 기능을 확장할 수 있습니다. 스크립트 생성, 분류 및 업데이트를 마스터하면 보다 타겟팅되고 효율적인 스캔 워크플로우를 개발할 수 있습니다. 스캔 결과를 구성하고 형식화하는 기능은 팀 구성원 및 이해 관계자와의 문서화 및 커뮤니케이션에도 유용합니다. Nmap 을 계속 사용하면서 이러한 기술을 기반으로 보다 복잡한 스크립트와 스캔 전략을 구축할 수 있습니다.



