跳到内容

黑客/工具/网络/Nmap

来自维基教科书,开放的书籍,为开放的世界
nmap 在电影《黑客帝国》中被特工 Trinity 用于检测一个易受攻击节点上运行的 SSH,然后利用 SSHv1 CRC32 漏洞进行攻击,获取 root 权限,从而关闭电网。

黑客 Fyodor(Gordon Lynn)编写了nmap 来协助端口扫描和网络分析。他于 Phrack 杂志,第 7 卷,第 51 期,文章 11 中发布了原始源代码,现在在 Insecure.org 上维护该工具。世界各地的安全专家都使用 nmap 进行简单的网络检查,检测开放端口和服务版本;美国国家安全局 在大型看板上列出了安全工具及其当前版本——包括 nmap、Snort 和 Nessus。

nmap 不仅仅检测开放端口;它还检测服务和操作系统版本。可以使用 nmap 扫描默认端口范围或特定子集;它可以扫描单个主机、范围或集合;它可以找出主机是启动还是关闭。对于熟练的用户来说,nmap 可以成为一个强大的工具,用于善或恶。

nmap 网络扫描工具提供了一组多样的选项来控制其行为。它可以扫描多个主机和主机范围;使用各种扫描技术;识别操作系统和服务版本;甚至执行隐形扫描以避免触发某些入侵检测系统和入侵防御系统工具。

使用示例 

nmap -A -v <目标 IP 地址>

nmap -Pn -sS -A <目标 IP 地址>

基本使用

[编辑 | 编辑源代码]

首先,让我们了解一下 nmap 的一些基本用法。至少应该知道如何扫描主机和检查特定端口;这些基本知识将向你展示目标网络上有哪些端口是开放的。

扫描主机

[编辑 | 编辑源代码]

nmap 的基本用法就是扫描目标 IP 地址或域名。例如

bluefox@ice-ldap:~$ nmap webserv1

