网络扫描——Nmap

Nmap

1.Nmap简介

  Nmap是一款强大而广泛使用的开源网络扫描工具。它旨在帮助安全专业人员评估和审核网络上的主机和服务,发现潜在的漏洞和安全问题。Nmap提供了灵活且可定制的扫描技术,可以用于网络发现、端口扫描、服务和操作系统识别等任务

  这个工具包括了端口扫描、操作系统和服务识别、脚本扫描、网络发现等功能,可以说是安全专业必须要掌握的工具之一,网络上也有很多的nmap使用教程,在我看来是有些混乱和繁琐的,想要完全进行学习和掌握是需要花费比较大的时间的,所以这里仅展示出基础的用法和功能。(具体的学习可以参考nmap的官方文档)
1
https://nmap.org/

2.主机发现

  在我们渗透网络探测的任务中,最起初的步骤便是主机发现,在主机发现中,我们可以选择不同的扫描技术和选项来满足我的要求,例如

  -sn:使用Ping扫描模式,只进行主机发现而不进行端口扫描。

1
nmap -sn 192.168.0.0/24

  -Pn:禁用主机发现,直接对指定的IP地址进行端口扫描。

1
nmap -Pn 192.168.0.1

  -PR:使用ARP请求来发现局域网内的主机。

1
nmap -PR 192.168.0.0/24

  -PS、-PA、-PU:分别使用TCP SYN、TCP ACK和UDP扫描来发现主机

1
nmap -PS 192.168.0.1

  除了上述选项,Nmap还支持其他高级的主机发现技术。例如,使用IDLE/IPID扫描可以通过观察目标主机的TCP/IP栈行为来发现主机。FTP bounce扫描则利用FTP服务器的反弹功能来发现隐藏在防火墙后面的主机。SCTP INIT扫描则用于发现使用SCTP协议的主机

3.端口扫描基础

  首先我们明确nmap工具的作用,其作为一款以高效的端口扫描作为核心功能的工具,nmap简单的命令能扫描主机1660个tcp端口,对于传统的一些端口扫描器仅仅展示是否开放和关闭,nmap所提供的内容会更加的细节,器分为了6中端口状态:

  • Open状态

  Open状态:(开放),当Nmap发送探测数据包到目标端口时,如果收到了预期的响应(例如,TCP SYN扫描中的SYN+ACK数据包),则表明该端口正在监听并接受传入的连接。这意味着有一个服务或应用程序正在使用此端口,并准备处理传入的请求

  • Closed状态

  Closed状态:(关闭),当Nmap发送探测数据包到目标端口时,如果收到了RST(重置)数据包,表示该端口没有任何服务或应用程序在监听。尽管关闭的端口不提供任何服务,但它们仍然对安全评估很重要,因为它们表明目标主机存在且响应数据包

  • Unfiltered状态

  Unfiltered状态:(未过滤),当Nmap发送探测数据包到目标端口时,如果没有收到任何响应或收到了ICMP错误消息(例如“目的地不可达”),则可能是因为防火墙、路由器或其他网络设备阻止了探测数据包的传输。在这种情况下,Nmap无法判断端口是开放还是关闭

  • Filtered状态

  Filtered状态:(过滤),当Nmap发送探测数据包到目标端口时,如果没有收到任何响应或收到了ICMP错误消息(例如“目的地不可达”),则可能是因为防火墙、路由器或其他网络设备阻止了探测数据包的传输。在这种情况下,Nmap无法判断端口是开放还是关闭

  • Open|Filtered状态

  Open|Filtered状态:(开放或过滤),当使用某些扫描技术(如UDP扫描、IP协议扫描等)时,如果没有收到足够的信息来判断端口是开放还是被过滤,Nmap会将其标记为开放或过滤。这种状态表明Nmap无法确定端口是开放还是被过滤

  • Closed|Filtered状态

  Closed|Filtered状态:(关闭或过滤),这是一种非常罕见的状态,表示Nmap无法确定端口是关闭还是被过滤。这种状态可能出现在使用某些特殊扫描技术时,由于收到的信息不足以判断端口状态

