[ 络安全]诸神之眼–Nmap的使用

文章目录

  • Nmap
    • Nmap下载
      • windows下下载
      • linux下下载
    • 目标说明
      • CIDR
        • 概念
        • Nmap通过CIDR进行扫描
        • 域名/IP扫描
          • 单个域名/IP扫描
          • 多个域名/IP扫描
        • 范围型域名/IP扫描
        • 从文本中获取扫描(import list)
        • 随即扫描(import ramdom)
        • 排除某些主机/ 络的扫描(exclude)
        • 排除某些主机/ 络的扫描(从文件中读取,excludefile)
    • 主机发现
      • 主机发现方法
        • 1.ping命令
        • 2.Nmap指令
          • 原理
        • 列表扫描(scan list)
        • ping扫描(scan ping)
        • 高强度扫描(无ping)
        • 发送SYN 文(report SYN)
        • 发送ACK 文(report ACK)
          • 存在SYN和ACK探测的原因
        • UDP扫描(report UDP)
        • ICMP 文(report ICMP)
        • ARP 文请求(ARP)
        • 发送RST数据包(default rst ratelimit)
        • Nmap扫描时不解析域名(not reverse dns)
        • Nmap扫描时为全部结果解析域名(reverse all dns)
        • 本地dns服务器解析(system dns)
        • 指定dns服务器进行解析(dns servers)
        • 路由追踪(trace route)
    • 端口扫描基础
      • 端口扫描
        • 单个端口扫描
        • 多个端口扫描
        • 范围型端口扫描
        • Nmap所识别的6个端口状态
        • 扫描相关状态的端口
          • 扫描open状态的端口
          • 扫描closed状态的端口
          • 扫描filtered状态的端口
          • 扫描open/unfiltered状态的端口
          • 扫描closed/unfiltered状态的端口
        • 设置Nmap扫描协议时的端口
        • 设置Nmap扫描的协议
        • 设置Nmap协议的模糊扫描(GOB)
        • Nmap扫描所有端口(1-65535)
        • Nmap从指定端口开始扫描(top port)
      • 端口扫描技术
          • Nmap TCP SYN扫描(SCAN SYN)
          • Nmap TCP connect扫描(scan TCP)
            • 采用SYN扫描而不是connect扫描
          • UDP扫描(scan UDP)
        • TCP Null,Fin,Xmas的扫描
          • TCP Null扫描(scan null)
        • NmapTCP ACK扫描(scan ACK)
          • TCP ACK扫描的作用:
        • TCP窗口扫描(scan windows)
        • TCP Maimon扫描(scab Maimon)
        • 特定的TCP扫描(scanflags)
        • TCP端口盲扫描(scan ignore)
        • IP协议扫描(sO operation)
        • FTP弹跳扫描(bump)
        • Nmap返回数据包错误信息(reason)
    • 端口说明和扫描顺序
        • 指定端口扫描
        • 快速端口扫描(fast)
        • 顺序话端口扫描
    • 服务和版本探测
        • Nmap版本探测(scan version)
        • Nmap版本探测所有的端口(scan all ports)
        • Nmap设置版本扫描强度(scan version intensity)
        • Nmap轻量级版本扫描(version light)
        • Nmap依次版本探测(version all)
        • Nmap追踪版本扫描(version trace)
        • Nmap RPC协议扫描(scan RPC)
    • 操作系统探测
        • Nmap启动操作系统检测(os scan)
        • Nmap针对制定目标进行检测(os scan limit)
        • Nmap猜测启动操作系统(os scan guess)
    • 时间和性能
        • Nmap 并行扫描组(–host-group)
          • Nmap最小并行扫描组
          • Nmap最大并行扫描组
        • Nmap并行扫描数量(–parallelism)
          • Nmap最小并行扫描数量
          • Nmap最大并行扫描数量
        • Nmap探测 文超时(–rrt-timeout)
          • Nmap 文最大超时时间设置
          • Nmap 文最小超时时间设置
          • 初始化Nmap 文超时时间
        • Nmap放弃扫描低速目标主机(需要长时间扫描的主机,– host-time)
        • Nmap探测 文发 时间间隔(–scan-delay)
          • Nmap探测 文发 时间间隔
          • Nmap最大探测 文发 时间间隔
        • 设置最大重新扫描次数(retry)
        • 设置发包数目(rate)
          • 设置最小发包数目
          • 设置最大发包数目
        • Nmap设置 文时间模板(time)
        • Nmap获取进行Exmouth扫描
          • 概述
        • Nmap发送指定数据包(scanfile)
          • 发送ACKPSH数据包
          • Nmap-跳过第一次ping尝试
        • Nmap 数据包追踪(package trace)
    • 防火墙/IDS躲避和哄骗
        • Nmap 文分包(mtu)
        • Nmap诱饵隐蔽扫描(-D RND:)
        • Nmap IP源地址哄骗(-S)
        • Nmap指定 络接口(-e)
        • Nmap源端口哄骗(–source-port)
        • Nmap设置发送 文数据大小(–data-length)
        • Nmap 设置IPv4 文的time-to-live存活时间(–ttl)
        • Nmap主机顺序随机排序(–randomize-host)
          • Nmap MAC地址哄骗(–sproof-mac)
      • Nmap生成随机行为,并执行(badsum)
    • 输出
      • Nmap输出格式
        • txt形式输出扫描结果(oN)
        • xml形式输出扫描结果(xml)
        • kidding文本形式输出扫描结果(oS)
        • grep形式输出扫描结果(oG)
        • 所有形式输出扫描结果(all)
        • **细节和调试选项**
          • Nmap提高输出信息详细度(v)
          • Nmap Deubug模式提高调试级别(debug)
          • Nmao追踪包(package trace)
          • Nmap本机接口和路由举例(iflist)
        • 其它输出选项
          • Nmap 防止输出文件覆盖(–append-output)
          • Nmap继续扫面之前中断的内容
          • 将XSL转换为XML
          • 不将XSL转换为XML
    • 其它选项
      • Nmap启用ipv6进行扫描
      • Nmap高强度(强烈)扫描
      • 服务指纹
        • 概念
        • Nmap获取服务指纹的方式
        • Nmap获取服务指纹
          • 识别目标机器的服务信息
          • 侵略性探测
      • Nmap从文件中获取数据(datadir)
    • 卡选择(interface)
      • 概念
        • Nmap通过以太 帧发送(send eth)
        • Nmap通过IP发送(send IP)
        • Nmap 卡模式(interface acitve)
      • Nmap假定用户具有组否的权限
      • 定期扫描任务(–start-everytime)
      • Nmap打印相关版本信息(version)
      • Nmap打印帮助信息(help)
    • 实例
    • NSE脚本
      • 概念
      • Nmap使用NES脚本
        • NSE使用
          • NSE分类使用
      • NSE更新
      • NES脚本类别
        • NSE使用
          • NSE分类使用
      • NSE更新
      • NES脚本类别

