第5章 目标识别

Kali Linux 的很多工具都可用于在目标网络里发现、识别主机。本章将介绍这些软件的使用方法。这部分内容分为以下几个主题:

● 目标识别过程的简介;

● 使用Kali Linux 的工具识别目标主机的方法;

● 鉴定目标主机操作系统的方法(操作系统指纹识别)。

为了更容易地理解这些概念,我们将使用一个虚拟网络作为目标网络。

5.1 简介

在利用第三方工具(如搜索引擎)获取目标网络的信息之后,接下来就要识别出目标系统里联网的主机。这阶段的主要目标如下。

● 在目标网络里搜索在线的主机。如果某台主机不在线,我们就无法对其进行渗透测试;此时就需要另找一台在线的主机进行渗透测试。

● 鉴定目标机器上安装的操作系统。

获取这些信息有助于后期漏洞映射阶段的工作。

我们使用Kali linux 系统里的工具进行目标识别。桌面菜单中的Information Gathering收录了绝大多数的目标识别工具。本文只需要关注其下的两个子菜单里的程序:

● Identify Live Hosts(识别在线主机);

● OS Fingerprinting(识别操作系统)。

本章从这两个类别的诸多程序中依照其功能、认可度、开发活跃度,选择性地介绍、演示几款工具。

5.2 识别目标主机

子菜单Identify Live Hosts下的工具可用于判断目标主机是否可被测试人员访问。在开展识别阶段的工作之前,我们需要仔细查看我们与客户达成的协议和服务条款。如果服务协议要求我们隐匿渗透测试的行为,我们就要进行相应的隐藏测试。另外,在测试入侵监测系统和入侵防御系统时,我们同样需要使渗透测试的行动不被发现。如果客户没有这种要求,就没有必要进行隐匿的测试了。

5.2.1 ping

在检査主机是否在线的工具中,ping 可能是最著名的程序了。该工具向目标主机发送ICMP协议(Internet Control Message Protocol)的echo request 数据包。如果目标主机在线且允许受理ping 请求,那么目标主机将回复ICMP echo reply数据包。

ICMP协议的echo request(请求)和echo reply(回复)消息只是ICMP协议的两种类型的消息。如需了解ICMP协议的其他类型消息,请参见https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Control_messages。

Kali Linux 的菜单里没有列出ping 程序。所以我们要在终端中输入ping 命令并配置好它的选项。

如图5.1所示,我们可以在ping指令之后直接指定目标地址。

figure_0120_0053

图5.1

在Kali Linux 里,默认情况下在按下Ctrl-C 之前,ping 指令会一直运行下去。

ping有很多的选项,最常用的是有下面这些。

● -c count:发送echo request 数据包的总量。

● -I interface address:设置源地址或网络接口。该参数可以是 IP 地址(例如192.168.56.102)或网卡设备的名称(例如eth0)。如果您要ping IPv6 链路本地地址,那么必须指定这个选项。

● -s packet size:每个数据包的包大小(字节数)。默认值是 56。再算上 IPv4中8字节的ICMP包头,默认情况下发送的数据包会是64字节的数据包。

假如您在进行内部渗透测试项目,客户会给您拉好网线以便于您访问他们的内网。他们还会给您目标服务器的IP地址。

在全面测试之前,第一件事情就是要确定您是否可以从本机访问到目标服务器。此时可以使用ping指令。

假如目标主机的IP地址是192.168.56.102,您的电脑的IP地址是192.168.56.101。在测试是否可以访问到目标主机时,可使用下述指令。

ping -c 1 192.168.56.102

ping指令的目标主机参数,可以是IP地址,也可以是主机名。

上述指令的返回结果如图5.2所示。

figure_0121_0054

图5.2

上述信息表明:ping指令只向目标主机(IP地址为192.168.56.102)发送了1个ICMP echo request;发送请求的主机(IP 地址为192.168.56.101)也只收到了1 个ICMP echo reply;请求和回复之间的往返时间是1.326ms;期间没有丢失数据包。

我们观察一下本机发送和接受的数据。我们使用带有网络协议分析功能的 Wireshark程序在主机上捕获数据包,可看到如图5.3所示的情况。

figure_0122_0055

图5.3