4.端口扫描指令

  对于端口扫描的6种状态反馈,在前文也进行了相应的讲解和描述,对于端口如何进行扫描,如何用正确的命令进行扫描成为了一个问题(总不能一直用默认的SYN扫描解决所有问题吧),这里依旧需要注意,尽管Nmap会对扫描的位置进行结果产出,但是所有的结果都是基于目标机器返回的报文,有些主机并不值得信任,它会产生迷惑或误导类型的报文,更普遍的是非RFC兼容的主机以不正确的方式响应Nmap探测。FIN,Null和Xmas扫描 特别容易遇到这个问题。这些是特定扫描类型的问题。接下来进行扫描指令种类描述

  • -p(指定扫描模式)

  指定要扫描的端口范围

1
nmap -p 1-100 4399.com

  这个命令将对IP地址为4399.com的主机进行1到100端口范围内的扫描

  • -F(快速扫描模式)

  快速扫描模式,只扫描最常见的端口

1
nmap –F 4399.com

  这个命令将对IP地址为4399.com的主机进行快速扫描,只扫描最常见的端口

  • -sS(半开放扫描模式)

  TCP SYN扫描是Nmap默认的扫描方式。它通过发送TCP SYN数据包到目标端口来探测端口状态

1
nmap –sS 4399.com

  其产出的结果是根据收到的响应(SYN+ACK表示开放,RST表示关闭,无响应或ICMP错误表示过滤),判断端口状态

  其原理利用TCP三次握手过程中的前两个步骤,发送SYN数据包并分析返回的数据包。这种扫描类型适用于大多数情况,尤其是对隐蔽性要求较高的场景,因为不会完成TCP连接。

  • -sT(TCP Connect扫描)

  TCP Connect扫描通过尝试建立完整的TCP连接来探测端口状态。

1
nmap –sT 4399.com

  根据是否成功建立连接(成功表示开放,失败表示关闭或过滤),判断端口状态

  其原理是执行完整的TCP三次握手过程,直接与目标端口建立连接。该扫描类型适用于无法执行TCP SYN扫描的情况,例如在Windows非管理员权限下运行Nmap

  • -sU(UDP扫描)

  UDP扫描通过发送空的UDP数据包到目标端口来探测端口状态

1
nmap –sU 4399.com

  根据收到的响应(ICMP端口不可达表示关闭,无响应或其他ICMP错误表示开放或过滤),判断端口状态

  其原理是发送空的UDP数据包,分析返回的ICMP错误消息。这种类型适用于检测UDP服务,如DNS、SNMP等

  • -sA(ACK扫描)

  ACK扫描通过发送TCP ACK数据包到目标端口来探测端口是否被防火墙过滤

1
nmap –sA 4399.com

  根据收到的响应(RST表示未过滤,无响应或ICMP错误表示过滤),判断端口是否被过滤

  其原理是发送特定的TCP数据包(如设置FIN、URG和PUSH标志的Xmas数据包),分析返回的RST数据包。这种类型适用于绕过某些防火墙和IDS检测,但可能在某些操作系统上不准确

  • -sY(SCTP INIT扫描)

  SCTP INIT扫描通过发送SCTP INIT数据包到目标端口来探测端口状态

1
nmap –sY 4399.com

  根据收到的响应(INIT ACK表示开放,ABORT表示关闭,无响应表示过滤),判断端口状态

  其原理是利用SCTP协议的四次握手过程中的前两个步骤,发送INIT数据包并分析返回的数据包。这种类型适用于检测使用SCTP协议的服务,如SIGTRAN、Diameter等

  • -sO(IP协议扫描)

  IP协议扫描通过发送IP数据包到目标主机来探测支持的协议类型(如TCP、UDP、ICMP等)

