当前位置: 首页 > news >正文

Nmap 端口扫描

文章目录

  • 端口状态
  • TCP 连接扫描
  • TCP SYN 扫描
  • UDP扫描
  • 选项
  • 高级端口扫描
    • 绕过无状态防火墙
      • Null Scan
      • FIN Scan
      • Xmas Scan
    • 扫描防火墙规则
      • ACK Scan
      • Windows Scan
    • 自定义扫描
  • 欺骗和诱饵
    • 欺骗
    • 诱饵
  • 分割数据包
  • 空闲/僵尸扫描

端口状态

在实际情况下,我们需要考虑防火墙的影响。例如,某个端口可能是开放的,但防火墙可能会阻塞数据包。因此,Nmap 考虑以下六种端口状态:

  1. Open: 表示服务正在指定的端口上监听。
  2. Closed: 表示指定端口上没有服务在监听,尽管该端口是可用的。可到达的。这里所说的“可访问”是指能够到达且未被防火墙或其他安全设备/程序阻断。
  3. Filtered: 意味着 Nmap 无法确定端口是开放还是关闭,因为端口未响应且可到达的。这种情况通常是由于防火墙阻止了 Nmap 访问该端口。Nmap 发送的数据包可能无法到达该端口;或者,来自该端口的响应无法到达 Nmap 所在的主机。
  4. Unfiltered: 意味着 Nmap 无法确定端口是开放还是关闭,尽管该端口是可到达的。当使用 ACK 扫描 -sA 时会遇到这种状态。
  5. Open|Filtered: 这意味着 Nmap 无法确定该端口是开放的还是被过滤的。
  6. Closed|Filtered: 这意味着 Nmap 无法确定端口是关闭状态还是被过滤状态。

TCP 连接扫描

TCP 连接扫描通过完成 TCP 三次握手来实现。在标准的 TCP 连接建立过程中,客户端发送一个设置了 SYN 标志的 TCP 数据包,如果端口是开放的,服务器会以 SYN/ACK 响应;最后,客户端通过发送 ACK 来完成三次握手。

您可以选择使用 -sT 运行 TCP 连接扫描。需要注意的是,如果您不是特权用户(root 或 sudoer),那么 TCP 连接扫描是发现开放 TCP 端口的唯一可行选项。

我们可以使用 -F 来启用快速模式,并将扫描的端口数量从 1000 个减少到 100 个最常见的端口。

TCP SYN 扫描

普通用户仅限于执行连接扫描。然而,默认的扫描模式是 SYN 扫描,这需要特权用户(root 或 sudo 用户)才能运行。SYN 扫描无需完成 TCP 三次握手;相反,它在收到服务器响应后即断开连接。由于我们没有建立 TCP 连接,这降低了扫描被记录的可能性。我们可以通过使用 -sS 选项来选择这种扫描类型。

当以特权用户身份运行 Nmap(例如以 root 身份运行或使用 sudo)时,TCP SYN 扫描是默认的扫描模式,它是一个非常可靠的选择。

UDP扫描

UDP 是一种无连接协议,因此它无需任何握手来建立连接。我们无法保证监听 UDP 端口的服务会对我们的数据包做出响应。然而,如果向一个关闭的端口发送 UDP 数据包,会返回一个 ICMP 端口不可达错误(类型 3,代码 3)。您可以使用 -sU 选项选择 UDP 扫描;此外,您还可以将其与另一种 TCP 扫描结合使用

可以这么理解,那些没有生成任何响应的 UDP 端口就是 Nmap 会标记为开放的端口。

选项

您可以指定要扫描的端口,而非默认的 1000 个端口。让我们来看一些示例:

  • 端口列表: -p22,80,443 将扫描 22、80 和 443 端口。
  • 端口范围: -p1-1023 将扫描 1 到 1023 之间的所有端口(包括 1 和 1023),而 -p20-25 则会扫描 20 到 25 之间的端口(包括 20 和 25)。
  • 使用 -p- 请求扫描所有端口,这将扫描全部 65535 个端口。