从中可以看出,我们自己的主机(192.168.56.101)向目标主机(192.168.56.102)发送了一个ICMP echo request数据包。因为目标主机在线且允许受理ICMP echo request数据包,它向我们的主机发送回ICMP echo reply数据包。

10.4节将详细介绍Wireshark程序。

如果目标主机使用的是 IPv6 地址,例如 fe80::a00:27ff:fe43:1518,您可以使用ping6程序检测它是否在线。您需要指定-I选项,设定发送数据包的本地连接。

ping6 -c 1 fe80::a00:27ff:fe43:1518 -I eth0

PING fe80::a00:27ff:fe43:1518(fe80::a00:27ff:fe43:1518) from

fe80::a00:27ff:fe1c:5122 eth0: 56 data bytes

64 bytes from fe80::a00:27ff:fe43:1518: icmp_seq=1 ttl=64 time=4.63 ms

--- fe80::a00:27ff:fe43:1518 ping statistics --

1 packets transmitted, 1 received, 0% packet loss, time 0ms

rtt min/avg/max/mdev = 4.633/4.633/4.633/0.000 ms

ping6指令的通信过程如图5.4所示。

figure_0122_0056

图5.4

从上面输出可以看出,ping6 程序使用的是ICMPv6 协议的ICMPrequest 和reply数据包。

如需屏蔽ping 请求的数据包,可在防火墙里配置ICMP echo request 的白名单,并屏蔽来自其他IP 地址的ICMP echo request 数据包。

5.2.2 arping

arping 是在局域网中使用ARP(Address Resolution Protocol)请求判断目标主机是否在线的工具。您可以用IP地址或MAC地址作为它的测试目标。

因为arping程序工作于OSI模型中的第二层,ARP协议的数据包无法通过路由器和网关,所以它只能检测本地局域网络中的主机。

如需启动arping程序,可在终端中使用下述命令。

arping

该指令显示所有的选项及使用方法。

我们使用arping程序判断某MAC地址的主机是否在线。

arping 192.168.56.102 -c 1

ARPING 192.168.56.102

60 bytes from 08:00:27:43:15:18 (192.168.56.102): index=0 time=518.223usec

--- 192.168.56.102 statistics --

1 packets transmitted, 1 packets received, 0% unanswered (0 extra)

上述指令检测MAC地址为08:00:27:43:15:18的主机是否在线。

我们使用Wireshark观察arping运行期间的网络数据(见图5.5)。

figure_0123_0057

图5.5

可从图5.5中看出,本机的网卡(MAC 地址为08:00:27:1c:51:22)发送了ARP广播(接受方MAC地址为ff:ff:ff:ff:ff:ff),询问192.168.56.102的MAC地址。如果这个IP地址存在,该主机将其MAC地址(08:00:27:43:15:18)通过ARP协议进行回复;即返回图5.5中第2个数据包。

如果没有任何一台主机占用指定的IP地址,我们也不会受到ARP协议的回复数据,如图5.6所示。

figure_0123_0058

图5.6

基于以上特性,arping程序还常常用于判断某个IP地址是否被同一个局域网内的主机占用。假如您的主机通常使用192.168.56.101这个IP地址,某天您想要换一个IP地址。那么,在更换IP地址之前,应当检查该IP地址是否被其他主机占用了。

此时可以使用下述arping指令检测192.168.56.102是否被他人占用。

arping -d -i eth0 192.168.56.102 -c 2

echo $?

1

如果返回值是1,则说明192.168.56.102这个IP已经被占用了。如果返回值是0,则说明该IP没有被占用。

5.2.3 fping

与ping 程序相比,fping 可以同时向多个主机发送ping(ICMP echo)请求。您可以在命令行中指定多个目标主机,也可以在某个文件里指定需要被检测的主机。

默认模式下,fping 程序通过目标主机的回复来判断该主机是否在线。如果目标主机发送了回应,该主机将会被标记为alive(在线):如果主机在一段时间内(超时或超过尝试次数)没有进行响应,该主机则会被标记为unreachable(不可访问)。默认情况下, fping 将尝试向每个目标发送三次ICMP echo 数据包。

如需使用fping程序,可在终端中执行下述指令。

fping -h

上述指令将显示程序的所有选项及使用方法。

