简介
在本实验中,你将学习如何使用 Nmap 脚本引擎。本实验涵盖运行默认脚本、使用特定脚本、向脚本添加参数、更新脚本、测试多个脚本以及在 Xfce 终端中查看脚本输出。你将针对目标 IP 地址执行诸如 nmap -sC
、nmap --script
和 nmap --script-updatedb
等命令,以执行各种扫描并收集信息。
在本实验中,你将学习如何使用 Nmap 脚本引擎。本实验涵盖运行默认脚本、使用特定脚本、向脚本添加参数、更新脚本、测试多个脚本以及在 Xfce 终端中查看脚本输出。你将针对目标 IP 地址执行诸如 nmap -sC
、nmap --script
和 nmap --script-updatedb
等命令,以执行各种扫描并收集信息。
在本步骤中,我们将探索如何使用 Nmap 针对目标运行其默认脚本集。Nmap 脚本是强大的工具,可自动执行各种任务,从识别漏洞到收集有关目标系统的信息。-sC
选项告诉 Nmap 使用“默认”脚本类别。此类别包括被认为对通用扫描安全且有用的脚本。
在开始之前,让我们确保处于正确的目录。
cd ~/project
现在,让我们使用 -sC
选项对目标 IP 地址 192.168.1.1
运行 Nmap。此 IP 地址是一个占位符。在实际场景中,你需要将其替换为要扫描的目标的实际 IP 地址。对于本实验环境,我们将假设 192.168.1.1
是一个有效的目标。
sudo nmap -sC 192.168.1.1
此命令将执行标准的 Nmap 扫描,包括端口扫描和服务检测,然后针对任何开放端口运行默认脚本。输出将显示端口扫描、服务检测的结果以及脚本收集的任何信息。
输出将类似于以下内容(确切输出将因目标系统而异):
Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
Not shown: 999 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu)
| ssh-hostkey:
| 2048 ... (RSA)
| ssh-rsa ...
|_ssh-algorithm: ...
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_clock-skew: mean: -1s, deviation: 0s, median: -1s
|_nbstat: NetBIOS name: ..., NetBIOS user: ..., NetBIOS MAC: ... (unknown)
| smb-os-discovery:
| OS: Unix
| ...
|_ System time: ...
Nmap done: 1 IP address (1 host up) scanned in ... seconds
在此示例中,输出显示端口 22 开放并运行 SSH。ssh-hostkey
脚本已识别出 SSH 主机密钥,ssh-algorithm
脚本已识别出支持的算法。clock-skew
脚本已检测到目标系统上的轻微时钟偏差。nbstat
和 smb-os-discovery
脚本分别收集了有关 NetBIOS 和 SMB 服务的信息。
在本步骤中,我们将学习如何使用特定的 Nmap 脚本。Nmap 有大量脚本库,可用于执行各种任务。我们将使用 banner
脚本,该脚本尝试从目标主机上运行的服务中获取横幅信息。横幅通常包含有关软件版本和其他细节的信息,这些信息对于侦察很有用。
首先,确保你在 ~/project
目录中:
cd ~/project
现在,让我们使用带有 --script
选项的 nmap
命令来指定 banner
脚本,并以本地主机 IP 地址 127.0.0.1
为目标。
sudo nmap --script banner 127.0.0.1
此命令告诉 Nmap 针对 127.0.0.1
上的所有开放端口运行 banner
脚本。输出将显示脚本的结果,包括获取到的任何横幅信息。
输出可能类似于以下内容(确切输出将取决于本地主机上运行的服务):
Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000028s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
631/tcp open ipp
5900/tcp open vnc
8000/tcp open http
8080/tcp open http
Host script results:
|_banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_banner: 111/tcp: rpcbind version 2-4
|_banner: 631/tcp: CUPS v2.4.1
|_banner: 5900/tcp: RFB 003.008
|_banner: 8000/tcp: Werkzeug/2.0.1 Python/3.9.7
|_banner: 8080/tcp: Jetty(9.4.44.v20210927)
Nmap done: 1 IP address (1 host up) scanned in ... seconds
在此示例中,banner
脚本成功从 127.0.0.1
上运行的多个服务中获取了横幅信息,包括 SSH、rpcbind、CUPS、VNC 和 HTTP 服务器。这些横幅提供了正在使用的软件版本的信息。
在本步骤中,我们将学习如何向 Nmap 脚本传递参数。有些脚本需要或允许自定义参数。我们将使用 http-title
脚本并修改其 http.useragent
参数。http-title
脚本用于从 HTTP 服务器获取标题。http.useragent
参数指定脚本在进行 HTTP 请求时将使用的用户代理字符串。
首先,让我们导航到工作目录:
cd ~/project
现在,让我们使用 --script
选项运行 Nmap 以指定 http-title
脚本,并使用 --script-args
选项将 http.useragent
参数设置为 Test
。我们将使用目标 IP 地址 192.168.1.1
。请记住,在实际场景中,你需要将其替换为运行 HTTP 服务器的目标的实际 IP 地址。
sudo nmap --script http-title --script-args http.useragent=Test 192.168.1.1
此命令告诉 Nmap 针对 192.168.1.1
上的任何开放 HTTP 端口运行 http-title
脚本,并使用“Test”作为用户代理字符串。
输出可能类似于以下内容(确切输出将取决于目标系统及其 HTTP 服务器配置):
Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for 192.168.1.1
Host is up (0.00028s latency).
Not shown: 999 filtered ports
PORT STATE SERVICE VERSION
80/tcp open http nginx 1.18.0
|_http-title: Test
Nmap done: 1 IP address (1 host up) scanned in ... seconds
在此示例中,http-title
脚本成功从 192.168.1.1
的 80 端口上运行的 HTTP 服务器获取了标题。http.useragent
参数用于在 HTTP 请求中将用户代理字符串设置为“Test”。服务器可能会记录此用户代理字符串,这对于识别扫描很有用。如果目标没有开放 80 端口,你将看到不同的输出。
在本步骤中,我们将更新 Nmap 脚本数据库。Nmap 脚本引擎(NSE)依赖于一个脚本数据库。随着时间的推移,会添加新脚本并更新现有脚本。为确保你拥有最新的脚本,应定期更新脚本数据库。
首先,确保你在 ~/project
目录中:
cd ~/project
现在,让我们使用带有 --script-updatedb
选项的 nmap
命令来更新脚本数据库。
sudo nmap --script-updatedb
此命令将下载最新的脚本信息并更新数据库。输出将显示更新的进度。
输出可能类似于以下内容:
Starting Nmap 7.80 ( https://nmap.org ) at ...
NSE: Updating rule database.
NSE: Using nmap.org/svn/nse_svn to download the latest scripts.
Downloaded nmap-mac-prefixes.lua
Downloaded nselib/data/nmap-services.
Downloaded nselib/data/service-ports.
Downloaded scripts/script.db
NSE: Script database updated.
Nmap done: 0 IP addresses (0 hosts up) scanned in ... seconds
此输出表明脚本数据库已成功更新。现在你拥有了最新的 Nmap 脚本可供使用。
在本步骤中,我们将同时运行多个 Nmap 脚本。这使你能够在一次扫描中收集有关目标的更多信息。我们将针对目标 127.0.0.1
使用 banner
和 http-title
脚本。
首先,让我们导航到工作目录:
cd ~/project
现在,让我们使用 --script
选项运行 Nmap,指定 banner
和 http-title
脚本,并用逗号分隔。我们将使用目标 IP 地址 127.0.0.1
,它指的是本地机器。
sudo nmap --script banner,http-title 127.0.0.1
此命令告诉 Nmap 针对 127.0.0.1
上的任何开放端口运行 banner
和 http-title
脚本。banner
脚本尝试获取服务横幅,而 http-title
脚本从任何 HTTP 服务器获取标题。
输出可能类似于以下内容(确切输出将取决于在 127.0.0.1
上运行的服务):
Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000018s latency).
Loopback interface ignored
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu)
| banner: SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.1
|_ssh-hostkey:
80/tcp open http nginx 1.18.0
|_http-title: Welcome to nginx!
Nmap done: 1 IP address (1 host up) scanned in ... seconds
在此示例中,banner
脚本从 22 端口获取了 SSH 横幅,http-title
脚本从 80 端口上运行的 HTTP 服务器获取了标题。如果目标没有开放这些端口,你将看到不同的输出。
在本步骤中,我们将重点关注在 Xfce 终端中查看 Nmap 脚本的输出。Xfce 终端是 LabEx VM 环境中的默认终端模拟器。在之前的步骤中你已经一直在使用它。本步骤更多地是关于理解如何解读输出,而不是执行新命令。
扫描完成后,Nmap 脚本的输出会直接显示在终端中。输出的格式取决于脚本本身。有些脚本提供简单的文本输出,而其他脚本可能提供更结构化的数据。
让我们回顾一下上一步中的命令:
sudo nmap --script banner,http-title 127.0.0.1
当你执行此命令时,输出会直接打印到 Xfce 终端。你可以滚动终端输出来查看 banner
和 http-title
脚本的结果。
例如,输出可能包括:
banner
脚本尝试从开放端口获取服务横幅。这可以揭示在特定端口上运行的软件版本。http-title
脚本获取 HTTP 服务器提供的网页标题。关键是要仔细检查输出以获取任何有用信息。Xfce 终端提供了一种简单直接的方式来查看此信息。如果需要,你还可以使用标准的 Linux 工具(如 grep
)来过滤输出。例如,要仅查找包含“http-title”的行,你可以将 nmap 命令的输出通过管道传输给 grep:
sudo nmap --script banner,http-title 127.0.0.1 | grep "http-title"
此命令将执行与之前相同的 Nmap 扫描,但仅显示输出中包含字符串“http-title”的行。这对于关注输出的特定部分很有用。
本步骤主要是关于观察和理解。没有单个命令要执行,而是关注如何在 Xfce 终端环境中解读你在之前步骤中已经生成的结果。
在本实验中,参与者学习了如何通过各种命令来使用 Nmap 脚本引擎。他们首先使用 nmap -sC
针对目标 IP 运行默认脚本,这些默认脚本包含用于常规扫描的安全且实用的脚本。他们还学习了使用 nmap --script
来使用特定脚本,使用 --script-args
为脚本添加参数,使用 --script-updatedb
来更新脚本,以及一次性测试多个脚本。最后,他们在 Xfce 终端中查看了脚本输出。