渗透测试工具指南---Nmap篇

简介
Nmap,即Network mapper(网络映射器),是一个用于网络扫描、网络嗅探的软件工具,功能强大,是寻找系统脆弱位置和评估系统安全性的有效工具,具体功能包括:

  1. 主机发现(检测活跃在网络上的主机)
  2. 端口发现(检测主机所开放的端口)
  3. 服务发现(检测相应端口用于提供服务的软件及版本)
  4. 检测主机的硬件地址、操作系统类型及版本
    对于黑客,寻找系统脆弱位置是攻击的第一步,而Nmap则是进行这一步骤的有效工具,黑客可以通过扫描得到的主机开放的端口号及其服务版本、结合操作系统的类型和版本,利用已知漏洞和大部分人安全意识的缺失,对系统进行攻击,进而获取系统的控制权、删除日志、隐藏行踪、开辟后门。
    对于网络管理员和渗透测试人员,可以进行网络故障检测,也可以利用相同的方式对系统进行扫描,从而找出系统存在的已知漏洞,通过打补丁等方式进行预防,当然,这个过程还要考虑可能带来的损失大小以及企业的经济情况。

Nmap基础命令

  1. 扫描单一主机
    命令如下:
    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报文段,断开连接请求。

  2. 扫描整个子网
    命令如下:
    nmap 192.168.2.0/24
    效果如下图所示:
    在这里插入图片描述
    在这里插入图片描述
    拿IP地址为192.168.2.1的目标主机来解释,该主机打开,对其扫描的1000个端口中,有998个端口的扫描被防火墙或IDS过滤掉,80号端口和1900号端口处于打开状态,分别提供http、upnp服务;对于IP地址为192.168.2.104的主机,还可知道其是华为设备。这条命令扫描的实质仍然是半TCP连接。

  3. 扫描多个目标
    命令如下:
    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,该主机为小米设备。

  4. 扫描一个范围内的IP地址
    命令如下:
    nmap 192.168.2.1-100
    效果如下图所示:
    在这里插入图片描述
    该命令扫描的IP地址范围从192.168.2.1至192.168.2.100,从扫描结果可以看出,100台主机中仅有IP地址为192.168.2.1的主机处于打开状态。

  5. 扫描除去某个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个端口都处于关闭状态。

  6. 扫描保存在某个文件中的IP地址列表的主机
    命令如下:
    nmap -iL ip_list
    在该命令中,ip_list为Kali Linux系统下的文件名,需要注意的是,在Linux系统下,文件只有名字,没有后缀名。ip_list文件内容如下所示:
    在这里插入图片描述
    效果如下图所示:
    在这里插入图片描述
    扫描结果解释参考前面,此处不再叙述。

  7. 扫描某一子网中除去某文件中的IP地址列表外的其它主机
    命令如下:
    nmap 192.168.2.0/24 –excludefile ip_list
    效果如下图所示:
    在这里插入图片描述
    扫描结果解释参考前面,此处不再叙述。

  8. 查看扫描的主机列表
    命令如下:
    nmap –sL 192.168.2.0/24
    效果如下图所示:
    在这里插入图片描述

  9. 扫描特定主机的端口号
    命令如下:
    nmap 192.168.2.102 –p 21,23,25,80,443
    效果如下图所示:
    在这里插入图片描述
    扫描的目标端口中,对21、23、25、80号端口的扫描被该主机上的防火墙或者IDS过滤拦截,对443号端口的扫描成功,该端口处于打开状态。

Nmap高级命令

  1. 全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三次握手来建立与目标主机连接的方式来判断端口是否打开,它会导致目标主机的日志中有大量的连接记录,容易暴露扫描主机的行踪,且扫描速度慢。

  1. 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权限的用户。

  1. 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操作系统的主机不起作用。

  1. 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探针没有到达目的主机的端口,被防火墙过滤掉了。

  1. 扫描最常用的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个端口打开。

  2. 针对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号端口是打开的。

  3. 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应答包,处于开机状态。

  1. 版本检测 –sV
    命令如下:
    nmap –sV 192.168.2.103 –p 80
    效果如下图所示:
    在这里插入图片描述
    用wireshark抓包如下图所示:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    从上面4图可得出:扫描主机首先是通过SYN扫描确定目标主机的80端口打开,再通过TCP三次握手建立连接,然后进行HTTP数据传输,从HTTP数据传输的过程中判断目标主机端口服务的版本。

  2. 代理扫描 -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扫描。

  3. 对目标主机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通信结果与数据库做比较,得出可能的操作系统类型及版本,得到的具体信息包括:设备类型、运行的操作系统、操作系统的详细信息、扫描机与目标主机之间的距离。

  1. 路由跟踪
    命令如下:
    nmap –traceroute 14.215.177.38
    效果如下图所示:
    在这里插入图片描述
    用wireshark抓包如下图所示:
    在这里插入图片描述
    从上面两图可得出:扫描主机与IP地址为14.215.177.38的目标主机在网络上的距离是14跳,可以得到中间间隔的各个路由器。

  2. ALL扫描
    命令如下:
    nmap –A 192.168.2.103
    效果如下图所示:
    在这里插入图片描述
    从上图可得出:这是对目标主机进行全面的扫描,包括主机发现、服务发现、操作系统检测、路由跟踪等。

发布了1 篇原创文章 · 获赞 1 · 访问量 88

猜你喜欢

转载自blog.csdn.net/weixin_42989774/article/details/103959184