Nmap

Nmap下载

windows下下载

https://nmap.org/

linux下下载

sudo apt-get install nmap

目标说明

除了选项,其他所有出现在Nmap命令行上的都将被视为对目标主机的说明。最简单的情况是指定一个目标的IP地址或者主机名

例:’nmap 192.168.0.*”

CIDR

概念

无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配IP地址以及在互联 上有效地路由IP数据包的对IP地址进行归类的方法

Nmap通过CIDR进行扫描

又是你希望扫描整个 络的相邻主机,为此,Nmap支持CIDR风格,你可以附加一个/(numbit)在一个IP地址或者主机名后面,Nmap将会扫描所有和该参考IP地址具有(必须是8的倍数,这与IP地址的类别有关,所允许的最小值是/1,这将会扫描半个互联 。最大值是/32,这将会扫描该主机或IP地址,因为所有的比特都固定了)相同比特的所有IP地址和主机,例:将会扫描(二进制格式1100000 10101000 00000001 00000000)和(二进制格式11000000 10101000 00000001 11111111)之间的256台主机

假设的IP地址是,那么将会扫描和之间的65536个IP地址

IPv6地址只能用规范的IPv6地址或主机名指定。 CIDR 和八位字节范围不支持IPv6,因为它们对于IPv6几乎没什么用

