介绍
在本文中,我们将回顾 Nmap 软件程序和多个命令。 Nmap是网络管理员用来扫描端口和映射网络的开源主流工具。 Nmap 命令主要用于识别某些软件在我们的系统上运行的端口。 它还用于发现可用主机及其提供的服务以及检测潜在的安全风险。 使用 Nmap,您可以检查单个主机或完整的网络。 在本教程中,我们将在“专业提示和技巧”文章的部分。
使用的类别、要求和软件版本
使用的操作系统: CentOS 7
用户类型: 根
软件: 地图
任务难度: 中等的
其他:我们将在本教程中使用的服务器是没有控制面板的非托管 CentOS 7 服务器。
Nmap 安装
新服务器通常没有安装 nmap 工具。 要安装 nmap,我们使用一个简单的 yum 命令。
[root@host ~]# yum install nmap
该命令的输出将与此类似。
Loaded plugins:
fastestmirror, priorities Loading mirror speeds from cached hostfile * base: mirror.umd.edu * extras: mirror.wdc1.us.leaseweb.net *
updates: mirrors.usinternet.com
Resolving Dependencies -->
Running transaction check ---> Package nmap.x86_64 2:6.40-19.el7 will be installed -->
Processing Dependency: nmap-ncat = 2:6.40-19.el7 for package: 2:nmap-6.40-19.el7.x86_64 -->
Processing Dependency: libpcap.so.1()(64bit) for package: 2:nmap-6.40-19.el7.x86_64 --> Running transaction check ---> Package libpcap.x86_64 14:1.5.3-11.el7 will be installed ---> Package nmap-ncat.x86_64 2:6.40-19.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved
===================================================
Package Arch Version Repository Size
===================================================
Installing: nmap x86_64 2:6.40-19.el7 base 3.9 M Installing for dependencies: libpcap x86_64 14:1.5.3-11.el7 base 138 k nmap-ncat x86_64 2:6.40-19.el7 base 206 k Transaction Summary
===================================================
Install 1 Package (+2 Dependent packages) Total download size: 4.3 M Installed size: 17 M Is this ok [y/d/N]: y
Downloading packages:
(1/3): libpcap-1.5.3-11.el7.x86_64.rpm | 138 kB 00:00:00
(2/3): nmap-ncat-6.40-19.el7.x86_64.rpm | 206 kB 00:00:00
(3/3): nmap-6.40-19.el7.x86_64.rpm | 3.9 MB 00:00:00
-------------------------------------------------------------------------- Total 6.9 MB/s | 4.3 MB 00:00:00
Running transaction check
Running transaction test Transaction test succeeded
Running transaction Installing :
14:libpcap-1.5.3-11.el7.x86_64
1/3 Installing : 2:nmap-ncat-6.40-19.el7.x86_64
2/3 Installing : 2:nmap-6.40-19.el7.x86_64
3/3 Verifying : 2:nmap-ncat-6.40-19.el7.x86_64
1/3 Verifying : 14:libpcap-1.5.3-11.el7.x86_64
2/3 Verifying : 2:nmap-6.40-19.el7.x86_64
3/3 Installed: nmap.x86_64 2:6.40-19.el7
Dependency Installed:
libpcap.x86_64 14:1.5.3-11.el7
nmap-ncat.x86_64 2:6.40-19.el7
Nmap 现在已经安装并可以使用了,所以让我们从一些基础知识开始。
基本 Nmap 命令
最基本的 nmap 命令是带有 IP 地址的。 为了 example:
[root@host ~]# nmap 8.8.8.8
你会得到类似这样的输出:
Starting Nmap 6.40 ( https://nmap.org ) at 2020-04-06 14:21 EDT Nmap scan report for dns.google (8.8.8.8)
Host is up (0.023s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE 53/tcp open domain 443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 5.03 seconds
使用此命令,我们扫描了 Google 的 DNS 解析器,如您所见,输出提供了各种信息,例如实际扫描的内容、打开的端口、正在侦听的服务以及扫描花费的时间。 我们的服务器也可以使用相同的命令。
[root@host ~]# nmap localhost
此输出将为我们提供相同的信息,但仅适用于我们的服务器。 这是找出服务器上打开了哪些端口以及哪些服务正在使用这些端口的最快方法之一。
扫描单个端口
如果要扫描服务器上的特定端口,可以使用此命令。
[root@host ~]# nmap -p 25 67.43.11.187
输出将与此类似。
[root@host ~]# nmap -p 25 67.43.11.187 Starting Nmap 6.40 ( https://nmap.org ) at 2020-04-06 14:29 EDT Nmap scan report for host2.amarbot.tk (67.43.11.187) Host is up (0.00035s latency). PORT STATE SERVICE 25/tcp open smtp Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
上面,我们还使用了 -p 标志,它标识了特定的端口。 我们添加了端口 25,即 SMTP 端口,以及我们扫描的远程服务器的 IP 地址。 提供的输出为我们提供了我们检查的主机名、端口是否打开以及有关在端口上运行的服务的信息。 同样的命令也可以在我们的服务器上使用。 我们只需要在命令末尾使用我们服务器的 IP 地址。
扫描多个端口
如果要扫描多个端口,可以使用这样的命令。
[root@host ~]# nmap -p 80,25,443,110 67.43.11.187
我们可以看到为每个列出的端口提供的附加信息。
我们还可以添加要扫描的其他端口,并可以使用“,”逗号分隔它们。
扫描端口范围
Nmap 也可以扫描一系列 IP 地址。 这是我们将使用的命令。
[root@host ~]# nmap 192.168.1.1-50
这将类似于它将提供的输出。
Starting Nmap 6.40 ( https://nmap.org ) at 2020-04-06 14:36 EDT Nmap done: 50 IP addresses (0 hosts up) scanned in 41.08 seconds
如您所见,我们删除了此命令中的 -p 标志,并在命令末尾添加了 -50。 此数字表示我们要扫描该范围内的 IP 地址数量。 如果我们要扫描 65 个 IP 地址,我们将在末尾添加 -65。 当我们有一个内部网络并想查看哪些 IP 未被使用时,这是一个非常有用的选项。
如果我们将 -v 标志添加到我们的命令中,我们将获得有关我们请求信息的主机的更详细的输出。 为了 example:
[root@host ~]# nmap -v 72.52.176.198
我们的输出会更长,看起来像这样。
Starting Nmap 6.40 ( https://nmap.org ) at 2020-04-06 14:49 EDT
Initiating Ping Scan at 14:49
Scanning 72.52.176.198 [4 ports]
Completed Ping Scan at 14:49, 0.01s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 14:49
Completed Parallel DNS resolution of 1 host. at 14:49, 0.00s elapsed
Initiating SYN Stealth Scan at 14:49
Scanning swan26.denizkiziyuzme.net (72.52.176.198) [1000 ports]
Discovered open port 25/tcp on 72.52.176.198
Discovered open port 22/tcp on 72.52.176.198
Discovered open port 993/tcp on 72.52.176.198
Discovered open port 3306/tcp on 72.52.176.198
Discovered open port 80/tcp on 72.52.176.198
Discovered open port 53/tcp on 72.52.176.198
Discovered open port 587/tcp on 72.52.176.198
Discovered open port 21/tcp on 72.52.176.198
Discovered open port 443/tcp on 72.52.176.198
Discovered open port 110/tcp on 72.52.176.198
Discovered open port 995/tcp on 72.52.176.198
Discovered open port 143/tcp on 72.52.176.198
Discovered open port 465/tcp on 72.52.176.198
Increasing send delay for 72.52.176.198 from 0 to 5 due to 11 out of 36 dropped probes since last increase.
Increasing send delay for 72.52.176.198 from 5 to 10 due to max_successful_tryno increase to 4
Completed SYN Stealth Scan at 14:50, 64.12s elapsed (1000 total ports)
Nmap scan report for swan26.denizkiziyuzme.net (72.52.176.198)
Host is up (0.00044s latency).
Not shown: 931 filtered ports, 56 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
53/tcp open domain
80/tcp open http
110/tcp open pop3
143/tcp open imap
443/tcp open https
465/tcp open smtps
587/tcp open submission
993/tcp open imaps
995/tcp open pop3s
3306/tcp open mysql
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 64.18 seconds
Raw packets sent: 5727 (251.964KB) | Rcvd: 104 (4.264KB
正如我们所看到的,它提供了所有开放端口的输出、有关 DNS 解析器的信息、发送了多少数据包等等。 当我们需要有关正在扫描的主机的更多详细信息时,我们也可以使用此命令。
到此结束我们关于 nmap 命令基础知识的信息。 我们了解了 -p 和 -v 标志的作用以及它们的用途。 我们还学习了如何扫描 IP 范围以及多个端口。 接下来,我们将回顾一些更高级的 nmap 命令。
高级 Nmap 命令
在高级命令部分,我们将回顾如何执行 TCP 和 UDP 扫描以及如何将 SYN 或 ACK 包发送到特定端口。 让我们开始。 我们要使用的第一个命令就是这个。
[root@host ~]# nmap -sS 67.43.11.187
我们的输出将类似于以下内容。
Starting Nmap 6.40 ( https://nmap.org ) at 2020-04-08 13:09 EDT
Nmap scan report for host2.amarbot.tk (67.43.11.187)
Host is up (0.00023s latency).
Not shown: 932 filtered ports, 56 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
53/tcp open domain
80/tcp open http
110/tcp open pop3
143/tcp open imap
443/tcp open https
465/tcp open smtps
587/tcp open submission
993/tcp open imaps
995/tcp open pop3s
Nmap done: 1 IP address (1 host up) scanned in 3.90 seconds
让我们解释一下 -sS 标志的作用。 -sS 标志代表扫描 SYN。 SYN 扫描是默认的主要扫描选项。 此扫描可以迅速执行,并在不受限制性防火墙阻碍的快速网络上每秒扫描数千个端口。
SYN 扫描相对不显眼,而且有些隐秘,因为它永远不会完成 TCP 连接。 此命令通过将 SYN 包发送到目标服务器并等待响应来扫描一千个最常用的 TCP 端口。 这个 Nmap 命令更隐蔽,因为它不会尝试完成与目标服务器的连接。 如果您正在运行渗透测试,则在以这种方式使用此命令时应该能够避免检测。
-sS 标志有一个变体,可以在没有 root 访问权限的情况下运行。 此 nmap 命令使用 -sT 标志。 如果您使用这些标志,您将在 99.9% 的时间内被检测到,因此请谨慎使用。
如果我们想要运行 UDP 扫描而不是 TCP 扫描,则 -sU 标志将是要添加的标志。 该命令看起来像这样。
[root@host ~]# nmap -sU 67.43.11.187
输出将扫描端口 67/68 和 53,因为它们主要使用 UPD。 毋庸置疑,UDP 扫描对于扫描使用 UDP 的 DNS 和 DHCP 等服务来说是一项宝贵的资产。
我们的下一个命令很有用,因为它告诉我们远程主机是否隐藏在防火墙后面。 检查这一点的命令如下。
[root@host ~]# nmap -sA 67.43.11.187
这将是类似于您将获得的输出。
Starting Nmap 6.40 ( https://nmap.org ) at 2020-04-14 11:17 EDT
Nmap scan report for host2.amarbot.tk (67.43.11.187)
Host is up (0.00034s latency).
All 1000 scanned ports on host2.amarbot.tk (67.43.11.187) are filtered
Nmap done: 1 IP address (1 host up) scanned in 21.20 seconds
现在,如您所见,“过滤 host2.amarbot.tk (67.43.11.187) 上的所有 1000 个扫描端口”表示远程主机上的所有端口都受防火墙保护。 使用特定规则几乎总是允许任何未过滤的端口通过防火墙。
下一个命令是高级 SCTP(流控制传输协议)扫描。 此命令是一种静默扫描端口的方式,因为它会丢弃任何开放端口上包含“Cookie Echo”块的任何数据包。 如果端口关闭,它还会发送 Abort 响应。 要执行此扫描,我们将使用此命令。
[root@host ~]# nmap -sZ 72.52.176.198
我们的输出将与此类似。
Starting Nmap 6.40 ( https://nmap.org ) at 2020-04-27 09:20 EDT
Nmap scan report for host2.amarbot.tk (67.43.11.187)
Host is up (0.00038s latency).
All 52 scanned ports on host2.amarbot.tk (67.43.11.187) are open|filtered
Nmap done: 1 IP address (1 host up) scanned in 1.76 seconds
在这种情况下,所有端口都是打开的,正如我们可以通过“host2.amarbot.tk (67.43.11.187) 上的所有 52 个扫描端口都打开|过滤”行看到的那样。如果我们在执行此命令的服务器上执行此命令没有打开所有这些端口,此命令将列出正在侦听它们的端口和服务。
我们将在本文高级部分运行的最后一个命令称为圣诞扫描。 之所以这样命名,是因为此扫描使用 FIN、PSH 和 URG 标志,它们像圣诞树一样点亮数据包。 该命令来自 Nmap 的官方文档。 该命令是这样调用的。
[root@host ~]# nmap -sX 67.43.11.187
同样,我们的输出将与上面提到的类似。
Starting Nmap 6.40 ( https://nmap.org ) at 2020-04-27 09:32 EDT
Nmap scan report for host2.amarbot.tk (67.43.11.187)
Host is up (0.00032s latency).
All 1000 scanned ports on host2.amarbot.tk (67.43.11.187) are open|filtered
这种类型的扫描肯定会得到远程主机的响应,但不用说,这是一种非常“响亮”的方法,你很可能会在渗透测试期间被检测到。
我们的高级 nmap 命令部分到此结束。 接下来,我们将向您展示如何充分利用我们的 nmap 命令的一些专业提示和技巧。
专业提示和技巧
我们想在专业提示部分概述的第一个命令是执行大量 rDNS 查询的命令。 此 nmap 命令不进行直接查询。 它只是列出指定范围内的 IP 地址,然后执行 rDNS 查询。 该命令看起来像这样。
[root@host ~]# nmap -sL 67.43.11.187-190 --dns-servers 8.8.8.8
L 标志用于列出,然后记录 IP 地址,然后是 -190。 这指定了我们要扫描的范围。 如果我将其设置为 -192,那么将扫描五个 IP 地址。 最后我们使用了 8.8.8.8,这是 Google 的解析器。 我们的输出看起来像这样。
Starting Nmap 6.40 ( https://nmap.org ) at 2020-04-27 09:43 EDT
Nmap scan report for host2.amarbot.tk (67.43.11.187)
Nmap scan report for cloudvpsserver.prasad.org (67.43.11.188)
Nmap scan report for 67.43.11.189
Nmap scan report for cloudvpsserver.alcon-nig.com (67.43.11.190)
Nmap done: 4 IP addresses (0 hosts up) scanned in 0.04 seconds
隐形扫描
现在,假设我们要执行一次隐秘扫描,它会向我们显示扫描完成的百分比,并且我们要找出远程主机上正在运行的操作系统。 该命令看起来像这样。
[root@host ~]# nmap -v -Pn -O 67.43.11.187
通常的输出会很长(当然,这取决于服务器)。
输出将为我们提供打开的端口、扫描完成的百分比以及完成前的剩余时间。 此外,它将在最后为我们提供操作系统版本。 操作系统版本是从位于命令安装目录中的 nmap-os-db 文件中提取的。
在里面 example 下面,您将在操作系统版本旁边看到一定百分比的数字。 那是因为 nmap 将从数据库中提取数据,它会为您提供它可以在数据库中找到的最接近的操作系统版本。 数据库最常见的位置是 /usr/share/nmap/ 目录。 这是命令输出。
Starting Nmap 6.40 ( https://nmap.org ) at 2020-04-27 11:03 EDT
Initiating Parallel DNS resolution of 1 host. at 11:03
Completed Parallel DNS resolution of 1 host. at 11:03, 0.12s elapsed
Initiating SYN Stealth Scan at 11:03
Scanning host2.amarbot.tk (67.43.11.187) [1000 ports]
SYN Stealth Scan Timing: About 15.50% done; ETC: 11:11 (0:02:49 remaining)
SYN Stealth Scan Timing: About 30.50% done; ETC: 11:11 (0:02:19 remaining)
SYN Stealth Scan Timing: About 45.50% done; ETC: 11:11 (0:01:49 remaining)
SYN Stealth Scan Timing: About 60.50% done; ETC: 11:11 (0:01:19 remaining)
SYN Stealth Scan Timing: About 75.50% done; ETC: 11:11 (0:00:49 remaining)
Completed SYN Stealth Scan at 11:11, 201.22s elapsed (1000 total ports)
Discovered open port 443/tcp on 67.43.11.187
Discovered open port 995/tcp on 67.43.11.187
Discovered open port 587/tcp on 67.43.11.187
Discovered open port 53/tcp on 67.43.11.187
Discovered open port 993/tcp on 67.43.11.187
Discovered open port 21/tcp on 67.43.11.187
Discovered open port 22/tcp on 67.43.11.187
Discovered open port 110/tcp on 67.43.11.187
Discovered open port 80/tcp on 67.43.11.187
Discovered open port 143/tcp on 67.43.11.187
Discovered open port 25/tcp on 67.43.11.187
Discovered open port 465/tcp on 67.43.11.187
Completed SYN Stealth Scan at 11:03, 3.65s elapsed (1000 total ports)
Initiating OS detection (try #1) against host2.amarbot.tk (67.43.11.187)
Retrying OS detection (try #2) against host2.amarbot.tk (67.43.11.187)
Nmap scan report for host2.amarbot.tk (67.43.11.187)
Host is up (0.00030s latency).
Not shown: 932 filtered ports, 56 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
53/tcp open domain
80/tcp open http
110/tcp open pop3
143/tcp open imap
443/tcp open https
465/tcp open smtps
587/tcp open submission
993/tcp open imaps
995/tcp open pop3s
Device type: general purpose
Running (JUST GUESSING): Linux 2.6.X|3.X (90%), FreeBSD 6.X (86%)
OS CPE: cpe:/o:linux:linux_kernel:2.6 cpe:/o:linux:linux_kernel:3 cpe:/o:freebsd:freebsd:6.2
Aggressive OS guesses: Linux 2.6.32 - 3.0 (90%), Linux 3.2 - 3.6 (89%), Linux 3.4 (87%), Linux 2.6.39 (87%), Linux 2.6.32 (87%), Linux 2.6.28 (86%), Linux 2.6.32 - 2.6.33 (86%), FreeBSD 6.2-RELEASE (86%), Linux 2.6.35 (86%), Linux 3.5 (86%)
No exact OS matches for host (test conditions non-ideal).
Uptime guess: 45.068 days (since Fri Mar 13 09:25:01 2020)
TCP Sequence Prediction: Difficulty=260 (Good luck!)
IP ID Sequence Generation: All zeros
Read data files from: /usr/bin/../share/nmap
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.95 seconds
Raw packets sent: 2000 (91.612KB) | Rcvd: 88 (4.316KB)
如您所见,此命令为我们提供了相当多的信息。
SQL 注入扫描
当我们想查明我们的域中是否存在任何可能的 SQL 注入向量时,我们将查看的下一个命令非常有用。 该命令的语法如下所示。
[root@host ~]# nmap -p80 --script http-sql-injection example.com
此命令将扫描端口 80(在本例中)并查找任何 mysql 注入痕迹。
Nmap 输出到文件
接下来,我们将演示如何保存 nmap 命令的输出以及如何比较它们。 如果要将 nmap 命令的输出保存到文件中。 你可以使用这个命令:
[root@host ~]# nmap 67.43.11.187 -oA results
此命令会将我们的输出保存到三种不同格式的文件中:.gnmap、.nmap 和 .xml。 当我们需要保留输出以防我们需要将其与修改端口或防火墙后获得的输出进行比较时,这很有用。 这将我们带到了文件比较选项。 当您想比较两个包含 nmap 输出的文件时,可以使用 ndiff 命令。 为了 example:
[root@host ~]# ndiff results.xml results1.xml
输出将与此类似。
Nmap 6.40 scan initiated Mon Apr 27 12:04:19 2020 as: nmap -oA results 67.43.11.187
+Nmap 6.40 scan initiated Mon Apr 27 12:13:14 2020 as: nmap -oA results1 72.52.176.198
-host2.amarbot.tk (67.43.11.187):
-Host is up.
-Not shown: 932 filtered ports, 56 closed ports
-PORT STATE SERVICE VERSION
-21/tcp open ftp
-22/tcp open ssh
-25/tcp open smtp
-53/tcp open domain
-80/tcp open http
-110/tcp open pop3
-143/tcp open imap
-443/tcp open https
-465/tcp open smtps
-587/tcp open submission
-993/tcp open imaps
-995/tcp open pop3s
+swan26.denizkiziyuzme.net (72.52.176.198):
+Host is up.
+Not shown: 931 filtered ports, 56 closed ports
+PORT STATE SERVICE VERSION
+21/tcp open ftp
+22/tcp open ssh
+25/tcp open smtp
+53/tcp open domain
+80/tcp open http
+110/tcp open pop3
+143/tcp open imap
+443/tcp open https
+465/tcp open smtps
+587/tcp open submission
+993/tcp open imaps
+995/tcp open pop3s
+3306/tcp open mysql
这也将向我们展示两台服务器和任何开放端口以及侦听它们的服务之间的区别。
Nmap 速度控制
此外,可以在每个 nmap 命令上添加 -T 标志,以显示更精细的时序控制,以控制扫描速度。 有五个扫描级别,每个级别都会影响入侵检测级别,并会影响整体扫描性能。 水平表示如下。
- T0 =偏执狂(0)入侵检测系统逃避
- T1 = 偷偷摸摸 (1) 入侵检测系统规避
- T2 = 礼貌 (2) 减慢扫描速度以使用更少的带宽并使用更少的目标机器资源
- T3 = 正常 (3),这是默认速度
- T4 = 积极 (4) 速度扫描; 假设您在一个相当快速和可靠的网络上
- T5 = 疯狂 (5) 速度扫描; 假设你在一个非常快的网络上
请记住,Nmap 可能被恶意个人滥用,他们使用它来查找服务器上的随机漏洞。 我们建议仅将此工具指向您可以直接控制的网络或主机,因为如果被滥用,您很容易被主机/网络禁止。
我们将以此信息结束本教程。 Nmap 命令可以使用数百个选项和组合。 这就是 Nmap 工具如此有用和强大的原因。 有关更多信息,我们建议阅读 Nmap 命令的手册页和 官方文档 为了它。
您想了解更多吗?
Nmap 是一个出色的工具,可以在您的服务器上轻松实现。 如果您在实施该软件时遇到任何问题,请拨打 800.580.4985 联系我们,或打开 聊天 或与我们联系,与我们知识渊博的技术人员或经验丰富的托管顾问交谈,了解您今天如何利用此工具!