下面将介绍fping程序的几种不同用法。

● 如果需要同时检测地址为192.168.1.1、192.168.1.100 和192.168.1.107的主机是否在线,我们可以使用下述指令。

fping 192.168.1.1 192.168.1.100 192.168.1.107

上述指令的返回结果如下。

192.168.1.1 is alive

192.168.1.107 is alive

ICMP Host Unreachable from 192.168.1.112 for ICMP Echo sent to

192.168.1.100

ICMP Host Unreachable from 192.168.1.112 for ICMP Echo sent to

192.168.1.100

ICMP Host Unreachable from 192.168.1.112 for ICMP Echo sent to

192.168.1.100

192.168.1.100 is unreachable

● 如果不想逐 IP 地指定目标主机,我们可以指定目标主机的列表。假设我们知道192.168.56.0这个网段里有需要检测的目标主机,就可以直接使用-g选项(生成列表)对整个网段进行检测。

fping -g 192.168.56.0/24

上述指令的返回结果如下。

192.168.56.101 is alive

192.168.56.102 is alive

ICMP Host Unreachable from 192.168.56.102 for ICMP Echo sent to 192.168.56.2

ICMP Host Unreachable from 192.168.56.102 for ICMP Echo sent to 192.168.56.3

ICMP Host Unreachable from 192.168.56.102 for ICMP Echo sent to 192.168.56.4

ICMP Host Unreachable from 192.168.56.102 for ICMP Echo sent to 192.168.56.5

ICMP Host Unreachable from 192.168.56.102 for ICMP Echo sent to 192.168.56.6

...

192.168.56.252 is unreachable

192.168.56.253 is unreachable

192.168.56.254 is unreachable

● 如需改变探测目标主机的重试次数,则可在指令之中使用-r 选项(retry limit)。默认情况下,重试次数是3次。

fping -r 1 -g 192.168.1.1 192.168.1.10

上述指令的返回结果如下。

192.168.1.1 is alive

192.168.1.10 is alive

192.168.1.2 is unreachable

...

192.168.1.9 is unreachable

● 如需査看多个目标的统计结果,可以使用-s 选项(打印累积统计)。

fping -s www.yahoo.com www.google.com www.msn.com

上述指令的返回结果如下。

www.google.com is alive

www.yahoo.com is alive

www.msn.com is unreachable

3 targets

2 alive

1 unreachable

0 unknown addresses

4 timeouts (waiting for response)

6 ICMP Echos sent

2 ICMP Echo Replies received

0 other ICMP received

51.6 ms (min round trip time)

231 ms (avg round trip time)

411 ms (max round trip time)

4.150 sec (elapsed real time)

5.2.4 hping3

hping3程序是命令行下的网络数据包生成和分析工具。在TCP/IP测试和安全测试里,例如在端口扫描、防火墙规则测试、网络性能测试时,都可以使用这个程序生成自定义的网络数据包,从而进行相应测试。