您可以使用 -T<0-5> 来控制扫描时间。 -T0 是最慢的(极度谨慎),而 -T5 是最快的。为避免触发入侵检测系统警报,您可以考虑使用 -T0-T1 。例如, -T0 每次扫描一个端口,并在发送每个探测包之间等待 5 分钟,因此您可以推测扫描一个目标需要多长时间才能完成。如果您未指定任何时间设置,Nmap 将使用正常的 -T3

您也可以选择使用 --min-rate <number>--max-rate <number> 来控制数据包的发送速率。例如, --max-rate 10--max-rate=10 可确保您的扫描仪每秒发送的数据包不超过十个。

高级端口扫描

绕过无状态防火墙

在一种情况下,下面这三种扫描类型可能会很有效,那就是扫描位于无状态(非有状态)防火墙之后的目标。无状态防火墙会检查传入的数据包是否设置了 SYN 标志,以检测连接。努力。使用与 SYN 数据包不匹配的标志组合,有可能欺骗防火墙并访问其后的系统。如果是状态防火墙,则会拦截所有此类精心构造的数据包,从而使这种扫描毫无用处。

Null Scan

空扫描不设置任何标志位;所有六个标志位都被设置为零。您可以使用 -sN 选项选择此扫描。当一个没有任何标志位设置的 TCP 数据包到达开放端口时,不会触发任何响应。

然而,如果端口关闭,我们期望目标服务器会用一个 RST 数据包作出回应。因此,我们可以利用没有收到 RST 响应这一情况来确定那些未关闭的端口:处于开放或被过滤的状态。

FIN Scan

FIN 扫描会发送一个设置了 FIN 标志的 TCP 数据包。您可以使用 -sF 选项选择此扫描类型。同样,如果 TCP 端口处于打开状态,则不会收到响应。

然而,如果端口关闭,目标系统应当以 RST 响应。因此,我们将能够知晓哪些端口是关闭的,并利用这一信息推断出哪些端口是开放的或被过滤的。值得注意的是,有些防火墙会“静默”丢弃流量而不发送 RST。

Xmas Scan

Xmas 扫描会同时设置 FIN、PSH 和 URG 标志。您可以使用选项 -sX 选择 Xmas 扫描。

与空扫描和 FIN 扫描类似,如果收到 RST 数据包,则表示端口已关闭。否则,将报告为开放 | 过滤。

扫描防火墙规则

ACK 扫描和 Windows 扫描在帮助我们绘制防火墙规则方面非常有效。然而,至关重要的是要记住,仅仅因为防火墙没有阻止特定端口,并不意味着该端口上有服务在监听。

ACK Scan

ACK 扫描会发送一个设置了 ACK 标志的 TCP 数据包。使用 -sA 选项来选择此扫描。

无论目标端口处于何种状态,目标都会用 RST 来回应 ACK。

如果目标前面有防火墙,这种扫描会很有帮助。因此,根据哪些 ACK 数据包得到了响应,您将了解哪些端口未被防火墙阻止。换句话说,这种类型的扫描更适合发现防火墙规则集和配置

Windows Scan

TCP Windows扫描几乎与 ACK 扫描相同;不过,它会检查返回的 RST 数据包中的 TCP Windows字段。在特定系统上,这可以揭示端口是开放的。您可以使用选项 -sW 选择此扫描类型。

自定义扫描

如果您想尝试内置 TCP 扫描类型之外的新 TCP 标志组合,可以使用 --scanflags 来实现。例如,如果您想同时设置 SYN、RST 和 FIN 标志,可以使用 --scanflags RSTSYNFIN

欺骗和诱饵

欺骗

在某些网络配置中,您可以使用伪造的 IP 地址甚至伪造的 MAC 地址来扫描目标系统。

下图展示了攻击者发起的命令 nmap -S SPOOFED_IP MACHINE_IP 。 因此,Nmap 将使用提供的源 IP 地址 SPOOFED_IP 来构建所有数据包。目标机器会响应传入的数据包,并将回复发送至目标 IP 地址 SPOOFED_IP 。为了使此扫描正常工作并获得准确的结果,攻击者需要监控网络流量以分析回复。

