如何使用 NMAP 命令进行网络扫描
如何使用 NMAP 命令进行网络扫描
Nmap(“Network Mapper”)是一个免费的开源(许可)实用程序,用于网络发现和安全审计。许多系统和网络管理员还发现它对网络清单、管理服务升级计划以及监控主机或服务正常运行时间等任务很有用。Nmap 以新颖的方式使用原始 IP 数据包来确定网络上可用的主机、这些主机提供的服务(应用程序名称和版本)、它们运行的操作系统(和操作系统版本)、数据包过滤器/防火墙的类型正在使用,以及许多其他特性。它旨在快速扫描大型网络,但对单个主机也能正常工作。Nmap 可在所有主要计算机操作系统上运行,官方二进制包可用于 Linux、Windows 和 Mac OS。
有关详细信息,请访问https://nmap.org
主机扫描 Host Scan
渗透测试人员使用主机扫描通过向该网络中的所有系统发送 ARP 请求数据包来识别网络中的活动主机。结果,它将通过从每个活动主机接收 MAC 地址来显示消息“主机已启动”。
语法:
nmap -sP <目标 IP 范围>
nmap -sn <目标 IP 范围>
以上语法描述了如何执行主机扫描,以使用 Nmap 发现网络中的活动主机。kali Linux默认内置了nmap,现在打开终端输入以下命令,将ARP请求包一一发送到各个系统。
nmap -sP 192.168.80.1-225
从下面给出的图像中,您可以观察到 nmap 为活动主机生成的响应结果。
怎么运行的
Nmap 使用 -sP/-sn 标志进行主机扫描和广播 ARP 请求数据包,以识别分配给特定主机的 IP。
它将在该网络中广播特定 IP [假设 192.168.80.1] 的 ARP 请求,它可以是 IP 范围 [192.168.80.1-225] 或 CIDR [192.168.80.1/24 for class C] 的一部分,用于指示我们想扫描我们网络中的所有 256 个 IP。之后,活动主机将通过发送其 MAC 地址作为回复来单播 ARP 数据包,从而给出一条消息Host is up。
端口扫描/TCP扫描 Port scan /TCP scan
如果渗透测试人员想要识别目标机器上特定端口的打开或关闭状态,那么他们应该使用 nmap 端口扫描。
端口状态: 扫描后,您可能会看到一些带有端口状态的结果,如已过滤、打开、关闭等。让我解释一下。
- open:这表示应用程序正在侦听此端口上的连接。
- Closed:这表示已接收到探测,但没有应用程序侦听此端口。
- Filtered:表示没有收到探测,无法建立状态。它还表明探测器正在被某种过滤丢弃。
- Unfiltered:这表示已收到探测,但无法建立状态。
- Open/Filtered:这表示端口被过滤或打开但 Nmap 无法建立状态。
- Closed/Filtered:这表示端口被过滤或关闭,但 Nmap 无法建立状态。
语法:
nmap -p [端口号] <目标IP范围>
nmap -sT [端口号] <目标IP范围>
nmap -p135 192.168.80.134
上面的命令将尝试与端口 135 连接,如果端口是打开的,那么它将显示状态“打开”以及在该特定端口上运行的“服务”。
怎么运行的
Nmap 使用参数 -p 来定义要扫描的端口范围。该标志可以与任何扫描方法结合使用。在上面的例子中,我们使用参数 –p135 来向 Nmap 表明我们只对端口 135 感兴趣。您可以将它应用于 192.168.80.1/24 中的 CIDR /24,这用于表明我们要扫描所有端口我们网络中的 256 个 IP。
参数 –p 有几种可接受的格式:
端口列表 Port List
nmap -p135,139 192.168.80.134
如果渗透测试人员想要扫描目标的多个端口,那么他们应该使用端口列表扫描,他们可以在其中添加多个端口进行扫描。此扫描对于识别多个选定端口的状态非常有用,如果发现任何单个端口打开,这些端口还描述状态“主机已启动”。
端口范围 Port Range
使用端口范围扫描,您可以根据需要扫描目标网络的特定端口范围。
nmap -p1-1000 192.168.80.134
所有端口 ALL Ports
如果渗透测试人员想要扫描所有65535个端口;然后他们应该执行下面给出的命令,该命令将枚举目标系统的开放端口:
语法: nmap -p- <目标>
以上语法用于扫描目标网络的所有端口,执行上述格式时请耐心等待,因为枚举打开的端口需要一些时间,或者您也可以执行下面给出的命令,该命令使用参数“–open”执行相同的任务,以便省时间。
nmap -p1-65535 192.168.80.134 --open
协议的特定端口 Specific Ports by Protocols
默认情况下,端口扫描更喜欢枚举 TCP 端口的状态,但如果您想扫描 TCP 端口和 UDP 端口,请执行以下命令:
语法: nmap -pT:25,U:53 <目标>
端口服务名称 Port Service name
如果您不知道用于枚举的准确端口号,那么您也可以提及用于端口状态扫描的服务名称。
语法: nmap –p[服务]<目标>
nmap -p msrpc 192.168.80.134
从给定的图像中,您可以观察到在不引用任何端口号的情况下执行上述命令获得了相同的结果。
UDP扫描 UDP Scan
UDP 服务在渗透测试期间大多被忽略,但优秀的渗透测试人员知道它们经常暴露主机的基本信息,甚至可能容易受到攻击,甚至被用来破坏主机。此方法演示如何利用 Nmap 列出主机上所有打开的 UDP 端口。
语法: nmap –sU <目标>
nmap -sU 192.168.80.134
从下面给出的图像中,您可以观察 UDP 端口扫描的结果。
nmap -sU -p 137 192.168.80.134
为了扫描特定的 UDP 端口,建议您使用标志 -p 进行端口选择。在这里您可以观察到我们选择了端口 137,这是用于 NetBIOS 服务的 UDP 端口。
有很多方法可以根据您的要求执行 UDP 扫描,例如阅读下面给出的执行 UDP 扫描的方法:
UDP 端口范围
如果要扫描多个 UDP 端口或 UDP 端口范围,请使用 –p 标志来寻址端口范围。
语法: nmap -p1-500 -sU <目标>
所有 UDP 端口
语法: nmap -sU -p- <目标>
以上语法适用于扫描目标网络的所有 UDP 端口。
怎么运行的
UDP 扫描通过向每个目标端口发送 UDP 数据包并分析响应来确定端口状态;它是一种无连接协议。对于一些常见的端口,如 53 和 161,发送特定于协议的负载以提高响应速度,服务将以 UDP 数据包响应,证明它是“开放的”。如果端口“关闭”,则会收到来自目标的 ICMP Port Unreachable 消息。如果重传后没有收到响应,则端口被归类为“打开|过滤”。这意味着端口可能已打开,或者数据包过滤器可能正在阻止通信。
操作系统检测扫描 OS Detection Scan
除了开放端口枚举之外,nmap 在操作系统指纹识别中非常有用。此扫描对渗透测试人员非常有帮助,以便总结可能的安全漏洞并确定可用的系统调用以设置特定的漏洞利用有效负载。
语法: nmap -O <目标>
nmap -O 192.168.80.134
以上命令将转储以下信息:
设备类型: 所有指纹都归类为一种或多种高级设备类型,例如路由器、打印机、防火墙、通用。这些在称为“设备和操作系统分类(类别行)”的部分中有进一步描述。如果您注意到下面的图片“设备类型:通用”。
运行: 该字段还与“设备和操作系统分类(类行)”一节中描述的操作系统分类方案相关。它显示操作系统系列(在本例中为 Windows)和操作系统的代数(如果可用)。如果有多个操作系统系列,则以逗号分隔。当 Nmap 无法将操作系统代数缩小到一个特定的选择时,选项由竖线符号 (‘|’) 分隔。示例包括 OpenBSD 3.X、NetBSD 3.X|4.X 和 Linux 2.4.X|2.5.X |2.6.X。
操作系统 CPE: 这显示了操作系统的通用平台枚举 (CPE) 表示(如果可用)。它还可能具有硬件类型的 CPE 表示。操作系统 CPE 以 cpe:/o 开头,硬件 CPE 以 cpe:/h 开头。
操作系统详细信息: 此行给出了每个匹配的指纹的详细描述。Device type 和 Running 行来自计算机易于解析的预定义枚举列表,而 OS details 行包含自由格式的数据,这对阅读报告的人很有用。这可以包括特定于给定指纹的更准确的版本号、设备型号和体系结构。
怎么运行的
选项 -O 通知 Nmap 启用操作系统检测,以识别各种系统,包括住宅路由器、IP 网络摄像头、操作系统和许多其他硬件设备
您还可以执行以下命令进行操作系统检测
语法: nmap -O -p- –osscan-guess <目标>
如果操作系统检测失败,您可以使用参数 –osscan-guess 来尝试猜测操作系统:
要仅在扫描条件理想时启动操作系统检测,请使用参数 –osscan-limit:
语法: nmap -O –osscan-limit <目标>
版本扫描 Version Scan
在对您的公司或客户进行漏洞评估时,您确实想知道正在运行哪些邮件和 DNS 服务器及版本。拥有准确的版本号有助于确定服务器容易受到哪些攻击。版本检测可帮助您获取此信息。对服务进行指纹识别还可以揭示有关目标的其他信息,例如可用模块和特定协议信息。版本扫描在渗透测试中也被归类为“ Banner Grabbing ”。
语法: nmap -sV <目标>
以下命令将转储目标机器运行服务的安装版本的结果。
nmap -sV 192.168.80.134
从下面给出的图像中,您可以观察到它显示了正在运行的应用程序的当前安装版本。. 附加信息将包含在括号中。版本检测可以发现的主机名字段和另外两个字段是操作系统和设备类型,在端口表后面的服务信息行中报告。
特定端口版本扫描
对于特定端口或服务的扫描版本,您可以在命令中使用参数 –p,如下所示。
语法: nmap -sV -p135 <目标>
怎么运行的
-sV 标志通过从 nmap-service-probes 发送不同的查询到假定的开放端口列表来通知 nmap 工作,以进行横幅抓取。结果它将以表的形式输出,其中有一个名为 VERSION 的附加列,显示特定的服务版本。附加信息将包含在括号中。
协议扫描 Protocol Scan
IP 协议扫描对于确定主机正在使用的通信协议非常有帮助。此方法展示了如何使用 Nmap 枚举所有 IP 协议,其中将不带任何附加协议标头的原始 IP 数据包发送到目标计算机上的每个协议。对于 IP 协议 TCP、ICMP、UDP、IGMP 和 SCTP,Nmap 将设置有效的标头值,但对于其余部分,将使用空 IP 数据包。
语法: nmap -sO <目标>
结果将显示支持哪些协议及其状态。
nmap -sO 192.168.80.134
从下面给出的图像中,您可以观察到打开和打开|过滤状态的协议扫描结果。
怎么运行的
标志 -sO 告诉 Nmap 执行 IP 协议扫描,这种扫描在文件 nmap-protocols 中的所有协议中重复,并为每个条目创建 IP 数据包。
为了验证端口状态,Nmap 对收到的不同响应进行分类,如下所示:
当它收到 ICMP 协议不可达错误 type=3 或 code=2 时,端口状态被标记为“关闭”。
ICMP 无法访问的错误类型=3 或代码 1、3、9、10 或 13 表示端口状态为“已过滤”。
如果没有收到响应,则端口状态标记为“已过滤|打开”。
任何其他响应都会导致端口状态被标记为“已打开”。
要指定应扫描哪些协议,我们可以设置参数 -p:
语法:
nmap -p1,3,5 -sO <目标>
nmap -p1-10 -sO <目标>
快速扫描 Fast Scan
-F 选项仅扫描 nmap_services 文件(或协议文件,如果扫描类型为 -sO)中列出的那些端口。这比扫描所有 65,535 个端口要快得多。
如果您将扫描时间与上面的扫描结果进行比较,您会注意到这些扫描之间的时间差异,而且它没有显示上面扫描显示的其他正在运行的服务的开放端口。
语法: nmap –F <目标>
nmap –F 192.168.80.134
从下面给出的图像中,您可以观察到扫描 时间:1.43秒,而在上面的扫描方法 [协议扫描] 中,扫描时间:293.73秒
时序模板扫描 Timing Template Scan
如果您可能希望更好地控制时间以便更快地完成扫描并完成扫描,则可以通过 -T 参数设置主要时间选项。然而,Nmap 会根据网络速度和受害者的响应时间自动调整其时间。
Nmap 提供了一种更简单的方法,具有六个时序模板。您可以使用 -T 选项和它们的编号 (0–5) 或它们的名称来指定它们,如下所示:
- T0:paranoid
- T1:sneaky
- T2:polite
- T3:normal
- T4:aggressive
- T5:insane
语法: nmap T[选项] <目标>
nmap –T4 192.168.80.134
上面的命令将执行主动扫描并减少目标系统枚举的扫描时间,从下图中您可以观察到扫描时间:1.85秒。
排除扫描 Exclude Scan
在某些情况下,需要主机例外以避免扫描某些机器。如政府网站或IP,您可能没有授权,也可能主机已被扫描。Nmap 选项–exclude帮助您从完整的网络扫描中删除主机或主机列表。
语法: nmap <IP 范围> –exclude <目标 IP>
上面的语法定义了从给定的 IP 范围内不对排除的目标 IP 执行扫描,否则转储剩余 IP 的扫描结果。
nmap -F 192.168.1.110-255 --exclude 192.168.80.134
上面的命令将扫描 192.168.80.1 和 192.168.80.150 之间的所有 IP,除了“192.168.80.130”,您可以从下图中确认。
怎么运行的
参数 -F –exclude 192.168.80.130 通知 Nmap 对该专用网络中的所有 IP [192.168.80.1 和 192.168.80.255 之间] 执行快速扫描,不包括 IP 为 192.168.80.130 的机器。
nmap -sV -O --exclude-file remove.txt 192.168.80.130/24
从扫描中排除主机列表 Nmap 还支持参数 –exclude-file 以排除 中列出的目标
激进扫描 Aggressive Scan
此选项启用其他高级和主动选项。目前,这会启用操作系统检测 (-O)、版本扫描 (-sV)、脚本扫描 (-sC) 和跟踪路由 (–traceroute)。此选项仅启用功能,而不启用您可能需要的计时选项(例如 -T4)或详细选项 (-v)。您可以使用以下命令之一看到这一点:
语法: nmap -A <目标>
nmap –A 192.168.80.134
如果您注意到下图,那么您会发现它获得的结果是多次扫描的组合。作为运行应用程序的转储“版本”,“OS 指纹”、“traceroute”和“主机脚本扫描”g 显示了与主机系统相关的一些非常重要的信息。
怎么运行的
参数 –A 通知 nmap 执行高级主动扫描以枚举正在运行的服务的版本、操作系统检测、跃点的跟踪路由和主机的主机脚本扫描。因此扫描会耗费一些时间,可以添加-T4时序模板来提高扫描速度。
列表扫描 List Scan
当您想扫描多个主机以执行多个扫描时,可以使用 –iL 选项,它支持 nmap 从外部文件加载目标。只需要将所有目标 IP 添加到一个文本文件中,并将其保存在一个位置即可。
要从文件 targets.txt 加载目标,可以使用以下命令:
语法: nmap -iL targets.txt [文件路径]
nmap -iL /home/kali/Desktop/targets.txt
免责声明: 本文所涉及到的渗透测试内容仅供安全研究和学习目的,严禁用于非法用途,渗透测试是一项专业技术活动,必须经过有关部门的授权才能进行。作者不承担任何因使用本文内容而导致的法律责任。读者在使用本文所提供的技术和信息时,必须遵守当地法律法规和相关政策。如果读者违反了这些规定,后果由读者自负。
转载请注明出处。
参考来源 https://nmap.org/book/