hping3 的研发团队在官方网站上(http://wiki.hping.org/25)说明了它的主要用途:

● 测试防火墙规则;

● 测试入侵检测系统/IDS;

● 测试TCP/IP 模式的安全漏洞。

如需启动hping3程序,可在终端中输入hping3指令。

您可以通过命令行、互动界面、脚本的方式执行hping3。

在不指定任何参数的情况下,直接运行hping3将向TCP的0号端口发送空数据。

如需改变通信协议,可参照下述表格更改相应选项。

figure_0127_0059

在发送TCP数据包时,我们可以不设置任何TCP标识(默认情况),还可以参考下述表格指定特定TCP标识。

figure_0127_0060

这个程序有下面几种不同的使用方法。

● 如果要向192.168.56.101 发送1个ICMP echo 请求,就要设置-1选项(使用ICMP协议)和-c 1选项(发送1次)。

hping3 -1 192.168.56.101 -c 1

上述指令的返回结果如图5.7所示。

figure_0127_0061

图5.7

在图5.7 中,我们注意到目标主机在线,它回复了ICMP echo 请求。

要验证这一结果,我们可用tcpdump程序捕获网络数据,结果如图5.8所示。

figure_0128_0062

图5.8

可见目标主机的确发送了ICMP echo 回复数据包。

● 除了命令行方式之外,我们可以直接输入hping3,进入它的互动界面。您将会看到提示符,可在此使用Tcl指令。

如需了解Tcl的详细指令,请参见:

http://www.invece.org/tclwise/

http://wiki.tcl.tk/

要实现前一个例子的功能,我们可以使用下述Tcl脚本。

hping send {ip(daddr=192.168.56.101)+icmp(type=8,code=0)}

新建一个终端窗口,然后使用下述指令接收目标服务器的响应。

hpingrecv eth0

在此之后,我们在其他终端窗口里使用上述Tcl脚本,具体情况如图5.9所示。

figure_0128_0063

图5.9

● 您还可以使用hping3 检验防火墙规则。假设您的防火墙规则如下:

○ 接受(ACCEPT)所有到TCP 22 端口的数据;

○ 接受所有现存(established)连接;

○ 丢弃(DROP)其他数据包。

验证防火墙规则时,可以使用hping3 程序发送ICMP echo 请求。

hping3 -1 192.168.56.101 -c 1

上述指令的返回结果如下。

HPING 192.168.56.101 (eth0 192.168.56.101): icmp mode set, 28

headers + 0 data bytes

--- 192.168.56.101 hping statistic --

1 packets transmitted, 0 packets received, 100% packet loss

round-trip min/avg/max = 0.0/0.0/0.0 ms

可见目标主机没有对我们的ping进行响应。

如图5.10 所示,我们向目标主机的TCP 22 端口发送一个带有SYN 标识的TCP 包。

figure_0129_0064

图5.10

上述信息表明:目标主机接受了刚才我们发送到22端口的带SYN标识的TCP包。

然后,我们测试它的UDP 22 端口(见图5.11)。

figure_0129_0065

图5.11

根据图5.11,我们可确定目标主机的防火墙不接受到22端口的UDP数据包。hping3的功能很多。但是本章只简单介绍了 hping3 的一小部分功能。如果您需要详细了解这个程序,请参见hping3的官方文件:http://wiki.hping.org。

5.2.5 nping

nping允许用户发送多种协议(TCP、UDP、ICMP和ARP协议)的数据包。您可以调整协议头中的字段,例如可设置TCP和UDP的源端口和目的端口。nping和其他类似工具的区别,如nping程序和ping程序之间的区别相似,nping可以探测多个主机的多个端口。

此外,它可以像ping 程序一样发送ICMP echo 请求。nping 还可以用于对网络进行压力测试、ARP中毒、DoS攻击。

在Kali Linux 中,nping 程序是Nmap 程序包的一部分。

nping支持多种探测模式,其对应的具体参数如下。

figure_0130_0066

在编写本书时,还不能通过Kali Linux 的图形化菜单启动nping 程序。所以您得在终端中执行nping命令才能启动它。该命令将显示它的使用方法和选项介绍。

如需向多个目标主机(192.168.56.100、192.168.56.101和192.168.56.102)发送ICMP echo 请求,可使用下述指令。

nping -c 1 192.168.56.100-102

上述指令的返回结果如图5.12所示。

figure_0130_0067

图5.12

我们可以根据这个结果判断,只有192.168.56.102响应了我们的请求。

在目标主机不响应ICMP echo 请求数据包的情况下,我们可以向该主机开放的TCP端口发送 TCP SYN 数据包检验它是否在线(见图5.13)。

如果我们要向 192.168.56.102 主机的 22 端口(-p 22)发送 1 次(-c 1)TCP(--tcp)数据包,可使用下述指令:

nping --tcp -c 1 -p 22 192.168.56.102

当然,您得自己猜测哪个端口是开放端口。我们建议您从常规端口开始测试,即 21、222、23、25、80、443和8443端口。

上述指令的运行结果如图5.14所示。

figure_0131_0068

图5.13

figure_0131_0069

图5.14

根据这个结果,可知该主机响应了我们发送到22端口的数据包,所以可以判断目标主机(192.168.56.102)在线。

5.2.6 alive6

如果您需要检测IPv6中联入了哪些主机,肯定不应该扫描整个网络。因为IPv6的地址空间太大了。您可能已经发现IPv6主机的网段是64位的。这意味着如果进行网段扫描,扫描次数就至少要有2的64次方。很明显,在现实世界中进行IPv6的网段扫描不太现实。

幸运的是,有一种名为ICMPv6 Neighbor Discovery(邻居发现)的网络协议。该协议允许IPv6主机接入本地链路系统,并根据局域网内其他IPv6主机的地址自动配置自己的地址。简单的说,您可以使用这个协议发现同网段内在线的主机。

alive6 程序可以发送 ICMPv6 的检测数据包,并能处理网络上的响应。这个程序是THC-IPv6 Attack Toolkit 的一部分。它的研发人员是 The Hackers Choice 小组(http://freeworld.thc.org/thc-ipv6/)的Van Hauser。

可以在终端中直接输入alive6来启动它。这将显示它的使用方法。

假设您想要在IPv6局域网内查找在线的IPv6主机,在您使用eth0接入这个网络的情况下,您可以使用下述指令。

alive6 -p eth0

该指令的返回结果如下。

Alive: fe80::a00:27ff:fe43:1518 [ICMP echo-reply]

Scanned 1 address and found 1 system alive

如果不希望其他主机通过这种方式探测到自己的IPv6主机,可以通过ip6tables指令屏蔽ICMPv6的echo请求。

ip6tables –A INPUT –p ipv6-icmp –-type icmpv6-type 128 –j DROP

目标主机使用了这条指令之后,就无法通过这种方式检测到它了(见图5.15)。

figure_0132_0070

图5.15

5.2.7 detect-new-ip6

这个程序可以在 IPv6 的网络里检测到新加入网络的主机。它也是 THC-IPv6 Attack Toolkit的一个程序。

可以在终端中直接输入detect-new-ipv6来启动它。这将显示它的使用方法。

此处举个简单的例子:我们要发现加入网络的IPv6主机。

detect-new-ip6 eth0

上述指令的返回结果如下。

Started ICMP6 DAD detection (Press Control-C to end) ...

Detected new ip6 address: fe80::a00:27ff:fe43:1518

5.2.8 passive_discovery6

如果需要通过网络监听的方式找到主机的 IPv6 地址,可使用这个程序。它是由 The Hackers Choice 小组(http://freeworld.thc.org/thc-ipv6/)的Van Hauser开发的THC-IPv6 Attack Tookit 里的一个程序。使用这个程序可以避免被IDS 检测出来。

可以在终端中直接输入passive_discovery6来启动它,这将显示它的使用方法。

如果要在网卡eth0上进行监听,可使用下述指令。

passive_discovery6 eth0

上述指令的运行结果如图5.16所示。

figure_0133_0071

图5.16

这个程序只是在监听过程中筛选ARP请求和ARP回复,然后进行相应的分析。在刚才的例子里,passive_discovery6发现了两个IPv6地址,这两个地址如下所示。

● fe80::31ad:1227:d1d3:a002

● fe80::a00:27ff:fe43:1518

5.2.9 nbtscan

如果在内网渗透测试中审计Windows系统,您需要首先获取主机的NetBIOS信息。最常用的工具就是nbtscan。

这个工具可以将相应主机IP地址、NetBIOS计算机名、可用服务、登录用户名和MAC地址整理为报告。如需采用NetBIOS协议访问目标主机的NetBIOS服务(例如网络共享),就需要掌握目标主机的NetBIOS名称。这个工具将会产生大量的网络流量,而且很可能被目标主机记录在日志里。

如需了解NetBIOS报告中每个服务的功能,可在微软知识库(URL地址为 http://support.microsoft.com/kb/163409)里查询NetBIOS服务名称的第16个字符(即NetBIOS后缀)。

可以在终端中直接输入nbtscan来启动它。

如需搜索局域网(192.168.1.0/24)内各个主机的NetBIOS名称,可使用下述指令。

nbtscan 192.168.1.1-254

该指令的返回结果如下。

Doing NBT name scan for addresses from 192.168.1.1-254

IP address  NetBIOS Name Server User   MAC address



192.168.1.81 PC-001  <server> <unknown>

00:25:9c:9f:b0:96

192.168.1.90 PC-003  <server> <unknown>

00:00:00:00:00:00

...

从上面的输出结果可以看出,找到的NetBIOS名字有:PC-001、PC-003和SRV-001。现在用下述命令査看这些主机运行了哪些服务。

nbtscan -hv 192.168.1.1-254

该指令的返回结果如下。

NetBIOS Name Table for Host 192.168.1.81:

PC-001  Workstation Service

PC-001  File Server Service

WORKGROUP  Domain Name

WORKGROUP  Browser Service Elections

Adapter address 00:25:9c:9f:b0:96

NetBIOS Name Table for Host 192.168.1.90:

PC-003 Workstation Service

PC-003 Messenger Service

PC-003 File Server Service

MSBROWSE Master Browser

WORKGROUP  Domain Name

WORKGROUP  Browser Service Elections

WORKGROUP  Domain Name

WORKGROUP  Master Browser

Adapter address 00:00:00:00:00:00

...

从上面输出结果可以看出,PC-001运行了Workstation(工作站服务)和File Server (文件服务器)。而在 PC-003 上运行 3 个服务是 Workstation、Messenger 和 File Server。经验表明,这些信息里包含了哪台机器提供了文件共享服务。下一步我们可以检测这些文件共享服务是否开放,继而访问其中的文件。

5.3 识别操作系统

在确定目标主机在线后,应当识别它们使用的操作系统。这阶段工作通常称为识別操作系统(也称为操作系统指纹识别)。识别操作系统的方式分为两种:主动式和被动式。

主动式识别工具向目标机器发送数据包,并根据目标的响应确定其使用的操作系统。这种方式的优点在于探测速度快,缺点是目标主机可能会发现我们探测操作系统的行为。

被动式操作系统识别方法克服了主动式识别方法的缺点。Michal Zalewsky是这种探测方式的先驱,他设计的p0f工具率先实现了被动式的识别方法。被动式方法的缺点是,它比主动式识别方法的识别速度慢。

本节将介绍两款识别操作系统的工具。

5.3.1 p0f

p0f采用被动方式的方法探测目标主机的操作系统类型。这个工具可以识别以下几种主机:

● 连接到您主机的机器(SYN 模式,即默认模式);

● 您主机可以访问的机器(SYN+ACK 模式);

● 您主机不能访问的机器(RST+模式);

● 您可以监控到其网络通信的机器。

这个程序通过自身发出的TCP数据包分析操作系统的类型。然后,它会统计在默认情况下不会产生的非标准数据包。例如,Linux内核的操作系统默认使用64字节的ping数据报,而Windows操作系统则使用32字节的ping数据报。这两个操作系统在TTL上同样存在差别。Windows发出的数据包,其TTL是128;而不同版本的Linux系统,其数据包的TTL各有不同。p0f程序正是根据这些细微的差别识别远程主机的操作系统。

Kali Linux自带的p0f程序已经无法识别远程主机的操作系统。原因在于这个版本的指纹数据库过于陈旧。不幸的是,我们未能找到最新版本的指纹数据库。所以我们使用了 p0f v3(Version 3.06b),而没有使用Kali Linux自带的p0f 程序。如需使用这个版本的p0f,请从官方网站上下载 TARBALL 文件(http://lcamtuf.coredump.cx/p0f3/releases/p0f- 3.06b.tgz),然后使用其中build.sh 脚本进行编译。默认情况下,指纹数据库就在当前编译目录里。如果您想把它放在其他目录中(例如把它保存为/etc/p0f/p0f.fp),需要修改 config.h 文件后再重新编译。如果您不更改这个设置,就要在每次使用它的时候,使用-f选项指定指纹数据库的确切位置。

在终端中输入p0f-h可查看它的使用方法和选项说明。

如需使用p0f程序识别远程主机的操作系统,可以使用下述指令。

p0f –f /etc/p0f/p0f.fp -o p0f.log

这条指令将会读取指纹数据库文件(/etc/p0f/p0f.fp),然后把分析日志保存为p0f.log。与此同时,它在屏幕上显示下述内容。

--- p0f 3.06b by Michal Zalewski[email protected] --

[+] Closed 1 file descriptor.

[+] Loaded 314 signatures from '/etc/p0f/p0f.fp'.

[+] Intercepting traffic on default interface 'eth0'.

[+] Default packet filtering configured [+VLAN].

[+] Log file 'p0f.log' opened for writing.

[+] Entered main event loop.

然后,您需要与这台主机建立TCP连接,产生一些网络流量。您可以浏览远程主机的文件,或者让远程主机连接到您的主机。

如果p0f成功地识別出远程主机的操作系统,这个程序将会在日志文件(p0f.log)和屏幕上记录相关信息。

在我们运行这个程序时,它在终端中显示了如下信息。

.-[ 192.168.56.101/42819 -> 192.168.56.102/80 (syn) ]

|

| client = 192.168.56.101/42819

| os  = Linux 3.x

| dist  = 0

| params = none

| raw_sig = 4:64+0:0:1460:mss*10,7:mss,sok,ts,nop,ws:df,id+:0

|

`---

.-[ 192.168.56.101/42819 -> 192.168.56.102/80 (mtu) ]

|

| client = 192.168.56.101/42819

| link  = Ethernet or modem

| raw_mtu = 1500

|

`---

.-[ 192.168.56.101/42819 -> 192.168.56.102/80 (syn+ack) ]

|

| server = 192.168.56.102/80

| os  = Linux 2.6.x

| dist  = 0

| params = none

| raw_sig = 4:64+0:0:1460:mss*4,5:mss,sok,ts,nop,ws:df:0

|

`---

.-[ 192.168.56.101/42819 -> 192.168.56.102/80 (mtu) ]

|

| server = 192.168.56.102/80

| link  = Ethernet or modem

| raw_mtu = 1500

|

`---

.-[ 192.168.56.101/42819 -> 192.168.56.102/80 (http request) ]

|

| client = 192.168.56.101/42819

| app  = Firefox 10.x or newer

| lang  = English

| params = none

| raw_sig = 1:Host,User-Agent,Accept=[text/html,application/

xhtml+xml,application/xml;q=0.9,/;q=0.8],Accept-Language=[en-US,en;q =0.5],Accept-Encoding=[gzip, deflate],Connection=[keepalive]:Accept-Charset,Keep-Alive:Mozilla/5.0 (X11; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0 Iceweasel/18.0.1

|

`---

.-[ 192.168.56.101/42819 -> 192.168.56.102/80 (http response) ]

|

| server = 192.168.56.102/80

| app  = Apache 2.x

| lang  = none

| params = none

|raw_sig = 1:Date,Server,X-Powered-By=[PHP/5.2.4-2ubuntu5.10],?ContentLength,Keep-Alive=[timeout=15, max=100],Connection=[Keep-Alive],ContentType: Accept-Ranges:Apache/2.2.8 (Ubuntu) DAV/2

|

`---

相应的日志文件如图5.17所示。

figure_0138_0072

图5.17

根据上述结果,我们可判断目标主机运行的操作系统是Linux 2.6。

在目标主机上查看操作系统的信息(见图5.18)。

figure_0139_0073

图5.18

比较这两组信息,可知 p0f 获取的操作系统信息是正确的。远程主机确实运行的是Linux Version 2.6。

按下Ctrl+C组合键可结束p0f程序。

5.3.2 Nmap

Nmap是一款非常受欢迎的功能强大的端口扫描程序。它还能够识别操作系统的操作系统,能够进行主动式的操作系统指纹识别。如需使用操作系统识别功能,您需要在 nmap指令中加上-O选项。

如需识别192.168.56.102这台主机的操作系统,我们可使用下述指令。

nmap –O 192.168.56.102

这个指令的运行结果如图5.19所示。

figure_0139_0074

图5.19

Nmap此次成功识别出了目标主机的操作系统。

本书的后续章节还会详细介绍Nmap程序。

5.4 本章总结

本章讨论了目标识别的工作流程。我们首先介绍了目标识别的作用:搜索在线主机并识别目标主机的操作系统。而后,我们介绍了Kali Linux 里可用于目标识别的工具。

本章介绍的扫描工具有ping、arping、fping、hping3、nping和nbtscan。我们还介绍了在 IPv6 环境下进行主机扫描的工具,例如 alive6、detect-new-ip6 和passive_discovery6。

本章还介绍了操作系统的识别工具——p0f和nmap,它们的识别方式以及使用方法。

在下一章,我们将介绍服务枚举,以及Kali Linux 中包含的实现服务枚举的工具。