![[Pasted image 20250604011422.png]]
当您与目标机器处于同一子网时,您也能够伪造您的 MAC 地址。您可以使用 --spoof-mac SPOOFED_MAC 指定源 MAC 地址。这种地址伪造仅在攻击者和目标机器处于同一以太网(802.3)网络或同一 WiFi(802.11)网络时才可行。

诱饵

欺骗攻击仅在极少数满足特定条件的情况下才能奏效。因此,攻击者可能会采用诱饵手段,以增加被定位的难度。其原理很简单,让扫描看起来来自多个 IP 地址,从而使攻击者的 IP 地址在其中隐匿

![[Pasted image 20250604011619.png]]

您可以通过在 -D 后指定特定或随机的 IP 地址来启动诱饵扫描。

例如, nmap -D 10.10.0.1,10.10.0.2,ME MACHINE_IP 会使对 MACHINE_IP 的扫描显示为来自 IP 地址 10.10.0.1、10.10.0.2,而 ME 表示您的 IP 地址应排在第三位。

另一个示例命令为 nmap -D 10.10.0.1,10.10.0.2,RND,RND,ME MACHINE_IP ,其中第三和第四个源为随机的 IP 地址,而第五个源将是攻击者的 IP 地址。

分割数据包

如何降低传统防火墙/IDS 检测到您的 Nmap 活动的可能性?这很难回答;不过,根据防火墙/IDS 的类型,您可能会受益于将数据包分割成更小的数据包。

Nmap 提供了 -f 选项来分段数据包。一旦选择,IP 数据将被分割成 8 字节或更小的片段。添加另一个 -f-f -f-ff )则会将数据分割成 16 字节的片段,而非 8 字节。您可以通过使用 --mtu 来更改默认值;不过,您始终应选择 8 的倍数。

空闲/僵尸扫描

空闲扫描,也称为僵尸扫描,需要一个连接到网络且能与之通信的空闲系统。 实际上,Nmap 会让每个探测包看起来像是来自空闲(僵尸)主机,然后检查空闲(僵尸)主机是否收到了对伪造探测包的任何响应。这是通过检查 IP 头中的 IP 标识(IP ID)值来实现的。您可以使用 nmap -sI ZOMBIE_IP MACHINE_IP 运行空闲扫描,其中 ZOMBIE_IP 是空闲主机(僵尸)的 IP 地址

空闲(僵尸)扫描需要以下三个步骤来确定一个端口是否处于开放状态:

  1. 触发空闲主机做出响应,以便您能够记录空闲主机当前的 IP 标识符。
  2. 向目标的 TCP 端口发送一个 SYN 数据包。该数据包应被伪造,使其看起来像是来自空闲主机(僵尸)的 IP 地址。
  3. 再次触发闲置机器做出响应,这样您就可以将新收到的 IP 标识与之前收到的进行比较。

我们用图表来解释。在下面的图表中,攻击者系统正在探测一台闲置的多功能打印机。通过发送一个 SYN/ACK,它会收到一个包含其 IP ID 新增量的 RST 数据包作为回应。
在这里插入图片描述

攻击者将在下一步向目标机器上他们想要检查的 TCP 端口发送一个 SYN 数据包。然而,此数据包将使用空闲主机(僵尸)的 IP 地址作为源地址。会出现三种情况。在第一种情况中,如图所示,TCP 端口处于关闭状态;因此,目标机器会向空闲主机发送一个 RST 数据包作为响应。空闲主机不会响应;因此其 IP ID 不会增加。

在这里插入图片描述

在第二种场景中,如下所示,TCP 端口处于开放状态,因此目标机器会向空闲主机(僵尸主机)发送一个 SYN/ACK 响应。空闲主机对这个意外的数据包以 RST 数据包进行回应,从而使其 IP ID 值增加。

在这里插入图片描述

在第三种情形中,由于防火墙规则,目标机器根本不作出任何响应。这种无响应的情况会导致与端口关闭相同的结果;空闲主机不会增加 IP 标识符。