Starting Nmap 4.10 ( http://www.insecure.org/nmap/ ) at 2007-04-01 15:52 EDT
Interesting ports on webserv1 (192.168.30.11):
Not shown: 1644 closed ports, 28 filtered ports
PORT     STATE SERVICE
21/tcp   close  ftp
22/tcp   close  ssh
80/tcp   close  http
111/tcp  close  rpcbind
199/tcp  close  smux
443/tcp  open  https
1008/tcp close  ufsd

Nmap finished: 1 IP address (1 host up) scanned in 15.142 seconds

在这种操作模式下,nmap 显示开放端口和该端口上运行的常见服务。nmap 不会准确显示移动到其他端口的服务;例如,端口 21 上的 http 将显示为 ftp。

也可以在 nmap 的命令行上指定多个主机

bluefox@ice-ldap:~$ nmap dbserv1 webserv1

Starting Nmap 4.10 ( http://www.insecure.org/nmap/ ) at 2007-04-01 15:56 EDT
Interesting ports on 192.168.40.11:
Not shown: 1667 closed ports
PORT     STATE    SERVICE
22/tcp   close     ssh
135/tcp  filtered msrpc
136/tcp  filtered profile
137/tcp  filtered netbios-ns
138/tcp  filtered netbios-dgm
139/tcp  filtered netbios-ssn
199/tcp  open     smux
445/tcp  filtered microsoft-ds
1720/tcp filtered H.323/Q.931
3306/tcp open     mysql
3389/tcp filtered ms-term-serv
5631/tcp filtered pcanywheredata

Interesting ports on webserv1 (192.168.30.11):
Not shown: 1644 closed ports, 28 filtered ports
PORT     STATE SERVICE
21/tcp   close  ftp
22/tcp   close  ssh
80/tcp   close  http
111/tcp  close  rpcbind
199/tcp  close  smux
443/tcp  open  https
1008/tcp close  ufsd

Nmap finished: 2 IP addresses (2 hosts up) scanned in 17.001 seconds

如你所见,我的 Web 服务器暴露了太多端口,我的 MySQL 服务器的防火墙很弱;我从 DMZ 运行了此扫描,它必须通过防火墙才能进入我的网络。在这里我们可以看到 nmap 的强大之处:我知道应该将防火墙切换到默认拒绝并仅允许通过显式配置的必需服务。nmap 通过缺乏响应来识别过滤的端口;当尝试打开关闭的端口时,它们会发送带有 RST 标志的 TCP 数据包,表明服务器收到了数据包并且本应允许你连接到任何监听该端口的服务。

nmap 命令行上的一个有用选项是“详细”开关。在命令行中包含 -v 或 -vv 将增加 nmap 生成的输出量。

bluefox@ice-ldap:~$ nmap -vv webserv1

高级目标指定

[编辑 | 编辑源代码]

nmap 允许你使用 IP 地址目标来针对基于简单语法的各种集合和范围。

  • x-y - 指定从 x 到 y。nmap 192.168.0-1.1-2 将扫描 192.168.0.1192.168.1.1192.168.0.2192.168.1.2
  • * - 替换为 0-255。你的 shell 可能发出很多文件名,所以只使用 0-255
  • x,y - 指定 xynmap 192.168.0.1,2,4 将扫描 192.168.0.1192.168.0.2192.168.0.4。此外,nmap 192.168.0.1-2,4 将扫描同一组主机。
  • /n - 扫描 CIDR 表示的子网。例如,nmap 192.168.0.0/16nmap 192.168.0-255.0-255 相同。

可以将这些表示法以任何你想要的方式组合起来。例如,如果要扫描 192.168.0.0/12 上的一些子网,可以使用 nmap 192.168.0,16,64,96.0/4。通常情况下,你不希望做如此大规模的扫描,可以只扫描单个主机;但是,如果你需要,你应该知道如何做。请记住,nmap 映射的是网络,而不仅仅是主机。 ? " Vs " ss1 area title yahoo<>facebook<>ip address<>

扫描端口

[编辑 | 编辑源代码]
  • 开关: -p

有时你不需要知道主机上所有开放的端口,有时你只想确保 proFTPd 和 Apache 正在运行,SMTP 服务器没有死机,并查看 SSH 是否正在监听。对于这些情况,可以指定要扫描的端口。端口指定可以用与目标指定相同的方式进行操作,使用 x-yx,y 表示法。

~$ nmap -p21-22,25,80,443 webserv1

扫描端口,包括服务版本 (-V)

[编辑 | 编辑源代码]
  • 开关: -p-V(服务版本)

包括扫描端口的服务版本

~$ nmap -sV -p21-22,25,80,443 host1.example.com

基本网络 ping 扫描

[编辑 | 编辑源代码]
  • 开关: -sn,之前和现在已弃用 -sP

基本网络 ping 扫描,用于发现响应 icmp 请求(ping)的主机。

~$ nmap -sn 192.168.0.*

服务扫描

[编辑 | 编辑源代码]
  • 开关: -sV-A

nmap 能够执行服务扫描和 RPC 磨损;换句话说,它可以告诉你哪个高级协议、应用程序、版本、版本(如果服务提供 [(SSL)] 连接,则为 libssl 版本等)在端口上监听,而不是将端口号与常见服务匹配。nmap 还使用 RPC 磨损,它对运行 RPC 服务的端口进行 RPC 连接;通常,单个RPC 端口映射器端口会告诉你哪些端口运行 RPC,但如果防火墙阻止了该端口,则 nmap 会自行找到它。

让我们先看看针对我身后服务器的扫描。这台服务器提供了一个非常好的例子,因为我已经配置了它,以便让我在大学的防火墙上戳洞,因此它看起来非常奇怪。一个典型的 nmap 扫描结果还算不错

bluefox@icebox:/home/shared/qemu$ nmap 192.168.1.40

Starting Nmap 4.20 ( http://insecure.org ) at 2007-04-03 20:58 EDT
Interesting ports on 192.168.1.40:
Not shown: 1688 closed ports
PORT    STATE SERVICE
21/tcp  close  ftp
22/tcp  close  ssh
53/tcp  filter  domain
80/tcp  close  http
81/tcp  close  hosts2-ns
139/tcp close  netbios-ssn
389/tcp close  ldap
443/tcp open  https
445/tcp close  microsoft-ds

Nmap finished: 1 IP address (1 host up) scanned in 0.971 seconds

上面显示了 FTP、DNS、hosts2-ns、HTTP/SSL 和 Microsoft 目录服务(Active Directory)。我们可以使用 -sV 使用 nmap 服务扫描进行更仔细地查看。下面的输出给我们带来了截然不同的结果。

bluefox@icebox:/home/shared/qemu$ nmap -sV 192.168.1.40

Starting Nmap 4.20 ( http://insecure.org ) at 2007-04-03 21:01 EDT
Interesting ports on 192.168.1.40:
Not shown: 1688 closed ports
PORT    STATE SERVICE     VERSION
21/tcp  open  ssh         OpenSSH 4.3p2 Debian 5ubuntu1 (protocol 2.0)
22/tcp  open  ssh         OpenSSH 4.3p2 Debian 5ubuntu1 (protocol 2.0)
53/tcp  open  ssh         OpenSSH 4.3p2 Debian 5ubuntu1 (protocol 2.0)
80/tcp  open  http        Apache httpd 2.0.55 ((Ubuntu) PHP/5.1.6)
81/tcp  open  http        Apache httpd 2.0.55 ((Ubuntu) PHP/5.1.6)
139/tcp open  netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
389/tcp open  ldap        OpenLDAP 2.2.X
443/tcp open  ssh         OpenSSH 4.3p2 Debian 5ubuntu1 (protocol 2.0)
445/tcp open  netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
Service Info: OS: Linux

Service detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ .
Nmap finished: 1 IP address (1 host up) scanned in 13.747 seconds

看来这台服务器确实使用 Apache 在两个端口上提供 http 服务;OpenSSH 通过 FTP、DNS 和 HTTPS 端口提供服务;Samba 提供 SMB 连接。此外,我们可以看到服务器在 OpenSSH 4.3p2 Debian 5ubuntu1 上使用 SSH 2.0 协议,这是一个本地的 Ubuntu .deb,而不是自定义构建。我们可以比较准确地猜测这台服务器运行的是 Ubuntu,即使没有进行操作系统扫描;要么就是管理员真的不知道自己在做什么,要么就是他设法使用重写代理更改了横幅以欺骗我们。

值得注意的是,-A 开关也激活了服务扫描。

高级端口扫描

[编辑 | 编辑源代码]

您可以使用 nmap 运行许多类型的 advanced port scans。除了标准的 connect() 端口扫描外,nmap 还需要 root 权限才能执行这些 advanced scans,因为它需要创建原始套接字并构建原始 TCP/IP 数据包。

使用 root 权限运行 nmap (-A)

[编辑 | 编辑源代码]

nmap 程序在有和没有 root 权限的情况下获取的信息不同。使用 root 权限,nmap 可以执行高级 TCP/IP 扫描;操作系统检测;以及 MAC 地址识别。

首先,让我们看看普通用户使用 nmap 以及 -A 选项的情况。nmap -A 激活操作系统和服务扫描,与 nmap -O -sV 相同。操作系统检测需要 root 权限,因此操作系统检测根本无法进行。我在一台 Linksys WRT54G 无线路由器上执行了以下扫描。

bluefox@icebox:~$ nmap -A -p80,1 192.168.1.1

Starting Nmap 4.20 ( http://insecure.org ) at 2007-04-04 12:18 EDT
Interesting ports on 192.168.1.1:
PORT   STATE  SERVICE VERSION
1/tcp  closed tcpmux
80/tcp open   http    Linksys wireless-G WAP http config (Name Icelink)
Service Info: Device: WAP

Service detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ .
Nmap finished: 1 IP address (1 host up) scanned in 6.199 seconds

如您所见,nmap 只是跳过了操作系统检测阶段。然而,当我们将 nmap 作为 root 运行时,我们看到它还可以查找更多信息。下面,我们看到它发现了 MAC 地址并识别了拥有该 MAC 地址空间的供应商;操作系统和有关操作系统的详细信息;正常运行时间;以及网络距离。它还为我们提供了设备类型;nmap 看到一个用于桌面、无线路由器或网络存储的 Linux 操作系统,因此将该设备分类为通用、WAP 或存储。

bluefox@icebox:~$ sudo nmap -A -p80,1 192.168.1.1

Starting Nmap 4.20 ( http://insecure.org ) at 2007-04-04 12:18 EDT
Interesting ports on 192.168.1.1:
PORT   STATE  SERVICE VERSION
1/tcp  closed tcpmux
80/tcp open   http    Linksys wireless-G WAP http config (Name Icelink)
MAC Address: 00:13:10:7D:06:C6 (Cisco-Linksys)
Device type: general purpose|WAP|storage-misc
Running: Linux 2.4.X, Linksys Linux 2.4.X, Asus Linux 2.4.X, Maxtor Linux 2.4.X
OS details: Linux 2.4.20 - 2.4.32, Linux-based embedded device (Linksys WRT54GL WAP,
 Buffalo AirStation WLA-G54 WAP, Maxtor Shared Storage Drive, or Asus Wireless Storage
 Router)
Uptime: 29.285 days (since Tue Mar  6 04:28:28 2007)
Network Distance: 1 hop
Service Info: Device: WAP

OS and Service detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ .
Nmap finished: 1 IP address (1 host up) scanned in 7.833 seconds

nmap 在拥有 root 权限的情况下变得更加强大;但是,出于安全原因,您不应该随意赋予 nmap SUID 权限。您可以通过 sudo 特别允许用户运行 nmap,但请注意,任何允许用户获得 root 权限的内容(SUID 位、sudo 等)都存在安全风险。

操作系统检测

[编辑 | 编辑源代码]
  • 开关: -O

-O 开关启用 nmap 操作系统检测。操作系统检测尝试使用目标 TCP/IP 堆栈的特征来指纹识别远程操作系统;通常它可以识别 Linux、Windows 和 BSD,并找到像 Windows NT/XP 或 95/98/ME 这样的一系列版本和家族。典型的操作系统检测扫描如下所示。

bluefox@ice-ldap:~$ sudo nmap -O 192.168.1.105 -P0

Starting Nmap 4.10 ( http://www.insecure.org/nmap/ ) at 2007-04-05 18:43 EDT
Warning:  OS detection will be MUCH less reliable because we did not find at least 1 open and 1 closed TCP port
Interesting ports on 192.168.1.105:
Not shown: 1677 filtered ports
PORT    STATE SERVICE
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds
MAC Address: 00:0C:76:96:A5:DC (Micro-star International CO.)
Device type: general purpose
Running: Microsoft Windows NT/2K/XP
OS details: Microsoft Windows XP SP2

Nmap finished: 1 IP address (1 host up) scanned in 32.272 seconds

TCP connect() 扫描

[编辑 | 编辑源代码]
  • 开关: -sT

nmap 在所有情况下都允许进行 TCP connect() 扫描,无论是否具有管理权限;当您在没有 root 权限的情况下指定其他扫描类型时,nmap 会自动替换此扫描类型。

在这种扫描模式下,nmap 像 Web 浏览器或 FTP 客户端一样打开到端口的连接,并检查 TCP/IP 堆栈如何响应。以下结果来自此扫描

  • open: nmap 能够完成连接,然后关闭了端口。
  • closed: nmap 尝试连接,但收到错误信息,告知它端口已关闭(操作系统收到 RST 数据包)。
  • filtered: nmap 尝试连接,但操作系统给了它其他错误,例如主机或端口不可达或连接超时。

TCP connect() 扫描适用于所有权限级别,但执行速度可能很慢,并生成过多数据包。它们通常还会在目标上创建更多日志,并且可能导致编写得很差的服务崩溃。

TCP SYN 扫描

[编辑 | 编辑源代码]
  • 开关: -sS

nmap TCP SYN 扫描 使用简单的 SYN 数据包连接到端口以确定其状态。nmap 在拥有原始套接字权限时默认使用此方法。

TCP SYN 扫描发送一个 SYN 数据包,就像打开连接一样,并检查结果。以下状态来自此测试

  • open: nmap 从主机上的该端口收到 SYN/ACK。nmap 不需要采取进一步的行动;操作系统没有连接记录,并使用 RST 响应 SYN/ACK,拆除目标上的连接。
  • closed: nmap 从主机上的该端口收到 RST。
  • filtered: nmap 收到其他内容或没有收到任何内容。

TCP SYN 扫描执行速度非常快,创建的日志更少,并且行为更隐蔽。

扫描防火墙

[编辑 | 编辑源代码]

您也可以使用 nmap 穿透防火墙。nmap 可以执行扫描,这些扫描有助于确定防火墙是否使用有状态过滤;以及防火墙允许哪些端口通过。您可以使用它扫描防火墙后面的目标并发现防火墙规则,从而允许进行更具针对性的扫描,并可能规避防火墙日志记录。

TCP ACK 扫描

[编辑 | 编辑源代码]
  • 开关: -sA

隐形扫描

[编辑 | 编辑源代码]

不幸的是,如果您扫描通过某些 IPS 或 IDS 机器,您会从代理端口获得大量无用信息。这会造成一些小麻烦。我不得不修剪下面的输出,因为它包含数千行文本。我在下面隐藏了扫描的主机;我选择了一个互联网上的活动主机来扫描,因为我没有他们使用的 IPS 硬件。

Starting Nmap 4.10 ( http://www.insecure.org/nmap/ ) at 2007-04-01 16:14 EDT
Stats: 0:00:02 elapsed; 0 hosts completed (1 up), 1 undergoing Connect() Scan
Connect() Scan Timing: About 20.95% done; ETC: 16:14 (0:00:09 remaining)
Interesting ports on %%% (%%%):
Not shown: 861 closed ports
PORT      STATE    SERVICE
2/tcp     open     compressnet
3/tcp     open     compressnet
7/tcp     open     echo
10/tcp    open     unknown
12/tcp    open     unknown
14/tcp    open     unknown
15/tcp    open     netstat
18/tcp    open     msp
19/tcp    open     chargen
20/tcp    open     ftp-data
21/tcp    open     ftp
25/tcp    open     smtp
27/tcp    open     nsw-fe
28/tcp    open     unknown
29/tcp    open     msg-icp
30/tcp    open     unknown
31/tcp    open     msg-auth
32/tcp    open     unknown
33/tcp    open     dsp
34/tcp    open     unknown
35/tcp    open     priv-print
38/tcp    open     rap
39/tcp    open     rlp
40/tcp    open     unknown
41/tcp    open     graphics
43/tcp    open     whois
47/tcp    open     ni-ftp
56/tcp    open     xns-auth
58/tcp    open     xns-mail
59/tcp    open     priv-file
60/tcp    open     unknown
64/tcp    open     covia
66/tcp    open     sql*net
.....
134/tcp   open     ingres-net
135/tcp   filtered msrpc
136/tcp   filtered profile
137/tcp   filtered netbios-ns
138/tcp   filtered netbios-dgm
139/tcp   filtered netbios-ssn
141/tcp   open     emfis-cntl
143/tcp   open     imap
145/tcp   open     uaac
147/tcp   open     iso-ip
148/tcp   open     cronus
149/tcp   open     aed-512
150/tcp   open     sql-net
155/tcp   open     netsc-dev
.....
27001/tcp open     flexlm1
27002/tcp open     flexlm2
27005/tcp open     flexlm5
27007/tcp open     flexlm7
27008/tcp open     flexlm8
27009/tcp open     flexlm9
27010/tcp open     flexlm10
27374/tcp open     subseven
27665/tcp open     Trinoo_Master
31337/tcp filtered Elite
32775/tcp open     sometimes-rpc13
32777/tcp open     sometimes-rpc17
32779/tcp open     sometimes-rpc21
32787/tcp open     sometimes-rpc27
38037/tcp open     landesk-cba
43188/tcp open     reachout
47557/tcp open     dbbrowse
50000/tcp open     iiimsf
54320/tcp open     bo2k
61441/tcp open     netprowler-sensor
65301/tcp open     pcanywhere

Nmap finished: 1 IP address (1 host up) scanned in 23.251 seconds

幸运的是,您可以执行隐形扫描来规避这种情况;不幸的是,隐形扫描花费的时间要长得多。通常,进行一次 礼貌 扫描就足够了,它每分钟只产生 150 个数据包。

~$ nmap -T polite %%%

-T 选项接受五个参数中的一个,按名称或编号给出。这些是

  • paranoid (0) - 不进行并行扫描。发送数据包之间间隔 5 分钟。
  • sneaky (1) - 不进行并行扫描。发送数据包之间间隔 15 秒。
  • polite (2) - 不进行并行扫描。发送数据包之间间隔 0.4 秒。
  • normal (3) - 默认扫描。尝试在不超载网络的情况下快速完成扫描。
  • aggressive (4) - 比 normal 快,但会超载网络。
  • insane (5) - 并行扫描,在 15 分钟内超时主机,不会为单个探测等待超过 0.3 秒。丢失大量信息。

nmap 还提供选项来控制扫描超时。将这些与上述选项结合使用,可以实现更精细的扫描,例如每分钟执行 100 个数据包的扫描

~$ nmap -T sneaky --scan_delay 600

让我们再次尝试上面的扫描,这次礼貌地进行。

bluefox@icebox:~$ nmap -T polite

Starting Nmap 4.20 ( http://insecure.org ) at 2007-04-02 19:52 EDT
Interesting ports on %%% (%%%):
Not shown: 1658 closed ports, 26 filtered ports
PORT     STATE SERVICE
21/tcp   open  ftp
25/tcp   open  smtp
80/tcp   open  http
110/tcp  open  pop3
143/tcp  open  imap
389/tcp  open  ldap
443/tcp  open  https
1026/tcp open  LSA-or-nterm
1027/tcp open  IIS
1433/tcp open  ms-sql-s
3389/tcp open  ms-term-serv
8000/tcp open  http-alt
9999/tcp open  abyss

Nmap finished: 1 IP address (1 host up) scanned in 693.146 seconds

如我们所见,此扫描花费了 693 秒而不是 23 秒,是之前的 30 倍。

[编辑 | 编辑源代码]

另请参见

[编辑 | 编辑源代码]
  • nping 数据包生成、响应分析和响应时间测量
华夏公益教科书