域名/IP扫描

单个域名/IP扫描

嗅探目标端口服务

多个域名/IP扫描

嗅探目标端口服务

范围型域名/IP扫描

嗅探目标端口服务

从文本中获取扫描(import list)

(从列表中输入)

例子:

ip.txt中内容:

114.114.114.114
45.32.33.156

cmd指令:nmap -iL ip.txt

随即扫描(import ramdom)

对于互联 范围内的调查和研究, 您也许想随机地选择目标

如果在某个雨天的下午,你觉得实在无聊,可以试试这个指令:

排除某些主机/ 络的扫描(exclude)

如果在您指定的扫描范围有一些主机或 络不是您的目标, 那就用该选项加上以逗 分隔的列表排除它们

排除某些主机/ 络的扫描(从文件中读取,excludefile)

主机发现

任何 络探测任务的最初几个步骤之一就是把一组IP范围(有时该范围是巨大的)缩小为 一列活动的或者您感兴趣的主机,主机发现有时候也叫做__ping扫描__,但它远远超越用世人皆知的ping工具发送简单的ICMP回声请求 文

用户完全可以通过使用列表扫描()或者 通过关闭ping ()跳过ping的步骤,也可以使用多个端口把TCP SYN/ACK,UDP和ICMP 任意组合起来玩一玩。这些探测的目的是获得响应__以显示某个IP地址是否是活动的__(正在被某 主机或者 络设备使用)。 在许多 络上,在给定的时间,往往只有小部分的IP地址是活动的

如果没有给出主机发现的选项,Nmap 就发送一个TCP ACK 文到80端口和一个ICMP回声请求到每台目标机器。

选项(用于选择 ping的类型)可以被结合使用。

您可以通过使用不同的TCP端口/标志位和ICMP码发送许多探测 文来增加穿透防守严密的防火墙的机会。另外要注意的是即使您指定了其它 选项,ARP发现()对于局域 上的 目标而言是默认行为,因为它总是更快更有效

主机发现方法

1.ping命令

使用ping命令“ping ip”进行探测,但是如果一个局域 囊括的主机设备很多的情况下,手工测试就显得很费劲了

2.Nmap指令

原理

CIDR(Classless Inter-Domain Routing,无类别跨域路由),可以款苏表示一个 络

或者

列表扫描(scan list)

列表扫描是主机发现的退化形式,它仅仅列出指定 络上的每台主机, 不发送任何 文到目标主机

默认情况下,Nmap仍然对主机进行反向域名解析以获取 它们的名字

ping扫描(scan ping)

该选项告诉Nmap仅仅 进行ping扫描 (主机发现),然后打印出对扫描做出响应的那些主机。 没有进一步的测试 (如端口扫描或者操作系统探测)

常常有人称它为 地毯式ping,它比ping广播地址更可靠,因为许多主机对广播请求不响应。

-sP选项可以和除-P0之外的任何发现探测类型-P* 选项结合使用以达到更大的灵活性

一旦使用了任何探测类型和端口选项,默认的探测(ACK和回应请求)就被覆盖了.当防守严密的防火墙位于运行Nmap的源主机和目标 络之间时, 推荐使用那些高级选项。否则,当防火墙捕获并丢弃探测包或者响应包时,一些主机就不能被探测到

高强度扫描(无ping)

-P0的第二个字符是数字0而不是字母O

(无ping)

进行高强度的扫描时确定正在运行的机器

默认情况下,Nmap只对正在运行的主机进行高强度的探测如 端口扫描§,版本探测(v),或者操作系统探测(o)

