标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-2308] 作者: 凉笙 发表于: [2019-03-01]
本文共 [186] 位读者顶过
Kali Linux 的很多工具都可用于在目标网络里发现、识别主机。为了更容易地理解这些概念,我们将使用一个虚拟网络作为目标网络。 在利用第三方工具(如搜索引擎)获取目标网络的信息之后,接下来就要识别出目标系统里联网的主机。这阶段的主要目标如下。 ● 在目标网络里搜索在线的主机。如果某台主机不在线,我们就无法对其进行渗透测试;此时就需要另找一台在线的主机进行渗透测试。 ● 鉴定目标机器上安装的操作系统。 获取这些信息有助于后期漏洞映射阶段的工作。 我们使用Kali linux 系统里的工具进行目标识别。桌面菜单中的Information Gathering收录了绝大多数的目标识别工具。本文只需要关注其下的两个子菜单里的程序: ● Identify Live Hosts(识别在线主机); ● OS Fingerprinting(识别操作系统)。 下面从这两个类别的诸多程序中依照其功能、认可度、开发活跃度,选择性地介绍、演示几款工具。 一、识别目标主机 子菜单Identify Live Hosts下的工具可用于判断目标主机是否可被测试人员访问。在开展识别阶段的工作之前,我们需要仔细查看我们与客户达成的协议和服务条款。如果服务协议要求我们隐匿渗透测试的行为,我们就要进行相应的隐藏测试。另外,在测试入侵检测系统和入侵防御系统时,我们同样需要使渗透测试的行动不被发现。如果客户没有这种要求,就没有必要进行隐匿的测试了。 1、ping 在检査主机是否在线的工具中,ping 可能是最著名的程序了。该工具向目标主机发送ICMP协议(Internet Control Message Protocol)的echo request 数据包。如果目标主机在线且允许受理ping 请求,那么目标主机将回复ICMP echo reply数据包。 ICMP协议的echo request(请求)和echo reply(回复)消息只是ICMP协议的两种类型的消息。 Kali Linux 的菜单里没有列出ping 程序。所以我们要在终端中输入ping 命令并配置好它的选项。如图1所示,我们可以在ping指令之后直接指定目标地址。
图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指令的目标主机参数,可以是IP地址,也可以是主机名。 上述指令的返回结果如图2所示。
图2 上述信息表明:ping指令只向目标主机(IP地址为192.168.56.102)发送了1个ICMP echo request;发送请求的主机(IP 地址为192.168.56.101)也只收到了1 个ICMP echo reply;请求和回复之间的往返时间是1.326ms;期间没有丢失数据包。
[出自:jiwo.org] 我们观察一下本机发送和接受的数据。我们使用带有网络协议分析功能的 Wireshark程序在主机上捕获数据包,可看到如图3所示的情况。
图3 从中可以看出,我们自己的主机(192.168.56.101)向目标主机(192.168.56.102)发送了一个ICMP echo request数据包。因为目标主机在线且允许受理ICMP echo request数据包,它向我们的主机发送回ICMP echo reply数据包。 如果目标主机使用的是 IPv6 地址,例如 fe80::a00:27ff:fe43:1518,您可以使用ping6程序检测它是否在线。您需要指定-I选项,设定发送数据包的本地连接。
ping6指令的通信过程如图4所示。
图4 从上面输出可以看出,ping6 程序使用的是ICMPv6 协议的ICMPrequest 和reply数据包。 如需屏蔽ping 请求的数据包,可在防火墙里配置ICMP echo request 的白名单,并屏蔽来自其他IP 地址的ICMP echo request 数据包。 2、arping arping 是在局域网中使用ARP(Address Resolution Protocol)请求判断目标主机是否在线的工具。您可以用IP地址或MAC地址作为它的测试目标。 因为arping程序工作于OSI模型中的第二层,ARP协议的数据包无法通过路由器和网关,所以它只能检测本地局域网络中的主机。 如需启动arping程序,可在终端中使用下述命令。
该指令显示所有的选项及使用方法。 我们使用arping程序判断某MAC地址的主机是否在线。
上述指令检测MAC地址为08:00:27:43:15:18的主机是否在线。 我们使用Wireshark观察arping运行期间的网络数据(见图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中第2个数据包。 如果没有任何一台主机占用指定的IP地址,我们也不会受到ARP协议的回复数据,如图6所示。
图6 基于以上特性,arping程序还常常用于判断某个IP地址是否被同一个局域网内的主机占用。假如您的主机通常使用192.168.56.101这个IP地址,某天您想要换一个IP地址。那么,在更换IP地址之前,应当检查该IP地址是否被其他主机占用了。 此时可以使用下述arping指令检测192.168.56.102是否被他人占用。
如果返回值是1,则说明192.168.56.102这个IP已经被占用了。如果返回值是0,则说明该IP没有被占用。 3、fping 与ping 程序相比,fping 可以同时向多个主机发送ping(ICMP echo)请求。您可以在命令行中指定多个目标主机,也可以在某个文件里指定需要被检测的主机。 默认模式下,fping 程序通过目标主机的回复来判断该主机是否在线。如果目标主机发送了回应,该主机将会被标记为alive(在线):如果主机在一段时间内(超时或超过尝试次数)没有进行响应,该主机则会被标记为unreachable(不可访问)。默认情况下, fping 将尝试向每个目标发送三次ICMP echo 数据包。 如需使用fping程序,可在终端中执行下述指令。
上述指令将显示程序的所有选项及使用方法。 下面将介绍fping程序的几种不同用法。 ● 如果需要同时检测地址为192.168.1.1、192.168.1.100 和192.168.1.107的主机是否在线,我们可以使用下述指令。
上述指令的返回结果如下。
● 如果不想逐 IP 地指定目标主机,我们可以指定目标主机的列表。假设我们知道192.168.56.0这个网段里有需要检测的目标主机,就可以直接使用-g选项(生成列表)对整个网段进行检测。
上述指令的返回结果如下。
● 如需改变探测目标主机的重试次数,则可在指令之中使用-r 选项(retry limit)。默认情况下,重试次数是3次。
上述指令的返回结果如下。
● 如需査看多个目标的统计结果,可以使用-s 选项(打印累积统计)。
上述指令的返回结果如下。 www.google.com is alive
4、hping3 hping3程序是命令行下的网络数据包生成和分析工具。在TCP/IP测试和安全测试里,例如在端口扫描、防火墙规则测试、网络性能测试时,都可以使用这个程序生成自定义的网络数据包,从而进行相应测试。 hping3 的研发团队在官方网站上说明了它的主要用途: ● 测试防火墙规则; ● 测试入侵检测系统/IDS; ● 测试TCP/IP 模式的安全漏洞。 如需启动hping3程序,可在终端中输入hping3指令。 您可以通过命令行、互动界面、脚本的方式执行hping3。 在不指定任何参数的情况下,直接运行hping3将向TCP的0号端口发送空数据。 如需改变通信协议,可参照下述表格更改相应选项。
在发送TCP数据包时,我们可以不设置任何TCP标识(默认情况),还可以参考下述表格指定特定TCP标识。
这个程序有下面几种不同的使用方法。 ● 如果要向192.168.56.101 发送1个ICMP echo 请求,就要设置-1选项(使用ICMP协议)和-c 1选项(发送1次)。
上述指令的返回结果如图7所示。
图7 在图7 中,我们注意到目标主机在线,它回复了ICMP echo 请求。 要验证这一结果,我们可用tcpdump程序捕获网络数据,结果如图8所示。
图8 可见目标主机的确发送了ICMP echo 回复数据包。 ● 除了命令行方式之外,我们可以直接输入hping3,进入它的互动界面。您将会看到提示符,可在此使用Tcl指令。 如需了解Tcl的详细指令,请参见:
要实现前一个例子的功能,我们可以使用下述Tcl脚本。
新建一个终端窗口,然后使用下述指令接收目标服务器的响应。
在此之后,我们在其他终端窗口里使用上述Tcl脚本,具体情况如图9所示。
图9 ● 您还可以使用hping3 检验防火墙规则。假设您的防火墙规则如下: ○ 接受(ACCEPT)所有到TCP 22 端口的数据; ○ 接受所有现存(established)连接; ○ 丢弃(DROP)其他数据包。 验证防火墙规则时,可以使用hping3 程序发送ICMP echo 请求。
上述指令的返回结果如下。
可见目标主机没有对我们的ping进行响应。 如图10 所示,我们向目标主机的TCP 22 端口发送一个带有SYN 标识的TCP 包。
图10 上述信息表明:目标主机接受了刚才我们发送到22端口的带SYN标识的TCP包。 然后,我们测试它的UDP 22 端口(见图11)。
图11 根据图11,我们可确定目标主机的防火墙不接受到22端口的UDP数据包。hping3的功能很多。这里只简单介绍了 hping3 的一小部分功能。 5、nping nping允许用户发送多种协议(TCP、UDP、ICMP和ARP协议)的数据包。您可以调整协议头中的字段,例如可设置TCP和UDP的源端口和目的端口。nping和其他类似工具的区别,如nping程序和ping程序之间的区别相似,nping可以探测多个主机的多个端口。 此外,它可以像ping 程序一样发送ICMP echo 请求。nping 还可以用于对网络进行压力测试、ARP中毒、DoS攻击。 在Kali Linux 中,nping 程序是Nmap 程序包的一部分。 nping支持多种探测模式,其对应的具体参数如下。
在终端中执行nping命令才能启动它。该命令将显示它的使用方法和选项介绍。 如需向多个目标主机(192.168.56.100、192.168.56.101和192.168.56.102)发送ICMP echo 请求,可使用下述指令。
上述指令的返回结果如图12所示。
图12 我们可以根据这个结果判断,只有192.168.56.102响应了我们的请求。 在目标主机不响应ICMP echo 请求数据包的情况下,我们可以向该主机开放的TCP端口发送 TCP SYN 数据包检验它是否在线(见图13)。
图13 如果我们要向 192.168.56.102 主机的 22 端口(-p 22)发送 1 次(-c 1)TCP(--tcp)数据包,可使用下述指令:
当然,您得自己猜测哪个端口是开放端口。我们建议您从常规端口开始测试,即 21、222、23、25、80、443和8443端口。 上述指令的运行结果如图14所示。
图14 根据这个结果,可知该主机响应了我们发送到22端口的数据包,所以可以判断目标主机(192.168.56.102)在线。 6、alive6 如果您需要检测IPv6中联入了哪些主机,肯定不应该扫描整个网络。因为IPv6的地址空间太大了。您可能已经发现IPv6主机的网段是64位的。这意味着如果进行网段扫描,扫描次数就至少要有2的64次方。很明显,在现实世界中进行IPv6的网段扫描不太现实。 幸运的是,有一种名为ICMPv6 Neighbor Discovery(邻居发现)的网络协议。该协议允许IPv6主机接入本地链路系统,并根据局域网内其他IPv6主机的地址自动配置自己的地址。简单的说,您可以使用这个协议发现同网段内在线的主机。 alive6 程序可以发送 ICMPv6 的检测数据包,并能处理网络上的响应。这个程序是THC-IPv6 Attack Toolkit 的一部分。 可以在终端中直接输入alive6来启动它。这将显示它的使用方法。 假设您想要在IPv6局域网内查找在线的IPv6主机,在您使用eth0接入这个网络的情况下,您可以使用下述指令。
该指令的返回结果如下。
如果不希望其他主机通过这种方式探测到自己的IPv6主机,可以通过ip6tables指令屏蔽ICMPv6的echo请求。
目标主机使用了这条指令之后,就无法通过这种方式检测到它了(见图15)。
图15 7、detect-new-ip6 这个程序可以在 IPv6 的网络里检测到新加入网络的主机。它也是 THC-IPv6 Attack Toolkit的一个程序。 可以在终端中直接输入detect-new-ipv6来启动它。这将显示它的使用方法。 此处举个简单的例子:我们要发现加入网络的IPv6主机。
上述指令的返回结果如下。
8、passive_discovery6 如果需要通过网络监听的方式找到主机的 IPv6 地址,可使用这个程序。使用这个程序可以避免被IDS 检测出来。 可以在终端中直接输入passive_discovery6来启动它,这将显示它的使用方法。 如果要在网卡eth0上进行监听,可使用下述指令。
上述指令的运行结果如图16所示。
图16 这个程序只是在监听过程中筛选ARP请求和ARP回复,然后进行相应的分析。在刚才的例子里,passive_discovery6发现了两个IPv6地址,这两个地址如下所示。 ● fe80::31ad:1227:d1d3:a002 ● fe80::a00:27ff:fe43:1518 9、nbtscan 如果在内网渗透测试中审计Windows系统,您需要首先获取主机的NetBIOS信息。最常用的工具就是nbtscan。 这个工具可以将相应主机IP地址、NetBIOS计算机名、可用服务、登录用户名和MAC地址整理为报告。如需采用NetBIOS协议访问目标主机的NetBIOS服务(例如网络共享),就需要掌握目标主机的NetBIOS名称。这个工具将会产生大量的网络流量,而且很可能被目标主机记录在日志里。 如需了解NetBIOS报告中每个服务的功能,可在微软知识库里查询NetBIOS服务名称的第16个字符(即NetBIOS后缀)。 可以在终端中直接输入nbtscan来启动它。 如需搜索局域网(192.168.1.0/24)内各个主机的NetBIOS名称,可使用下述指令。
该指令的返回结果如下。
从上面的输出结果可以看出,找到的NetBIOS名字有:PC-001、PC-003和SRV-001。现在用下述命令査看这些主机运行了哪些服务。
该指令的返回结果如下。
从上面输出结果可以看出,PC-001运行了Workstation(工作站服务)和File Server (文件服务器)。而在 PC-003 上运行 3 个服务是 Workstation、Messenger 和 File Server。经验表明,这些信息里包含了哪台机器提供了文件共享服务。下一步我们可以检测这些文件共享服务是否开放,继而访问其中的文件。 二、识别操作系统 在确定目标主机在线后,应当识别它们使用的操作系统。这阶段工作通常称为识別操作系统(也称为操作系统指纹识别)。识别操作系统的方式分为两种:主动式和被动式。 主动式识别工具向目标机器发送数据包,并根据目标的响应确定其使用的操作系统。这种方式的优点在于探测速度快,缺点是目标主机可能会发现我们探测操作系统的行为。 被动式操作系统识别方法克服了主动式识别方法的缺点。Michal Zalewsky是这种探测方式的先驱,他设计的p0f工具率先实现了被动式的识别方法。被动式方法的缺点是,它比主动式识别方法的识别速度慢。 下面介绍两款识别操作系统的工具。 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 程序。默认情况下,指纹数据库就在当前编译目录里。如果您想把它放在其他目录中(例如把它保存为/etc/p0f/p0f.fp),需要修改 config.h 文件后再重新编译。如果您不更改这个设置,就要在每次使用它的时候,使用-f选项指定指纹数据库的确切位置。 在终端中输入p0f-h可查看它的使用方法和选项说明。 如需使用p0f程序识别远程主机的操作系统,可以使用下述指令。
这条指令将会读取指纹数据库文件(/etc/p0f/p0f.fp),然后把分析日志保存为p0f.log。与此同时,它在屏幕上显示下述内容。
然后,您需要与这台主机建立TCP连接,产生一些网络流量。您可以浏览远程主机的文件,或者让远程主机连接到您的主机。 如果p0f成功地识別出远程主机的操作系统,这个程序将会在日志文件(p0f.log)和屏幕上记录相关信息。 在我们运行这个程序时,它在终端中显示了如下信息。
相应的日志文件如图17所示。
图17 根据上述结果,我们可判断目标主机运行的操作系统是Linux 2.6。 在目标主机上查看操作系统的信息(见图18)。
图18 比较这两组信息,可知 p0f 获取的操作系统信息是正确的。远程主机确实运行的是Linux Version 2.6。 按下Ctrl+C组合键可结束p0f程序。 2、Nmap Nmap是一款非常受欢迎的功能强大的端口扫描程序。它还能够识别操作系统的操作系统,能够进行主动式的操作系统指纹识别。如需使用操作系统识别功能,您需要在 nmap指令中加上-O选项。 如需识别192.168.56.102这台主机的操作系统,我们可使用下述指令。
这个指令的运行结果如图19所示。
图19 Nmap此次成功识别出了目标主机的操作系统。 |