1
nmap –sO 4399.com

  根据收到的响应(ICMP协议可达表示支持,ICMP协议不可达表示不支持),判断协议类型

  其原理是发送空的IP数据包,分析返回的ICMP错误消息。这种类型适用于评估目标主机支持的协议类型,以便选择合适的扫描策略

  • -sW(window扫描)

  Window扫描通过发送TCP ACK数据包到目标端口并检查返回的RST数据包中的窗口大小字段来探测端口状态

1
nmap –sW 4399.com

  根据返回的RST数据包中的窗口大小字段(非零表示开放,零表示关闭),判断端口状态

  其原理是发送TCP ACK数据包,分析返回的RST数据包中的窗口大小字段。这种类型适用于某些特殊情况,例如当其他扫描方法受限时。但在许多现代操作系统上可能不准确

  • -sM(Maimon扫描)

  Maimon扫描通过发送TCP FIN/ACK数据包到目标端口来探测端口状态

1
nmap –sM 4399.com

  根据收到的响应(无响应表示开放或过滤,RST表示关闭),判断端口状态

  其原理是发送TCP FIN/ACK数据包,分析返回的RST数据包。这个模式适用于绕过某些防火墙和IDS检测,但可能在某些操作系统上不准确

  • -sI (Idle扫描)

  Idle扫描是一种隐蔽的扫描方法,通过利用一个“僵尸”主机(即空闲主机)来探测目标端口状态,从而隐藏真实的扫描来源

1
2
3
nmap –sI <僵尸主机ip> 4399.com

nmap -Pn -sI <僵尸主机IP> 4399.com

  根据“僵尸”主机收到的响应(IPID增加表示开放,未变化表示关闭),判断端口状态

  当使用Idle扫描时,很多人会选择使用-Pn选项来禁用主机发现(即不对目标发送ping探测),以防止真实IP地址被泄露。这样做可以提高扫描的隐蔽性,但可能会影响扫描速度和可靠性

  其原理是发送特制的数据包到“僵尸”主机和目标端口,观察“僵尸”主机的IPID变化。这个模式适用于高度隐蔽性要求的场景,但需要找到合适的“僵尸”主机,并且可能较慢

  • -b(FTP bounce扫描)

  FTP bounce扫描利用漏洞存在的FTP服务器来代理扫描目标端口

1
nmap -b <FTP服务器IP>:<FTP端口> -Pn <目标主机>

  根据FTP服务器返回的响应(成功表示开放,失败表示关闭或过滤),判断端口状态。其原理是通过FTP服务器的PORT命令将数据连接重定向到目标端口,观察FTP服务器的响应。该模式适用于利用存在漏洞的FTP服务器进行隐蔽扫描的场景。但由于现代FTP服务器通常修复了此类漏洞,实际应用较少

5.服务和版本探测

  对于渗透网站进行相关的服务和版本扫描是十分必要的,通过对不同扫描的结果进行

  • -sV (版本探测)

  服务探测扫描通过发送特定的数据包到目标端口来识别运行在这些端口上的服务及其版本

1
nmap –sV 4399.com

  根据收到的响应,Nmap会报告每个端口上运行的服务名称、版本以及其他相关信息

  其利用Nmap的服务指纹数据库,发送针对特定服务的探测数据包并分析返回的响应。用于了解目标系统上运行的服务及其版本,以便评估潜在的安全风险和选择合适的攻击策略

  • -sC(脚本探测)

  脚本扫描使用Nmap脚本引擎(NSE)执行预定义或自定义的Lua脚本,以获取更多关于目标主机和服务的信息