用禁止 主机发现会使Nmap对每一个指定的目标IP地址 进行所要求的扫描。所以如果在命令行指定一个B类目标地址空间(/16), 所有 65,536 个IP地址都会被扫描。 。 和列表扫描一样,跳过正常的主机发现,但不是打印一个目标列表, 而是继续执行所要求的功能,就好像每个IP都是活动的

发送SYN 文(report SYN)

(TCP SYN Ping)

该选项发送一个设置了SYN标志位的空TCP 文

默认目的端口为80 (可以通过改变文件中的DEFAULT-TCP-PROBE-PORT值进行配置),不同的端口也可以作为选项指定。 甚至可以指定一个以逗 分隔的端口列表(如 ), 在这种情况下,每个端口会被并发地扫描。

SYN标志位告诉对方您正试图建立一个连接。 通常目标端口是关闭的,一个RST (复位) 包会发回来。 如果碰巧端口是开放的,目标会进行TCP三步握手的第二步,回应 一个SYN/ACK TCP 文。然后运行Nmap的机器则会扼杀这个正在建立的连接, 发送一个RST而非ACK 文,否则,一个完全的连接将会建立。 RST 文是运行Nmap的机器而不是Nmap本身响应的,因为它对收到 的SYN/ACK感到很意外。

Nmap并不关心端口开放还是关闭。 无论RST还是SYN/ACK响应都告诉Nmap该主机正在运行。

在UNIX机器上,通常只有特权用户 能否发送和接收 原始的TCP 文。因此作为一个变通的方法,对于非特权用户, Nmap会为每个目标主机进行系统调用connect(),它也会发送一个SYN 文来尝试建立连接。如果connect()迅速返回成功或者一个ECONNREFUSED 失败,下面的TCP堆栈一定已经收到了一个SYN/ACK或者RST,该主机将被 标志位为在运行。 如果连接超时了,该主机就标志位为down掉了。这种方法也用于IPv6 连接,因为Nmap目前还不支持原始的IPv6 文。

发送ACK 文(report ACK)

(TCP ACK Ping)

TCP ACK ping和刚才讨论的SYN ping相当类似。 ACK 文表示确认一个建立连接的尝试,但该连接尚未完全建立。 所以远程主机应该总是回应一个RST 文。

选项使用和SYN探测相同的默认端口(80),也可以 用相同的格式指定目标端口列表。如果非特权用户尝试该功能, 或者指定的是IPv6目标,前面说过的connect()方法将被使用。 这个方法并不完美,因为它实际上发送的是SYN 文,而不是ACK 文

存在SYN和ACK探测的原因
  1. 提供SYN和ACK两种ping探测的原因是使通过防火墙的机会尽可能大许多管理员会配置他们的路由器或者其它简单的防火墙来封锁SYN 文,除非 连接目标是那些公开的服务器像公司 站或者邮件服务器。 这可以阻止其它进入组织的连接,同时也允许用户访问互联 。 这种无状态的方法几乎不占用防火墙/路由器的资源,因而被硬件和软件过滤器 广泛支持。Linux Netfilter/iptables 防火墙软件提供方便的 选项来实现这种无状态的方法。当这样的无状态防火墙规则存在时,发送到关闭目标端口的SYN ping探测 () 很可能被封锁。这种情况下,ACK探测格外有闪光点,因为它正好利用了 这样的规则。

UDP扫描(report UDP)

(UDP Ping)

