网络安全渗透测试
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2.2 Nmap

Nmap全称为Network Mapper,是一款网络扫描及嗅探的开源软件。它支持扫描网络映射、发现服务器开放端口、探测指定端口详细信息等,便于渗透测试人员在渗透测试过程中对新目标进行资产发现,从而进行进一步攻击。Nmap是一款命令行工具,其本身并不带有图像界面,目前支持Linux/MacOS/Win系统,您可以在其官网上直接下载最新免费版本。

Nmap支持超过100多个参数选项,几乎支持所有的网络检测模式,作者会在本文内选出几个最具有代表性的参数功能来为读者做详细介绍,可以说在渗透测试过程中Nmap是一款必用的工具。

Nmap的IP参数可以为一个单独的IP地址,如127.0.0.1,也可以为一个网段,如192.168.1.0/24,当Nmap检测到输入参数为网段时则会依次对网段内的所有IP进行扫描。当然您也可以直接以空格分隔的方式在IP参数后添加多个指定IP,如192.168.1.1 192.168.1.2 192.168.1.9。

注意:默认情况下Nmap只会扫描低位端口和特定端口,并不会扫描全部的端口。

2.2.2.1-sn命令:禁用端口扫描功能

试想一下,当渗透测试人员想要探测一个IP是否存活时,没必要对它的端口进行扫描,这将耗费大量的时间,这时候渗透测试人员只需使用“-sn”命令即可飞速地完成一次服务器存活检测,可以看到如图2-15 在Nmap中使用-sn命令的例子扫描仅用时0.17秒。

图2-15 在Nmap中使用-sn命令

2.2.2.2-sT命令:TCP connect()扫描

当渗透测试人员使用此命令时,Nmap会调用系统TCP函数来进行完整的TCP握手,虽然准确率很高但是容易在目标服务器中留下大量的日志,这样很容易被发现并且消耗时间也较长。

2.2.2.3-sS命令:TCP SYN扫描

在使用传统TCP连接时需要进行多次握手交互,但在SYN模式下Nmap会先向目标端口发送一个TCP同步包,在收到对应的响应包之后便不再进行后续握手操作。这样扫描起来会更加快速,并且不易被对方发现。

2.2.2.4-sU命令:UDP扫描

当渗透测试人员希望扫描目标服务器上的UDP端口时,不要犹豫,使用“-sU”命令即可开始检测。

2.2.2.5-sV命令:服务版本识别

在默认扫描中,Nmap只会去检测端口是否开启,而不会进行进一步检测。若开启“-sV”命令,则在扫描的同时,Nmap还会去判断对应端口上运行的服务的版本。当我们有了某个服务的具体版本时,我们可以在公开数据库中搜索此版本的软件是否存在漏洞,便于我们进行渗透测试。使用Nmap探测服务版本如图2-16所示。

图2-16 使用Nmap探测服务版本

2.2.2.6-p命令:指定需要扫描的端口

在服务器中合法的端口号最低可以为1,最高可以为65535,如此多的端口扫描起来必然会消耗大量的时间,故我们可以指定一些端口让Nmap进行扫描。我们可以在“-p”命令后面以逗号分隔的方式添加指定端口:1,80,7777 或是使用“-”符号让Nmap扫描一段范围内的端口,如80-6666。

2.2.2.7-O命令:操作系统扫描

渗透测试人员可以使用此命令来分析当前服务器上运行的系统类型及系统版本号,如图2-17使用Nmap探测系统类型中我们成功测出了对方服务器使用的是Linux系统。

图2-17 使用Nmap探测系统类型

2.2.2.8-sP命令:Ping扫描

有些时候当您只想用Ping的方式来检测一些主机是否存活时,此命令将会成为您最佳的选择。

注意:在一些扫描模式下,需要使用管理员权限才可进行正常扫描。

除了传统的命令行模式,Nmap的制作团队还推出了一款基于Nmap的图形化工具:Zenmap。相较于Nmap,图形化的Zenmap能够更好地绘制及显示一些资产信息,并且由于可以自动生成命令,哪怕是新手稍加熟悉也可以快速学会。Zenmap图形化界面如图2-18所示。

图2-18 Zenmap图形化界面

我们可以看到在图2-18的图形化实例中,作者成功将某个网段内所有的主机端口信息及运行的服务扫描了出来。也可以在工具左侧的“Hosts”栏目内自由地切换目标主机来查看对应主机的详细信息。