1
nmap –sC 4399.com

  根据执行的脚本类型,Nmap会报告各种有关目标主机和服务的详细信息,如漏洞、配置错误等

  其原理是运行Lua脚本,与目标主机和服务进行交互并收集信息。适用于深入分析目标主机和服务的安全状况,发现潜在的漏洞和配置问题

  • –version-intensity(版本强度扫描)

  版本强度扫描允许调整服务版本探测的强度,从而影响扫描速度和准确性。取值范围为0(最低强度)至9(最高强度),默认值为7。

1
nmap -sV --version-intensity 5 4399.com

  根据设置的版本强度,Nmap会报告不同程度的详细服务版本信息

  原理是根据设置的强度值,发送更多或更少的服务探测数据包并分析返回的响应。适用于在扫描速度和准确性之间进行权衡,根据实际需求调整服务版本探测的强度

  • –version-light(版本轻量级扫描)

  版本轻量级扫描是一种快速的服务版本探测方法,只发送少量的探测数据包以加快扫描速度

1
nmap -sV --version-light 4399.com

  由于发送的探测数据包较少,Nmap可能报告较少的服务版本信息,本质上是–version-intensity 2

  仅发送少量的服务探测数据包并分析返回的响应。适用于需要快速获取服务版本信息的场景,但可能牺牲一定的准确性

  • -version-all (版本全面扫描)

  版本全面扫描会尝试所有可用的服务探测,以获得最准确的服务版本信息

1
nmap -sV --version-all 4399.com

  由于发送的探测数据包较多,Nmap会报告更详细的服务版本信息,其实本质上就是–version-intensity 9,直接上强度

  发送所有可用的服务探测数据包并分析返回的响应。适用于需要最准确的服务版本信息的场景,但可能导致扫描速度较慢

6.操作系统探测

  Nmap的TCP/IP协议栈fingerprinting是一种远程操作系统探测技术,通过分析目标主机对特定数据包的响应来推断其操作系统类型和版本。这项功能使得Nmap能够在不直接访问目标系统的情况下获取有关其操作系统的信息

  原理是Nmap发送一系列特制的数据包到目标主机,并观察其响应。这些数据包可能包括不同的TCP标志、IP选项、ICMP请求等。由于不同操作系统的TCP/IP实现存在差异,它们对这些数据包的响应也会有所不同。Nmap通过比较收到的响应与预先定义的操作系统指纹数据库,来确定目标主机最可能运行的操作系统及其版本

1
nmap -O 4399.com

  由于操作系统探测可能受到防火墙、IDS/IPS等安全设备的影响,从而导致结果不准确。为了提高准确性,建议将操作系统探测与其他扫描选项(如服务探测)结合使用

7.防火墙/IDS躲避和哄骗

  • 防火墙/IDS躲避

  该指令使用了分段IP数据包的技术,将扫描流量分割成更小的片段,以绕过防火墙和IDS的检测。

1
nmap -f 4399.com

  显示目标主机上开放的端口和服务

  这是通过发送分段的IP数据包,使得防火墙和IDS无法完整地重组和检测扫描流量。当目标主机上的防火墙或IDS对完整的扫描流量进行检测时,可以使用此功能来尝试规避检测

  • 哄骗操作

  该指令使用了IP地址欺骗技术,生成虚假的源IP地址,以混淆目标主机和网络设备的追踪

1
nmap -D RND:10 <target>

  显示目标主机上开放的端口和服务

  通过使用虚假的源IP地址,可以使得目标主机和网络设备无法准确追踪扫描请求的来源。当用户希望隐藏自己的真实IP地址并混淆扫描来源时,可以使用此功能

注:参考链接

  剩余的内容就不给予讲述了,对于时间、性能、输出以及运行交互上的相关内容可以参考该片文章:(写得很详细,就是内容太多,显得很杂的感觉)

1
https://www.cnblogs.com/toki-plus/p/16286632.html#%E5%AE%9E%E4%BE%8B

网络扫描——Nmap
https://one-null-pointer.github.io/2023/07/21/WEBtools——Nmap/
Author
liaoyue
Posted on
July 21, 2023
传送口