目录
一、端口扫描原理
1、TCP连接过程
2、端口扫描类型
TCP connect()扫描:
SYN扫描:
NULL扫描:
FIN扫描:
Xmas-Tree扫描:
ACK扫描:
3、端口返回类型
Open:
Closed:
Filtered:
Unfiltered:
Open|Filtered:
Closed|Filtered:
二、Nmap使用
1、主机发现
Ping扫描:-sP
无ping扫描:-P0(数字0)
2、端口扫描方式
时序选项:-T
指定端口扫描范围:-p
3、端口服务识别与探测
版本探测:-sV
全端口探测:--allport
操作系统识别:-O
4、防火墙/IDS逃逸
5、保存和输出
1、主机A向主机B发送TCP连接请求数据包,其中包含主机A的初始序列号seq(A)=x。(其中报文中同步标志位SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x);
2、主机B收到请求后,会发回连接确认数据包。(其中确认报文段中,标识位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含主机B的初始序列号seq(B)=y,以及主机B对主机A初始序列号的确认号ack(B)=seq(A)+1=x+1)
3、主机A收到主机B的确认报文后,还需作出确认,即发送一个序列号seq(A)=x+1;确认号为ack(A)=y+1的报文;
注意:TCP建立连接要进行三次握手,而断开连接要进行四次握手。
端口扫描类似Nmap有十几种,但最核心的为以下几种,其它的都是类似或基于以下扫描方式的。
TCP connect()扫描是建立一个完整的TCP连接(已完成三次握手),这种扫描最为精确,但也最容易被防火墙和IDS检测出来,也会在主机留下日志记录。就和telnet某个端口一样。
SYN扫描(半开放扫描)是稍微隐蔽一些的扫描方式,TCP三次握手包含了SYN,SYN-ACK和ACK三个数据包,SYN扫描仅仅发送初始的SYN数据包给目标主机,如果端口处于开放状态,那么目标主机将返回SYN-ACK数据包,如果端口处于关闭状态,那么目标主机将返回RST数据包,如果数次重发后仍没响应, 该端口就被标记为被过滤。如果收到ICMP不可到达错误 (类型3,代码1,2,3,9,10,或者13),该端口也被标记为被过滤。也就是说SYN扫描,不管目标主机端口是否开放,第三次握手都将会发送RST数据包进行连接断开,此时并没有真正建立连接(三次握手)。
这也是Nmap默认首选的扫描方式,执行速度快,在没有防火墙的网络中,每秒可以扫描数千个端口,且完全兼容任何平台的TCP/IP协议。
也是反向扫描,要更隐蔽一些,但精度低。原理是将一个没有设置标志位的数据发送给TCP端口,在正常的TCP通信中,至少标志位要被设置,但在NULL扫描中,所有的标志位都未设置。根据RFC793协议要求,如果收到了一个没有设置标志位的数据分段,那么接受主机应该丢弃这个分段,并返回一个RST数据包。当向端口发送没有设置标志位的数据包时,如果目标主机端口处于关闭状态,将会返回一个RST数据包,如果目标主机端口处于开放状态,则主机会忽略该数据包,不会返回任何数据包。
Windows系统不遵守RFC793协议(当Windows系统接收到没有设置标志位的数据包时,不管端口是否开放,都将返回RST数据包),因此不能使用NULL扫描来扫描Windows系统。
也是反向扫描,与NULL扫描类似。原理是将一个设置了FIN位的数据包发送给目标主机端口,FIN位指示TCP会话的结束,响应RST数据包则表示端口关闭,没有响应则表示端口开放,与NULL扫描一样,Windwos不遵守此协议规则,因此不能使用此扫描来扫描Windows系统。
也是反向扫描,通过设置FIN,PSH,和URG标志位,就像点亮圣诞树上所有的灯一样。也叫做圣诞树扫描,发送这带有三个标志的数据包,如果收到一个RST报文,该端口被认为是 closed(关闭的),而没有响应则意味着 端口是open|filtered(开放或者被过滤的)。 如果收到ICMP不可到达错误(类型 3,代号 1,2,3,9,10,或者13),该端口就被标记为 被过滤的。Windwos不遵守此协议规则,因此不能使用此扫描来扫描Windows系统。
用于发现防火墙规则,不能判断主机端口是否开放,原理是在正常的TCP操作中,在指定接收主机宣告窗口长度的数据包之后,发送响应数据包(ACK)。在ACK扫描中,使用响应包来发现防火墙的配置信息,如果某个端口被防火墙过滤,那么就没有回来的数据包,如果某个端口没有被防火墙过滤,那么将返回RST数据包,可以通过此扫描了解哪些端口被防火墙过滤和没过滤。
ACK扫描探测报文只设置ACK标志位(除非您使用 --scanflags)。当扫描未被过滤的系统时, open(开放的)和closed(关闭的) 端口 都会返回RST报文。Nmap把它们标记为 unfiltered(未被过滤的),意思是 ACK报文不能到达,但至于它们是open(开放的)或者 closed(关闭的) 无法确定。不响应的端口 或者发送特定的ICMP错误消息(类型3,代号1,2,3,9,10, 或者13)的端口,标记为 filtered(被过滤的)。
Nmap提供了6个端口状态,来帮助我们了解目标:
表示此端口对外开放,是我们希望的结果。
表示此端口已关闭。
表示此端口被防火墙等设备过滤了,不清除端口是否开放。
表示此端口未被过滤,端口可以被访问,但是不能判断端口是否处于开放还是关闭状态。(端口可被访问和端口开放是两个概念,关闭的端口也可以被访问),此状态是采用ACK扫描方式将会返回的结果。
表示此端口是开放或者是被过滤的,出现这种情况建议换种扫描方式。
表示此端口是关闭或者是被过滤的,这种状态只出现在IPID Idle扫描中。
选项 | 解释 |
---|---|
-sP | Ping扫描 |
-P0 | 无Ping扫描 |
-PS | TCP SYN Ping扫描 |
-PA | TCP ACK Ping扫描 |
-PU | UDP Ping扫描 |
-PE;-PP;-PM | ICMP Ping Types扫描 |
-PR | ARP Ping扫描 |
-n | 禁止DNS反向解析 |
-R | 反向解析域名 |
--system-dns | 使用系统域名解析器 |
-sL | 列表扫描 |
-6 | 扫描IPV6地址 |
--traceroute | 路由跟踪 |
-PY | SCTP INIT Ping扫描 |
Ping扫描只进行Ping,然后显示出在线的主机。Ping扫描通过发送一个ICMP回声请求和一个TCP报文到目标端口,如果防火墙设置了禁止Ping则此方式就不能判断主机存活了。
此扫描用于防火墙禁止ping的情况下,可以穿透防火墙。
选项 | 解释 |
---|---|
-T | 时序选项 |
-p | 端口扫描顺序 |
-sS | TCP SYN扫描 |
-sT | TCP 连接扫描 |
-sU | UDP扫描 |
-sN;-sF;-sX | 隐蔽扫描:不适合windows |
-sA | TCP ACK扫描 |
-sW | TCP 窗口扫描 |
-sM | TCP Maimon扫描 |
--scanflags | 自定义TCP扫描 |
-sI | 空闲扫描 |
-sO | IP协议扫描 |
-b | FTP Bounce扫描 |
在Nmap中使用-T(0-5)可以启用时序选项:
-T0(偏执的):非常慢的扫描,用于IDS逃避
-T1(鬼鬼祟祟的):缓慢的扫描,用于IDS逃避
-T2(文雅的):降低速度以降低对带库的消耗,不常用
-T3(普通的):默认,根据目标的反应自动调节时间
-T4(野蛮的):快速扫描,常用扫描方式,需要在很好的网络下进行扫描
-T5(疯狂的):极速扫描,以牺牲精确度来提升扫描速度
指定单个端口:nmap -p 445
指定端口范围:nmap -p 1-65535
-F选项可以通过nmap默认配置的1000个常用端口进行扫描。
选项 | 解释 |
---|---|
-sV | 版本探测 |
--allports | 全端口版本探测 |
--version-intensity | 设置扫描强度 |
--version-light | 轻量级扫描 |
--version-all | 重量级扫描 |
--version-trace | 获取详细版本信息 |
-sR | RPC扫描 |
-O | 探测操作系统类型 |
--osscan-limit | 对指定目标进行操作系统检测 |
--osscan-guess;--fuzzy | 推测系统识别 |
全端口和-p1-65535类似。
-O选项会进行操作系统识别
选项 | 解释 |
---|---|
-f | 报文分段 |
--mtu | 指定偏移大小 |
-D | IP欺骗 |
-sI | 源地址欺骗 |
--soure-port | 源端口欺骗 |
--data-length | 指定发包长度 |
--randomize-hosts | 目标主机随机排序 |
--spoof-mac | MAC地址欺骗
|
选项 | 解释 |
---|---|
-oN | 标志保存 |
-oX | XML保存 |
-oS | 133t保存 |
-oG | Grep保存 |
-oA | 保存所有格式 |