首页 > 其他分享 >【笔记】Nmap工具原理探索

【笔记】Nmap工具原理探索

时间:2024-07-15 17:20:16浏览次数:8  
标签:UDP 探索 Nmap 端口 扫描 笔记 TCP 数据包

【笔记】Nmap工具原理探索

原文章:【THM】Nmap(Nmap工具使用简介)-学习 - Hekeatsll - 博客园 (cnblogs.com)

Nmap是一款跨平台的开源端口扫描软件,它用来扫描计算机的开放端口,以确定运行的网络服务,并推断出计算机运行的操作系统

Nmap三种基本扫描类型

TCP连接扫描(-sT)

工作原理:通过依次与每个目标端口进行TCP三次握手来确认端口状态。(TCP连接原理可以查看: 【TCP三次握手和四次挥手】

​ Nmap将会尝试连接到每个指定的TCP端口(通过发送SYN包),然后通过本地机所接收到的响应消息来确定目标端口是否打开。

​ 如果TCP请求消息被发送到一个开放端口,目标服务器将会响应一个设置了SYN/ACK标志位的TCP数据包,然后Nmap会将此端口标记为打开状态(并会通过发送一个带有ACK标志位的TCP数据包来完成握手)。(你完成握手了,你与目标服务建立了连接)

image

​ 如果Nmap发送一个设置了SYN标志的TCP请求消息到一个关闭端口,那么目标服务器将响应一个设置了RST (Reset)标志的TCP数据包,通过此响应消息,Nmap就可以确定目标端口已关闭。

image

​ 如果目标端口是开放的,但此端口隐藏在防火墙后面。有很多防火墙可能会被配置为简单地丢弃传入数据包,如果Nmap发送一个TCP SYN请求,但没有收到任何回复消息,这表示目标端口正在受到防火墙的保护,因此该端口会被Nmap认为是过滤的(filtered)。

image-20240715155309984

tips:TCP连接扫描一般不推荐使用,因为会留下TCP连接日志。

SYN扫描(-sS)

工作原理:通过依次与每个目标端口进行发送设置了SYN标志的TCP请求消息来确认端口状态,并且迅速发送一个设置了RST标志位的TCP数据包断开。

SYN扫描执行的是不完整的TCP三次握手过程,在SYN扫描中,客户端在接收到来自服务器的一个设置了SYN/ACK标志位的数据包之后,将直接发送一个设置了RST标志位的TCP数据包结束握手(这可以防止服务器端重复尝试发出TCP数据包)。image

SYN扫描的优点:

  • SYN扫描可以用来绕过一些旧的入侵检测系统(IDS)。因为那些使用旧技术的IDS所检测的是完整的TCP三次握手,而现代IDS解决方案通常不再只是检测完整的TCP三次握手;正是基于前述原因,SYN扫描现在仍然会被称为“隐形-Stealth”扫描。
  • 不会被web日志记录。侦听开放端口的web应用程序通常不会记录SYN扫描行为,因为一个标准的web日志是在TCP连接完全建立后才开始记录,这再次说明了SYN扫描是隐秘的。
  • 速度更快。使用SYN扫描时,本地计算机无需针对每个目标端口完成TCP三次握手(以及最后断开连接)的全过程,因此,SYN扫描比标准的TCP连接扫描要快得多。

SYN扫描的缺点:

  • 权限需求高。SYN扫描需要使用sudo权限才能在Linux中正常工作,这是因为SYN扫描需要创建原始数据包,在默认情况下,这是root用户才能拥有的特权。
  • 导致目标服务崩溃。不稳定的服务有时会因SYN扫描而宕机,如果客户提供给渗透测试人员的是处于生产环境下的目标机器,则可能会出现一些重大问题。

SYN扫描和TCP连接扫描十分相似,但SYN是不会跟端口服务进行TCP连接的。

UDP扫描(-sU)

工作原理:通过依次与每个目标端口进行多次发送UDP数据包来确认端口状态。

与TCP连接不同,UDP连接是无状态的。UDP连接只是简单地将数据包发往目标端口,并希望数据包能够成功到达,即:UDP并非是通过“握手”来启动连接的,UDP只管发送不管送没送到。

当一个数据包被发送到一个开放的UDP端口时:理论上应该不会有响应消息,此时Nmap会将该端口识别为open|filtered状态(UDP扫描会猜测目标UDP端口是开放的,但该目标端口也可能是被防火墙过滤的);

如果客户端得到一个UDP响应消息(这是非常不寻常的,一般响应的消息是部分错误回收到IP层的ICMP报文来通知有问题的消息,如,网络不可达,端口不可达,主机不可用等),那么Nmap会将目标UDP端口识别为开放状态;

常见的情况是客户端不会得到任何响应消息,在此情况下,数据包请求将会被第二次发送给目标UDP端口以进行双重检查,如果第二次发送数据包仍然没有得到响应,那么目标UDP端口就会被识别为open|filtered状态,然后Nmap将继续扫描下一个目标UDP端口。

当一个数据包被发送到一个关闭的UDP端口时:目标服务器应该响应一个ICMP (ping)数据包,其中会包含一个"端口不可达"的消息,Nmap会清楚地识别到这个UDP端口是关闭状态,然后Nmap将继续扫描下一个目标UDP端口。

由于很难识别UDP端口是否实际开放,所以与其他各种基于TCP的扫描相比,UDP扫描往往非常慢(在连接良好的情况下,仍可能要20分钟才能扫描完前1000个端口);基于前述原因,在运行UDP扫描时,通常可以启用--top-ports <number>,例如,我们可以使用nmap -sU ——top-ports 20 <target>扫描前20个最常用的UDP端口,这样就能够获得一个更可接受的扫描时间。

当扫描不常用的UDP端口时,Nmap通常会发送完全空的请求——发送原始UDP数据包;对于通常由知名服务所占用的UDP端口(常用UDP端口),Nmap将转而发送特定于协议的数据包(比如53端口是运行dns服务的标准UDP端口,在对53端口进行探测时,Nmap会发送dns数据包),这更有可能得到目标的响应,从而能得出更准确的结果。

Nmap不常见的端口扫描类型:NULL, FIN和Xmas扫描

NULL, FIN和Xmas扫描并不是很常用的扫描类型(这三种扫描类型都是基于TCP的),所以我们在此仅作简单介绍;这三种扫描是相互关联的,它们往往比SYN隐形扫描更加隐蔽。

TCP Null扫描

顾名思义,NULL扫描(-sN)在发送TCP请求时不会设置任何标志位。

如果此时目标端口是关闭的,那么目标主机应该响应一个设置了RST标志的数据包。

image

TCP FIN扫描

FIN扫描(-sF)的工作方式与NULL扫描几乎相同,但是,FIN扫描不会发送一个完全空的数据包,而是发送一个带有FIN标志的数据包(FIN标志可用于关闭正在活动的TCP连接);

同样,如果此时目标端口是关闭状态,Nmap会期望得到一个设置了RST标志的数据包响应。

image

TCP Xmas扫描

与NULL扫描、FIN扫描类似,Xmas扫描(-sX)会发送一个格式错误的TCP数据包。

如果此时目标端口是关闭状态,Nmap会期望得到一个设置了RST标志的响应数据包。

Xmas扫描被称为圣诞(xmas的含义为圣诞)扫描,因为Xmas扫描所发送的TCP数据包设置了PSH标志(PSH标志用于指示发送方应该尽快将数据发送给接收方,而不是等待缓冲区填满再发送。)、URG标志(URG标志指示数据包中包含紧急数据,这通常意味着这些数据应该被优先处理。)和FIN标志,当我们使用Wireshark进行数据包捕获时——相关的捕获结果看起来就像一棵闪烁的圣诞树。

image

使用以上三种扫描方式来探测一个开放端口,那么预期可得到的响应情况是相同的——如果目标端口是开放的,则目标端口不会对以上三种扫描所发送的畸形数据包进行响应;

不幸的是(就像开放的UDP端口一样),目标端口还可能正被防火墙所保护(这也是一种预期的情况),因此,NULL, FIN和Xmas扫描往往会将目标端口识别为open|filtered(开放|过滤)状态、closed(关闭)状态或者filtered(过滤)状态;

如果一个端口被以上三种扫描之一识别为filtered(过滤)状态,那么通常是因为目标已经响应了一个ICMP不可达数据包。

(结论:三种扫描方式没有接收到目标端口的响应会将目标端口识别为open|filtered(开放|过滤)状态;收到目标端口一个设置了RST标志的响应数据包会将目标端口识别为closed(关闭)状态;收到目标端口响应的一个ICMP不可达数据包会将目标端口识别为filtered(过滤)状态)

ICMP网络扫描

工作原理:通过发送给范围内的每个IP地址发送ICMP报文来确认主机存活状态。

为了探测目标主机存活情况,我们可以使用Nmap执行 ICMP 网络扫描(也就是ping扫描),在ping扫描中,Nmap会向指定网络范围内的每个IP地址发送 ICMP 报文,当接收到响应时,Nmap则会将发出响应的IP地址标记为活动主机。执行ping扫描得到的结果并不总是准确的,但是它仍然可以提供一些参考信息。

在Ping扫描中,如何确认目标主机在线:

  • 当ping扫描发送TCP ACK报文到目标机80端口时,存活主机可能会以TCP RST报文作为响应;
  • 当ping扫描发送ICMP echo 请求到目标机时,存活主机可能会作出一个正常的Ping应答(CMP Echo reply);
  • 当ping扫描发送ICMP时间戳请求到目标机时,存活主机可能会返回当前系统时间;(ICMP时间戳请求允许一个系统向另一个系统查询当前的时间,如果目标主机返回了时间,则说明目标主机是活动的)
  • 当ping扫描发送TCP SYN报文到目标机的443端口时,存活主机可能会以TCP SYN+ACK报文或者RST报文作为响应。

tips:使用-sn参数开关的ping扫描会默认发送四种不同类型的数据包来探测目标主机是否在线,只要收到其中一个数据包的回复,那就证明目标机是开启的;使用四种不同类型的数据包可以避免因防火墙阻塞或丢包造成的探测错误。

标签:UDP,探索,Nmap,端口,扫描,笔记,TCP,数据包
From: https://www.cnblogs.com/handsomexuejian/p/18303516

相关文章

  • 数据结构学习笔记——线性表
    链表1.单链表链表的插入:    (1)需要知道插入位置的前驱结点(从表头顺序遍历)    (2)先修改要插入的结点(新结点)的指针    (3)再修改前驱结点的指针链表的删除:    (1)要知道删除结点的前驱结点(从表头顺序遍历)    (2)只需要修改前驱结点的指......
  • 支配树学习笔记
    先抛出一个问题:给一个有向图,问从\(1\)节点出发,求每个节点的受支配集。这里,支配的定义为:若从\(1\)结点出发到\(v\)节点的所有路径中,都必须经过\(u\)节点,则称\(u\)支配\(v\)。那么受支配集意思就是对于\(v\)点满足条件的\(u\)点的集合。那么根据支配的定义,我们可以......
  • 深入探索 Vue 3 组合式 API:高效管理响应式状态与跨组件通信
    随着Vue3的发布,组合式API(CompositionAPI)引入了更灵活、更强大的状态管理和逻辑复用方式。本文将深入探讨如何使用组合式API管理响应式状态和实现跨组件通信,并通过具体的代码示例展示其应用场景。一、组合式API简介组合式API是Vue3中的一种新的API风格,它通过......
  • 【文化课学习笔记】【物理】动量
    【物理】动量冲量基础概念定义力在时间上的积累。冲量一般用字母\(I\)表示。公式冲量\(I\)的表达式如下:\[I=F\cdott\]由于\(F\)的单位是\(\puN\),\(t\)的单位是\(s\),所以冲量的单位是\(\pu{N*s}\)。根据表达式可知,冲量是矢量,方向与\(F\)相同。注意:冲......
  • UE4材质笔记
    常用节点:添加贴图:TextureSample(贴图采样)常量数字:Constant(数字)Vector或长按数字并点击左键乘法:Multiply或长按M并点击左键常用插值:Lerp或长按L并点击左键加法:Add或者长按A键并点击左键减法:Subtract除法:Divide或者长按D键并点击左键1-x:搜索1-或者oneminus或者长按O键并点击左键绝......
  • 探索GraphRAG:构建高效的知识图谱索引与查询引擎
    GraphRAG系统简介GraphRAG是一个基于图的检索增强生成系统,它通过索引文本数据,然后使用这些索引数据来回答有关文档的问题。系统的核心在于其索引管道和查询引擎,它们共同工作,以提供快速且准确的信息检索服务。环境准备在开始之前,请确保你的开发环境中已安装Python3.10至3......
  • 探索 GraphRAG:图结构与生成式模型的融合
    在当今数据驱动的时代,处理和理解复杂的图结构数据成为了一项重要的任务。GraphRAG(GraphRetrieval-AugmentedGeneration)作为一种新兴的技术,为解决图相关的问题提供了创新的思路和方法。一、GraphRAG简介GraphRAG是一种结合了图结构数据和生成式模型的技术框架。它旨在......
  • 大数据实训第七天笔记
    打包Mapreduce代码以及自定义类型打包wordCount类使用自定义的类型进行mapreduce计算打包wordCount类使用maven的assembly:assumbly插件会生成如下的target打包文件,选择下方的mapreduce_test-1.0-SNAPSHOT-jar-with-dependencies.jar,这是包含依赖文件的jar包,将其......
  • leetcode刷题笔记
    11妙用数据结构11.2数组448找到所有数组中消失的数字//方法1//1.使用一个数组的下标记录每个对应数字出现的次数//2.遍历数组,根据值为0的元素所在的下标确定没有出现过的数字std::vector<int>findDisappearedNumbers(std::vector<int>&nums){std::vector<in......
  • NPA论文阅读笔记
    NPA:NeuralNewsRecommendationwithPersonalizedAttention论文阅读笔记这个又是一篇很老但是很经典的论文,这里来读一下Abstract现存的问题:​ 不同的用户通常有不同的兴趣爱好,同一用户也可能有不同的兴趣爱好。因此,不同的用户点击同一篇新闻时可能会关注不同的方面。提出......