1-1 nmap

1-1 nmap

 

建议使用真实机的nmap进行扫描,如果使用虚拟机中的nmap进行扫描时,网络模式建议使用桥接(如kali虚拟机中自带的nmap),不然会发生一些错误,如在虚拟机NAT模式下跨网段扫描时,发现对方网段主机全部在线,但实际没有。

 

1. nmap原理

 

nmap有各种扫描方式,但原理都是通过构造并发送不同的网络探测包来实现的。

nmap工具执行我们的扫描命令的执行顺序:

  1. 先对目标进行主机扫描

  2. 再对目标进行端口扫描

  3. 最后对目标进行其他扫描

如:nmap -p 1-80 -sS -O 192.168.1.200,先执行-sS,再执行-p 1-80,最后执行-O。

因此有时候可以通过-Pn命令跳过主机发现,直接进入端口扫描阶段。

 

1.1 主机发现技术原理

主机发现是为了发现网段内的活跃主机(活跃主机是指这台主机是运行的),主机发现原理如下表所示。

扫描方式发送报文活跃响应不活跃响应被过滤响应备注
ARP扫描 ARP请求报文 ARP响应报文 超时 不会被过滤 精准
ICMP扫描 ICMPtype=8 code=0type=13 code=0type=17 code=0 ICMPtype=0 code=0type=14 code=0type=18 code=0 超时 超时 可能会被防火墙过滤
端口扫描 TCP SYN TCP SYN+ACK 超时 超时或ICMP type=3 code=3或13 可能会被过滤

由表可知:

  1. ARP扫描是最精准的扫描方式,并且不会被过滤,因此会被强制有限使用。

  2. ICMP扫描是最常见的扫描方式,和ping命令原理一致,但现有很多防火墙和IPS设备会禁用ICMP扫描,使得ICMP主机发现失败。

  3. 端口扫描技术是另一种发现主机的方式,准确且不容易被防火墙过滤,这种方式被经常使用,端口扫描原理见以下。

 

1.2 端口扫描技术原理

端口扫描可以分为TCP端口扫描和UDP端口扫描,由于TCP能够提供更多的协议字段,因此TCP端口扫描更准确,如今的端口扫描技术主要是指TCP端口扫描。

在TCP端口扫描中,探测报文组合不同flags位,不同的flags在端口开放、端口关闭、防火墙过滤时的响应是不一样的,通过区分不同的响应来检测端口的状态,具体如下所示。(tcp flags有syn、ack、rst、fin、psh、urg共6种置位)

扫描方式置为1的TCP Flag开放时响应关闭时响应过滤时响应特征
-sT,TCP全连接扫描 报文1:syn报文2:ack syn+ack,完成3次握手 rst+ack 一般不会被过滤 精准、费时、可能会被日志记录
-sS,TCP半连接扫描 syn syn+ack rst+ack ICMP type=3 code=3、13或超时 精准、快速、无日志记录,最常见且默认的扫描方式
-sA,TCP ack扫描 ack rst rst 不准确、只能判断是否加防火墙,即端口状态filtered或unfiltered 判断防火墙
-sW,TCP window扫描 ack rst,window不为0 rst,window为0 不准确、有的情况下window都为0 判断防火墙
-sM fin+ack 未收到rst rst 不准确  
-sN 无置位 无响应 rst ICMP type=3 code=3或13或超时无响应 不准确,只能判断closed和open|filtered
-sF fin 无响应 rst    
-sX fin+psh+urg 无响应 rst    
-sU,UDP端口扫描 不相关 有UDP响应或无响应 icmp type=3 code=3 ICMP type=3 code=1,2,9,10,13 不准确,通常只能判断closed和open|filtered

由表可知:

  1. -sS扫描最常用,快速、精准,且无日志;-

  2. -sT方式最精准,但有日志记录;

  3. -sA/-sW能够识别是否有防火墙,对于识别windows防火墙非常有效。

 

1.3 其他技术原理

Nmap还包括操作系统指纹识别技术、服务识别技术、防火墙绕过技术以及NSE(Nmap Scripting Engine)脚本引擎。

其原理大致是通过一些签名比对匹配之类的来识别。

 

 

2. 常用参数与命令

 

一条Nmap命令主要由以下几个部分组成:

nmap 主机发现参数 端口扫描参数 其他参数 目标主机(/网段)

 

2.1 主机发现参数