在最后一步,攻击者向空闲主机发送另一个 SYN/ACK 数据包。空闲主机用一个 RST 数据包回应,再次将 IP ID 增加 1。攻击者需要将第一步收到的 RST 数据包的 IP ID 与这第三步收到的 RST 数据包的 IP ID 进行比较。如果差值为 1,则意味着目标机器上的端口是关闭的或被过滤的。然而,如果差值为 2,则意味着目标上的端口是开放的。

值得再次强调的是,这种扫描被称为“空闲扫描”,因为选择一个空闲的主机对于扫描的准确性来说是必不可少的。如果“空闲主机”处于忙碌状态,那么所有返回的 IP 标识符都将毫无用处。


文章转载自:

http://U8owfBXq.nbsbn.cn
http://yjk56qFh.nbsbn.cn
http://R4rPhkbG.nbsbn.cn
http://xIFYVfio.nbsbn.cn
http://D6tGnpzO.nbsbn.cn
http://lclfZdnv.nbsbn.cn
http://hjtOD7LH.nbsbn.cn
http://viORYgYj.nbsbn.cn
http://I2zriGJo.nbsbn.cn
http://puoQVDnB.nbsbn.cn
http://brssWpDo.nbsbn.cn
http://xj4jvJME.nbsbn.cn
http://qTHfEbxA.nbsbn.cn
http://yZSopOHS.nbsbn.cn
http://JTO9s0bW.nbsbn.cn
http://FLjvvwBc.nbsbn.cn
http://gfluesm7.nbsbn.cn
http://m6d8FrkW.nbsbn.cn
http://DzOxzQBX.nbsbn.cn
http://z6yBv27z.nbsbn.cn
http://iVrgHMOV.nbsbn.cn
http://q7D3MWvL.nbsbn.cn
http://d1Qiiism.nbsbn.cn
http://xZB7pOuL.nbsbn.cn
http://ol9Cf3eH.nbsbn.cn
http://etwYReIP.nbsbn.cn
http://5eA1f2n4.nbsbn.cn
http://xQOk1ITJ.nbsbn.cn
http://IHxvG12l.nbsbn.cn
http://JgOnvsMx.nbsbn.cn
http://www.dtcms.com/a/388494.html

相关文章:

  • 关于青春的沉浸式回忆录-《学生时代》评测
  • 深入理解虚拟 DOM(VDOM):原理、优势与应用
  • React 18笔记
  • 模块化演进史:从 IIFE / CommonJS / AMD 到 ES Modules(含 Tree Shaking 原理)
  • Python+PyQt构建自动化定时任务执行工具
  • 前端如何终止请求
  • Ubuntu 系统 MySQL 全面管理指南(认证、用户、密码、服务及安全)
  • 《UE5_C++多人TPS完整教程》学习笔记53 ——《P54 转身(Turning in Place)》
  • 【Cyansdk 插件详细介绍文档】
  • IDEA 如何打开eclipse项目
  • linux C++ opencv 绘制中文(源码编译opencv)
  • 线性回归到 Softmax 回归
  • Python实现剑龙优化算法 (Stegosaurus Optimization Algorithm, SOA)优化函数(付完整代码)
  • 微软开始在Win11上全屏打广告了,怎么关?
  • 深度学习-线性回归与 Softmax 回归
  • OpenCV:背景建模
  • JavaScript async/await 实战秘籍 异步编程技巧 + 避坑指南 秒杀 Promise then 链
  • Next.js动态配置实时预览方案
  • 讲讲对MoE的理解
  • OpenLayers数据源集成 -- 章节十七:KML图层详解:Google Earth数据格式的完整集成与交互式展示方案
  • LInux DMA fence与其他同步机制的对比分析
  • 【Windows端口管理】快速查看和释放被系统保留的TCP端口
  • LeetCode 2349.设计数字容器系统:双哈希表(要咋查就咋映射)
  • 使用webpack进行Gzip 压缩原理与影响详解
  • 一个基于Python PyQt5开发的渗透测试报告生成工具,用于快速生成专业的渗透测试报告。
  • 使用注解封装查询相关的功能
  • 电感边上加一横和加两横代表什么?
  • Python 0915
  • nvidia显卡架构列表
  • MySQL InnoDB存储引擎架构底层实现详细介绍