还有一个主机发现的选项是UDP ping,它发送一个空的(除非指定了 UDP 文到给定的端口

端口列表的格式和前面讨论过的(SYN)和(ACK)选项还是一样。 如果不指定端口,默认是31338。该默认值可以通过在编译时改变文件中的 DEFAULT-UDP-PROBE-PORT值进行配置。默认使用这样一个奇怪的端口是因为对开放端口 进行这种扫描一般都不受欢迎。

如果目标机器的端口是关闭的,UDP探测应该马上得到一个ICMP端口无法到达的回应 文。 这对于Nmap意味着该机器正在运行。 许多其它类型的ICMP错误,像主机/ 络无法到达或者TTL(Time To Live,存活时间)超时则表示down掉的或者不可到达的主机。UDP扫描没有回应也被这样解释。如果到达一个开放的端口,大部分服务仅仅忽略这个空 文而不做任何回应。这就是为什么默认探测端口是31338这样一个 极不可能被使用的端口。少数服务如chargen会响应一个空的UDP 文, 从而向Nmap表明该机器正在运行。

该扫描类型的主要优势是它可以穿越只过滤TCP的防火墙和过滤器。 例如,一个Linksys BEFW11S4无线宽带路由器。默认情况下, 该设备对外的 卡过滤所有TCP端口,但UDP探测仍然会引发一个端口不可到达的消息,从而暴露了它自己。

ICMP 文(report ICMP)

(ICMP Ping Types)

Nmap也能发送世人皆知的ping程序所发送的 文

Nmap发送一个ICMP type 8 (回声请求) 文到目标IP地址, 期待从运行的主机得到一个type 0 (回声响应) 文。 对于 络探索者而言,不幸的是,许多主机和 防火墙现在封锁这些 文,而不是按期望的那样响应。因此,仅仅ICMP扫描对于互联 上的目标通常是不够的。 但对于系统管理员监视一个内部 络,它们可能是实际有效的途径。 使用选项打开该回声请求功能。

虽然回声请求是标准的ICMP ping查询, Nmap并不止于此。ICMP标准 (RFC 792)还规范了时间戳请求,信息请求 request,和地址掩码请求,它们的代码分别是13,15和17。 虽然这些查询的表面目的是获取信息如地址掩码和当前时间, 它们也可以很容易地用于主机发现。 很简单,回应的系统就是在运行的系统。Nmap目前没有实现信息请求 文, 因为它们还没有被广泛支持。RFC 1122 坚持 “主机不应该实现这些消息”。 时间戳和地址掩码查询可以分别用和选项发送。 **时间戳响应(ICMP代码14)或者地址掩码响应(代码18)**表示主机在运行。 当管理员特别封锁了回声请求 文而忘了其它ICMP查询可能用于 相同目的时,这两个查询可能很有价值。

ARP 文请求(ARP)

(ARP Ping)

最常见的Nmap使用场景之一是扫描一个以太局域 。 在大部分局域 上,特别是那些使用基于 RFC1918私有地址范围的 络,在一个给定的时间绝大部分 IP地址都是不使用的。 当Nmap试图发送一个原始IP 文如ICMP回声请求时, 操作系统必须确定对应于目标IP的硬件 地址(ARP),这样它才能把以太帧送往正确的地址。 这一般比较慢而且会有些问题,因为操作系统设计者认为一般不会在短时间内 对没有运行的机器作几百万次的ARP请求。

当进行ARP扫描时,Nmap用它优化的算法管理ARP请求。 当它收到响应时, Nmap甚至不需要担心基于IP的ping 文,既然它已经知道该主机正在运行了。 这使得ARP扫描比基于IP的扫描更快更可靠。 所以默认情况下,如果Nmap发现目标主机就在它所在的局域 上,它会进行ARP扫描。 即使指定了不同的ping类型(如 或者 ) ,Nmap也会对任何相同局域 上的目标机使用ARP。

如果您真的不想要ARP扫描,指定 。

发送RST数据包(default rst ratelimit)

Nmap扫描时不解析域名(not reverse dns)

(不用域名解析)

告诉Nmap 永不对它发现的活动IP地址进行反向域名解析

既然DNS解析一般比较慢,不解析域名可以让扫描更快些

Nmap扫描时为全部结果解析域名(reverse all dns)

(为所有目标解析域名)

告诉Nmap 永远 对目标IP地址作反向域名解析

一般只有当发现机器正在运行时才进行这项操作

本地dns服务器解析(system dns)

例子:

指定dns服务器进行解析(dns servers)

使用dns服务器解析域名

例子:

8.8.8.8 是google的dns服务解析器

?

默认情况下,Nmap通过直接发送查询到您的主机上配置的域名服务器 来解析域名。为了提高性能,许多请求 (一般几十个 ) 并发执行

如果您希望使用系统自带(–system-dns)的解析器,就指定该选项 (通过getnameinfo()调用一次解析一个IP)。除非Nmap的DNS解析代码有bug, 一般不使用该选项,因为它慢多了。系统解析器总是用于IPv6扫描。

路由追踪(trace route)

端口扫描基础

这个简单的命令扫描主机**上的超过 1660个TCP端口 。

许多传统的端口扫描器只列出所有端口是开放还是关闭的, Nmap的信息粒度比它们要细得多。 它把端口分成六个状态: (开放的), (关闭的),(被过滤的), (未被过滤的), ,或者 。

这些状态并非端口本身的性质,而是描述Nmap怎样看待它们。例如, 对于同样的目标机器的135/tcp端口,从同 络扫描显示它是开放的,而跨 络作完全相同的扫描则可能显示它是 (被过滤的)

端口扫描

单个端口扫描

域名/IP` 扫描指定的端口

多个端口扫描

域名/IP ` 扫描指定的多个端口

范围型端口扫描

域名/IP`

例子:

Nmap所识别的6个端口状态

端口state解析 说明
–open 端口属于开放状态
–closed 端口属于关闭状态
–filtered 端口处于过滤状态,无法收到数据包,返回状态
–open/unfiltered 端口属于开放状态或者是未过滤状态
–closed/unfiltered 端口属于关闭/1状态或者是未过滤状态
  • open(开放的)

    应用程序正在该端口接收TCP 连接或者UDP 文。发现这一点常常是端口扫描 的主要目标。安全意识强的人们知道每个开放的端口都是攻击的入口。攻击者或者入侵测试者想要发现开放的端口。 而管理员则试图关闭它们或者用防火墙保护它们以免妨碍了合法用户。 非安全扫描可能对开放的端口也感兴趣,因为它们显示了 络上那些服务可供使用。

  • closed(关闭的)

    关闭的端口对于Nmap也是可访问的(它接受Nmap的探测 文并作出响应), 但没有应用程序在其上监听。 它们可以显示该IP地址上(主机发现,或者ping扫描)的主机正在运行up 也对部分操作系统探测有所帮助。 因为关闭的关口是可访问的,也许过会儿值得再扫描一下,可能一些又开放了。 系统管理员可能会考虑用防火墙封锁这样的端口。 那样他们就会被显示为被过滤的状态,下面讨论。

  • filtered(被过滤的)

    由于包过滤阻止探测 文到达端口, Nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备路由器规则 或者主机上的软件防火墙。这样的端口让攻击者感觉很挫折,因为它们几乎不提供 任何信息。有时候它们响应ICMP错误消息如类型3代码13 (无法到达目标: 通信被管理员禁止),但更普遍的是过滤器只是丢弃探测帧, 不做任何响应。 这迫使Nmap重试若干次以访万一探测包是由于 络阻塞丢弃的。 这使得扫描速度明显变慢。

  • unfiltered(未被过滤的)

    未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。 只有用于映射防火墙规则集的ACK扫描才会把端口分类到这种状态。 用其它类型的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以帮助确定 端口是否开放。

  • open|filtered(开放或者被过滤的)

    当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。开放的端口不响应就是一个例子。没有响应也可能意味着 文过滤器丢弃 了探测 文或者它引发的任何响应。因此Nmap无法确定该端口是开放的还是被过滤的。 UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类。

  • closed|filtered(关闭或者被过滤的)

    该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中

扫描相关状态的端口

扫描open状态的端口
扫描closed状态的端口
扫描filtered状态的端口
扫描open/unfiltered状态的端口
扫描closed/unfiltered状态的端口

设置Nmap扫描协议时的端口

例子:

设置Nmap扫描的协议

  • PO1 ICMP协议
  • PO2 IGMP协议
  • PO4 IP协议

或者

设置Nmap协议的模糊扫描(GOB)

Nmap扫描所有端口(1-65535)

Nmap从指定端口开始扫描(top port)

端口扫描技术

? 没有经验的用户和刚入门者总是用默认的SYN扫描解决每个问题。 既然Nmap是免费的,掌握端口扫描的唯一障碍就是知识

大部分扫描类型只对特权用户可用。 这是因为他们发送接收原始 文,这在Unix系统需要root权限。 在Windows上推荐使用administrator账户,但是当WinPcap已经被加载到操作系统时, 非特权用户也可以正常使用Nmap。当Nmap在1997年发布时,需要root权限是一个严重的局限,因为很多用户只有共享的shell账户。现在,世界变了,计算机便宜了,更多人拥有互联 连接 ,桌面UNIX系统 (包括Linux和MAC OS X)很普遍了。Windows版本的Nmap现在也有了,这使它可以运行在更多的桌面上。 由于所有这些原因,用户不再需要用有限的共享shell账户运行Nmap。 这是很幸运的,因为特权选项让Nmap强大得多也灵活得多。

虽然Nmap努力产生正确的结果,但请记住所有结果都是基于目标机器(或者它们前面的防火墙)返回的 文的。。这些主机也许是不值得信任的,它们可能响应以迷惑或误导Nmap的 文。 更普遍的是非RFC兼容的主机以不正确的方式响应Nmap探测。FIN,Null和Xmas扫描 特别容易遇到这个问题。这些是特定扫描类型的问题,因此我们在个别扫描类型里讨论它们。

默认情况下,Nmap执行一个 SYN扫描,但是如果用户没有权限发送原始 文(在UNIX上需要root权限)或者如果指定的是IPv6目标,Nmap调用connect()。 本节列出的扫描中,非特权用户只能执行connect()和ftp bounce扫描

Nmap TCP SYN扫描(SCAN SYN)

(TCP SYN扫描)

SYN扫描作为默认的也是最受欢迎的扫描选项,是有充分理由的(SYN扫描有点):

  1. 它执行得很快,在一个没有入侵防火墙的快速 络上,每秒钟可以扫描数千个 端口

  2. SYN扫描相对来说不张扬,不易被注意到,因为它从来不完成TCP连接。 它也不像Fin/Null/Xmas,Maimon和Idle扫描依赖于特定平台,而可以应对任何兼容的 TCP协议栈。

  3. 它还可以明确可靠地区分open(开放的), closed(关闭的),和filtered(被过滤的) 状态,它常常被称为半开放扫描, 因为它不打开一个完全的TCP连接。它发送一个SYN 文, 就像您真的要打开一个连接,然后等待响应。

    (SYN/ACK表示端口在监听 (开放),而 RST (复位)表示没有监听者。如果数次重发后仍没响应, 该端口就被标记为被过滤。如果收到ICMP不可到达错误 (类型3,代码1,2,3,9,10,或者13),该端口也被标记为被过滤)

Nmap TCP connect扫描(scan TCP)

(TCP connect()扫描)

当SYN扫描不能用时,CP Connect()扫描就是默认的TCP扫描。 当用户没有权限发送原始 文或者扫描IPv6 络时,就是这种情况。 Instead of writing raw packets as most other scan types do,Nmap通过创建connect() 系统调用要求操作系统和目标机以及端口建立连接,而不像其它扫描类型直接发送原始 文

这是和Web浏览器,P2P客户端以及大多数其它 络应用程序用以建立连接一样的高层系统调用。它是叫做Berkeley Sockets API编程接口的一部分。Nmap用该API获得每个连接尝试的状态信息,而不是读取响应的原始 文

采用SYN扫描而不是connect扫描

当SYN扫描可用时,它通常是更好的选择。因为Nmap对高层的 connect()调用比对原始 文控制更少, 所以前者效率较低。原因: 该系统调用完全连接到开放的目标端口而不是像SYN扫描进行半开放的复位。这不仅花更长时间,需要更多 文得到同样信息,目标机也更可能记录下连接

IDS(Instruction Detection System,入侵检测系统)可以捕获两者,但大部分机器没有这样的警 系统。 当Nmap连接,然后不发送数据又关闭连接, 许多普通UNIX系统上的服务会在syslog(系统日志)留下记录,有时候是一条加密的错误消息。 此时,有些真正可怜的服务会崩溃,虽然这不常发生。如果管理员在日志里看到来自同一系统的 一堆连接尝试,她应该知道她的系统被扫描了。

UDP扫描(scan UDP)

(UDP扫描)

虽然互联 上很多流行的服务运行在TCP 协议上,UDP服务也不少。

DNS,SNMP,和DHCP (注册的端口是53,161/162,和67/68)是最常见的三个

它可以和TCP扫描(如 SYN扫描 (-sS))结合使用来同时检查两种协议

UDP扫描发送空的(没有数据)UDP 头到每个目标端口:

  • 如果返回ICMP端口不可到达错误(类型3,代码3), 该端口是closed(关闭的)
  • 其它ICMP不可到达错误(类型3, 代码1,2,9,10,或者13)表明该端口是filtered(被过滤的)
  • 偶尔地,某服务会响应一个UDP 文,证明该端口是open(开放的)
  • 如果几次重试后还没有响应,该端口就被认为是 open|filtered(开放|被过滤的)。 这意味着该端口可能是开放的,也可能包过滤器正在封锁通信

可以用版本扫描(-sV)帮助区分真正的开放端口和被过滤的端口

UDP扫描的巨大挑战是怎样使它更快速:

  1. 开放的和被过滤的端口很少响应,让Nmap超时然后再探测,以防探测帧或者响应丢失。
  2. 关闭的端口常常是更大的问题。 它们一般发回一个ICMP端口无法到达错误。但是不像关闭的TCP端口响应SYN或者Connect 扫描所发送的RST 文,许多主机在默认情况下限制ICMP端口不可到达消息。 Linux和Solaris对此特别严格。例如, Linux 2.4.20内核限制**一秒钟只发送一条目标不可到达消息 **(见net/ipv4/icmp。c)。Nmap探测速率限制并相应地减慢来避免用那些目标机会丢弃的无用 文来阻塞 络。不幸的是,Linux式的一秒钟一个 文的限制使65,536个端口的扫描要花 18小时以上

加速UDP扫描的方法包括并发扫描更多的主机,先只对主要端口进行快速 扫描,从防火墙后面扫描,使用–host-timeout跳过慢速的 主机。

TCP Null,Fin,Xmas的扫描

TCP Null扫描(scan null)

TCP Null信 扫描

TCP Fin信 扫描

TCP Xmas信 扫描

这三种扫描类型 (甚至用 –scanflags 选项的更多类型) 在TCP RFC 中发掘了一个微妙的方法来区分open(开放的)和 closed(关闭的)端口:“如果 [目标]端口状态是关闭的… 进入的不含RST的 文导致一个RST响应。” 接下来讨论不设置SYN,RST,或者ACK位的 文发送到开放端口: “理论上,这不应该发生,如果您确实收到了,丢弃该 文,返回。 ”如果扫描系统遵循该RFC,当端口关闭时,任何不包含SYN,RST,或者ACK位的 文会导致 一个RST返回,而当端口开放时,应该没有任何响应。只要不包含SYN,RST,或者ACK, 任何其它三种(FIN,PSH,and URG)的组合都行。

Nmap有三种扫描类型利用这一点:

  • Null扫描 (-sN)不设置任何标志位(tcp标志头是0)
  • FIN扫描 (-sF)只设置TCP FIN标志位
  • Xmas扫描 (-sX)设置FIN,PSH,和URG标志位

除了探测 文的标志位不同,这三种扫描在行为上完全一致

  • 如果收到一个RST 文,该端口被认为是 closed(关闭的),
  • 没有响应则意味着端口是open|filtered(开放或者被过滤的)
  • 如果收到ICMP不可到达错误(类型 3,代 1,2,3,9,10,或者13),该端口就被标记为 被过滤的
  1. 这些扫描的关键优势是它们能躲

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年10月1日
下一篇 2020年10月1日

相关推荐