参数描述是否常用
-sL 列表扫描。仅列出指定目标有哪些IP,不进行主机发现 一般
-sn 默认的主机发现方式。组合ARP扫描,ICMP扫描,端口扫描3种技术(表1原理)进行主机发现 常用
-Pn 不进行主机发现,直接进入端口扫描阶段。能绕过ICMP过滤,老版本为-P0。 常用
-PS/-PA/-PU/-PY 分别用TCP SYN/TCP ACK/UDP/SCTP技术进行主机发现。 常用
-PE/-PP/-PM 分别用ICMP ECHO/ICMP TIMESTAMP/ICMP MASK技术进行主机发现。 一般
-PO 使用参数指定的协议(如TCP)对主机进行扫描。 不常用

 

2.2 端口扫描参数

参数描述是否常用
-p 指定端口扫描。格式:-p 21,22,80,3389、-p 1-80等  
-sT/-sS TCP全连接扫描(不隐蔽)/ TCP半连接扫描(隐蔽)。 常用
-sA/-sW TCP ACK/TCP WINDOW扫描,用于确定目标主机是否有开启防火墙。 一般
-sM FIN、ACK同时置位1的扫描。 一般
-sN/-sF/-sX NULL/FIN/XMAS扫描。 一般
-sU UDP扫描。 常用
-sI 盲扫描。 不常用
-sO 协议扫描,用于确定目标主机支持哪些协议。 一般
-sY/-sZ SCTP/COOKIE-ECHO扫描。 不常用
-b FTP代理扫描。 不常用

 

2.3 其他参数

参数描述是否常用
-O OS(操作系统)指纹识别扫描 常用
-A OS指纹识别、服务版本扫描、脚本扫描、traceroute(相当于全面扫描) 常用
-sA/-sW 探测主机是否开启防火墙 常用
-f 使用分片报文扫描目标主机 常用
-sC 使用脚本对目标主机进行安全扫描 一般
-sV 探测主机端口上运行的服务的版本信息 常用
-oN/-oX/-oS/-oG 将扫描结果导出为txt、Xml、Script kIddi3、Grepable格式 一般
-v 显示扫描过程的详情  
-T0~-T5 设置扫描时序  

 

2.4 常用命令

Nmap的一些常见扫描语句如下:

  1. nmap –sn 192.168.1.200/24 //扫描目标网段中有哪些主机是活跃的,可以快速收集到活跃主机。

  2. nmap –Pn –p 80,443,8080 192.168.1.200/24 //快速定位目标网段中的WEB服务器。

  3. nmap –sS –sU –A –v –T4 192.168.1.200 //对目标主机进行完整扫描,包括知名端口的TCP、UDP扫描,操作系统探测,服务探测,常见漏洞探测。

  4. nmap –sS –p 1-65535 –v –T4 192.168.1.200 //对目标主机所有端口进行TCP端口扫描。

  5. nmap –sA/-sW 192.168.1.200 //识别目标主机是否在防火墙之后。

 

 

3. 注意事项

 

1.宏观细节:

  • 如果在同一网段,则无论主机发现参数如何指定,Nmap都使用ARP扫描完成主机发现。

  • 如果没有指定任何参数(如:nmap 192.168.1.1),默认扫描目标主机的1-1000端口。

  • 如果未指定主机发现方式,则使用-sn参数进行主机发现。

  • 如果未指定端口扫描方式,则使用-sS参数进行端口扫描。

 

2. 微观细节:

  • -sW,TCP window扫描。是指发送一个构造好的TCP探测包,看对方TCP响应包里window字段(窗口字段)的内容来判断端口状态,而不是说和Windows系统有关。

  • -T0~-T5 设置的扫描时序详情

    -T0(偏执的) 非常慢的扫描,用于IDS逃避(IDS,入侵检测系统)

    -T1(鬼祟的) 较慢的扫描,用于IDS逃避

    -T2(文雅的) 降低速度以降低对宽带的消耗,一般不常用

    -T3(普通的) 默认,根据目标的反应自动调整时间

    -T4(野蛮的) 快速扫描,常用的扫描方式,网络条件好时用,请求可能会淹没目标

    -T5(疯狂的) 极速扫描,以牺牲准确度来提升扫描速度

 

3. Nmap通过探测将端口划分为6个状态

  1. open:端口是开放的。

  2. closed:端口是关闭的。

  3. filtered:端口有防火墙IDS/IPS过滤,无法确定其状态。

  4. unfiltered:端口没有过滤,但是否开放需要进一步确定。

  5. open|filtered:端口是开放的或有过滤。

  6. closed|filtered :端口是关闭的或有过滤。

posted @ 2020-09-20 12:23  小约翰呼噜噜  阅读(305)  评论(0编辑  收藏  举报