简介
Nmap,即Network mapper(网络映射器),是一个用于网络扫描、网络嗅探的软件工具,功能强大,是寻找系统脆弱位置和评估系统安全性的有效工具,具体功能包括:
- 主机发现(检测活跃在网络上的主机)
- 端口发现(检测主机所开放的端口)
- 服务发现(检测相应端口用于提供服务的软件及版本)
- 检测主机的硬件地址、操作系统类型及版本
对于黑客,寻找系统脆弱位置是攻击的第一步,而Nmap则是进行这一步骤的有效工具,黑客可以通过扫描得到的主机开放的端口号及其服务版本、结合操作系统的类型和版本,利用已知漏洞和大部分人安全意识的缺失,对系统进行攻击,进而获取系统的控制权、删除日志、隐藏行踪、开辟后门。
对于网络管理员和渗透测试人员,可以进行网络故障检测,也可以利用相同的方式对系统进行扫描,从而找出系统存在的已知漏洞,通过打补丁等方式进行预防,当然,这个过程还要考虑可能带来的损失大小以及企业的经济情况。
Nmap基础命令
-
扫描单一主机
命令如下:
nmap 192.168.2.103
效果如下图所示:
扫描结果得出,IP地址为192.168.2.103的目标主机处于打开状态,对该主机扫描的1000个端口中有994个处于关闭状态,端口号为80、135、139、443、445、1025的端口处于开放状态,分别提供http、msrpc、netbios-ssn、https、microsoft-ds、NFS-or-IIS服务,目标主机的硬件地址为00:0C:29:C9:B5:67。
该命令扫描的实质是半TCP连接,通过wireshark抓包如下:
从上图可以看出,扫描机发送的是带有SYN标记的TCP报文段,进行第一次握手。对于目标主机开放的80号端口,其返回的是带有SYN、ACK标记的TCP报文段,进行第二次握手;对于目标主机关闭的256号端口,其返回的是带有RST、ACK的TCP报文段,断开连接请求。 -
扫描整个子网
命令如下:
nmap 192.168.2.0/24
效果如下图所示:
拿IP地址为192.168.2.1的目标主机来解释,该主机打开,对其扫描的1000个端口中,有998个端口的扫描被防火墙或IDS过滤掉,80号端口和1900号端口处于打开状态,分别提供http、upnp服务;对于IP地址为192.168.2.104的主机,还可知道其是华为设备。这条命令扫描的实质仍然是半TCP连接。 -
扫描多个目标
命令如下:
nmap 192.168.2.100 192.168.2.104
效果如下图所示:
从结果不难分析得出:IP地址为192.168.2.104的主机没有打开; IP地址为192.168.2.100的主机处于打开状态,1000个端口扫描都被该主机的防火墙或IDS过滤,MAC地址为34:80:B3:3C:40:17,该主机为小米设备。 -
扫描一个范围内的IP地址
命令如下:
nmap 192.168.2.1-100
效果如下图所示:
该命令扫描的IP地址范围从192.168.2.1至192.168.2.100,从扫描结果可以看出,100台主机中仅有IP地址为192.168.2.1的主机处于打开状态。 -
扫描除去某个IP地址外的所有子网主机
命令如下:
nmap 192.168.2.0/24 –exclude 192.168.2.1
效果如下图所示:
被扫描的主机中仅有IP地址为192.168.2.102、192.168.2.101的主机处于打开状态。对于IP地址为192.168.2.102的主机,996个端口扫描被该主机的防火墙或IDS过滤拦截,443、902、912、3389号端口处于打开状态,分别提供https、iss-realsecure、apex-mesh、ms-wbt-server服务;对于IP地址为192.168.2.101的主机,扫描的1000个端口都处于关闭状态。 -
扫描保存在某个文件中的IP地址列表的主机
命令如下:
nmap -iL ip_list
在该命令中,ip_list为Kali Linux系统下的文件名,需要注意的是,在Linux系统下,文件只有名字,没有后缀名。ip_list文件内容如下所示:
效果如下图所示:
扫描结果解释参考前面,此处不再叙述。 -
扫描某一子网中除去某文件中的IP地址列表外的其它主机
命令如下:
nmap 192.168.2.0/24 –excludefile ip_list
效果如下图所示:
扫描结果解释参考前面,此处不再叙述。 -
查看扫描的主机列表
命令如下:
nmap –sL 192.168.2.0/24
效果如下图所示:
-
扫描特定主机的端口号
命令如下:
nmap 192.168.2.102 –p 21,23,25,80,443
效果如下图所示:
扫描的目标端口中,对21、23、25、80号端口的扫描被该主机上的防火墙或者IDS过滤拦截,对443号端口的扫描成功,该端口处于打开状态。
Nmap高级命令
- 全TCP扫描 –sT
命令1如下:
nmap –sT 192.168.2.103 –p 80
效果如下图所示:
用wireshark抓包如下图所示:
从上面两图得出:IP地址为192.168.2.103的主机的80号端口打开,提供http服务。对于目标主机打开的端口,需要建立完全的TCP三次握手,然后再RST,因为目的只是扫描,而不是建立会话。
命令2如下:
nmap –sT 192.168.2.103 –p 1
效果如下图所示:
用wireshark抓包如下图所示:
从上面两图得出:IP地址为192.168.2.103的主机的1号端口关闭。对于扫描主机发出的TCP连接请求,目标主机不会进行第二次握手,而是直接RST。
命令3如下:
nmap –sT 192.168.2.102 –p 80
效果如下图所示:
用wireshark抓包如下图所示:
从上面两图得出:对IP地址为192.168.2.102的主机的80号端口的扫描被防火墙或IDS过滤拦截,对于扫描主机发出的第一次握手,目标主机不会返回任何信息。
全TCP扫描总结:
全TCP扫描是通过完整的TCP三次握手来建立与目标主机连接的方式来判断端口是否打开,它会导致目标主机的日志中有大量的连接记录,容易暴露扫描主机的行踪,且扫描速度慢。
- SYN扫描 –sS
命令1如下:
nmap –sS 192.168.2.103 –p 80
效果如下图所示:
用wireshark抓包如下图所示:
从上面两图得出:IP地址为192.168.2.103的主机的80号端口打开,提供http服务。对于目标主机开放的端口,在建立前两次握手后,扫描主机不会进行第三次握手,而是直接RST断开连接。
命令2如下:
nmap -sS 192.168.2.103 –p 65520
效果如下图所示:
用wireshark抓包如下图所示:
从上面两图得出:IP地址为192.168.2.103的主机的65520号端口关闭。对于目标主机关闭的端口,扫描主机进行第一次握手后,目标主机的相应端口直接RST断开连接。
命令3如下:
nmap –sS 192.168.2.102 –p 80
效果如下图所示:
用wireshark抓包如下图所示:
从上面两图得出:对IP地址为192.168.2.102的80端口的扫描被目标主机的防火墙或IDS过滤拦截,对于扫描主机发送的第一次握手,目标主机没有返回任何信息。
SYN扫描总结:
SYN扫描因为TCP三次握手没有完全建立,没有建立会话,从而在日志中不会有相关记录,降低了被发现的可能,也加快了扫描的速度,但仅局限于拥有root或者administrator权限的用户。
- FIN扫描 –sF
命令1如下:
nmap -sF 192.168.2.101 –p 21,23,80,443
效果如下图所示:
从上图可得出:对IP地址为192.168.2.101的主机,其21,23,80号端口可能处于打开状态,也可能扫描主机发送带有FIN标记的TCP报文段被防火墙或IDS过滤,但可以肯定,443号端口处于关闭状态。通过结果还可以得出目标主机不可能是Windows操作系统,事实上,目标主机是Linux操作系统。
命令2如下:
nmap -sF 192.168.2.103 –p 21,23,80,443
效果如下图所示:
用wireshark抓包如下图所示:
从上面两图可得出,IP地址为192.168.2.103的主机的21,23,80号端口处于关闭状态,但是事实上,80和443端口处于打开状态,因为该目标主机是Windows操作系统,对于Windows操作系统而言,无论端口是打开还是关闭,只要收到FIN报文段,都会返回RST,即FIN扫描对Windows操作系统不起作用。
FIN扫描总结:
对于非Windows操作系统而言,当其某个端口收到一个FIN报文段时,若返回RST报文段则可以证明该端口关闭,若只是直接丢掉而没有返回任何信息,则可以证明该端口打开或者FIN报文段被防火墙/IDS拦截;对于Windows操作而言,不管端口是打开还是关闭,只要收到FIN报文段,就会返回RST,因此,FIN扫描对Windows操作系统的主机不起作用。
- ACK扫描
命令1如下:
nmap –sA 192.168.2.103 –p 21,23,25,80,443,445,3306
效果如下图所示:
用wireshark抓包如下图所示:
从上面两图可得出:目标主机没有防火墙,目标主机可以收到ACK探针,但是返回RST拒绝建立连接,因为这个ACK探针是不请自来的,没有经过完整的TCP三次握手。
命令2如下:
nmap –sA 192.168.2.102 –p 21,23,25,80,443,445,3306
效果如下图所示:
用wireshark抓包如下图所示:
通过上面两图可得出:目标主机设有防火墙,ACK探针没有到达目的主机的端口,被防火墙过滤掉了。
-
扫描最常用的100个端口 –F
命令如下:
nmap –F 192.168.2.103
效果如下图所示:
之前的nmap扫描,如果没有指定要扫描的端口号,默认是对最可能打开的1000个端口进行扫描。当命令中包含-F时,则是对最可能打开的100个端口进行扫描。
从上图的扫描结果可以得出,扫描了IP地址为192.168.2.103的目标主机中100个最有可能打开的端口,94个处于关闭状态,只有80,135,139,443,445,1025号等6个端口打开。 -
针对UDP端口的扫描 -sU
命令如下:
nmap –sU 192.168.2.103 –p 80,137,445
效果如下图所示:
用wireshark抓包如下图所示:
从上面两图可得出:扫描主机分别通过47150和47151号端口向目标主机的445号端口发送UDP报文段,都没有得到回复,则目标主机的445号端口可能打开,也有可能扫描主机发送的UDP报文被防火墙或IDS过滤;第21-23个数据包是扫描主机和目标主机80号端口的通信,目标主机的80号端口返回ICMP目的不可达报文,可证明目标主机的80号端口是关闭的;第19-20个数据包是扫描主机与目标主机137号端口的通信,目标主机返回NBNS应答数据包,可以证明目标主机的137号端口是打开的。 -
Ping扫描 -sP
命令1如下:
nmap –sP 192.168.2.103
效果如下图所示:
用wireshark抓包如下图所示:
命令2如下:
nmap –sP 192.168.2.10
效果如下图所示:
用wireshark抓包如下图所示:
命令3如下:
nmap –sP 14.215.177.38
效果如下图所示:
用wireshark抓包如下图所示:
Ping扫描的命令1和命令2中,目标主机都是同网主机,扫描主机是通过向全网广播ARP请求包,以是否收到目标主机的ARP应答包来判定目标主机是否开机,且可以得到目标主机的MAC地址。命令1中的目标主机有返回ARP应答包,处于开机状态。命令2中的目标主机没有返回ARP应答包,处于关机状态,也可能根本不存在这个IP地址的主机;Ping扫描的命令3中,目标主机属于外网主机,扫描主机是通过发送ICMP请求数据包,以是否收到目标主机的ICMP应答包来判定目标主机是否开机,无法得到目标主机的MAC地址,命令3中的主机有返回ICMP应答包,处于开机状态。
-
版本检测 –sV
命令如下:
nmap –sV 192.168.2.103 –p 80
效果如下图所示:
用wireshark抓包如下图所示:
从上面4图可得出:扫描主机首先是通过SYN扫描确定目标主机的80端口打开,再通过TCP三次握手建立连接,然后进行HTTP数据传输,从HTTP数据传输的过程中判断目标主机端口服务的版本。 -
代理扫描 -sI
命令如下:
nmap –sI 192.168.2.103 192.168.2.106 –p 80
效果如下图所示:
用wireshark抓包如下图所示:
从上面两图得出:并不是本机进行扫描,而是通过IP地址为192.168.2.103的主机的443号端口对IP地址为192.168.2.106的目标主机进行代理扫描,扫描的类型为默认类型,即SYN扫描。 -
对目标主机OS的检测 –O
命令1如下:
nmap –O –PN 192.168.2.103
效果如下图所示:
从上图可得出:目标主机运行的是Microsoft Windows 2003操作系统,详细信息上看属于Microsoft Windows Server 2003 SP1或Microsoft Windows Server 2003 SP2中的一种,目标主机与扫描主机在网络上的距离是1跳。
命令2如下:
nmap –O –PN 14.215.177.38
效果如下图所示:
从上图可得出:根据警告warning,本次扫描没有至少扫描出1个开放端口和1个关闭端口,而“至少发现1个开放端口和1个关闭端口”是OS检测的基础,因而无法得知目标主机操作系统的类型、版本及与目标主机在网络上的距离,可见目标主机的防护措施还是不错的,它对针对操作系统类型的检测做了防范。
另外,-PN参数的目的是默认目标主机的IP地址在网络上是存在的,因此,不需要与目标主机进行ICMP数据传输来确认目标主机是否存在,一来,能加快扫描速度,二来,ping数据流可能会被防火墙或者IDS过滤掉,而加上-PN参数则不会产生ping数据流,因而可以提高扫描成功的概率,三来,不会影响对目标主机的扫描。
可以通过添加—osscan-guess参数来猜测目标主机最有可能的操作系统及版本,但不一定完全准确。
事实上,nmap的操作系统类型检测依赖于nmap-0S-DB这个数据库,该数据库包含了超过2600中操作系统的信息,nmap把与目标主机的TCP或UDP通信结果与数据库做比较,得出可能的操作系统类型及版本,得到的具体信息包括:设备类型、运行的操作系统、操作系统的详细信息、扫描机与目标主机之间的距离。
-
路由跟踪
命令如下:
nmap –traceroute 14.215.177.38
效果如下图所示:
用wireshark抓包如下图所示:
从上面两图可得出:扫描主机与IP地址为14.215.177.38的目标主机在网络上的距离是14跳,可以得到中间间隔的各个路由器。 -
ALL扫描
命令如下:
nmap –A 192.168.2.103
效果如下图所示:
从上图可得出:这是对目标主机进行全面的扫描,包括主机发现、服务发现、操作系统检测、路由跟踪等。