Nmap扫描原理及用法详解

本文阅读 11 分钟

1、主机发现原理

使用Nmap进行主机发现时,主要是为了找到存活主机,方便我们进行后续测试。主机发现的原理和我们使用的ping命令类似,发送探测包到目标主机,如果收到回复,那么说明目标主机是开启的。

默认情况下,Nmap会发送四种不同类型的数据包来探测目标主机是否存活: ①ICMP echo request ②a TCP SYN packet to port ③a TCP ACK packet to port ④an ICMP timestamp request 依次发送这四个报文对目标主机进行探测,只要收到其中一个包的回复,目标主机存活。使用四种不同类型的数据包可以避免因防火墙或丢包造成错误判断。

2、主机发现用法

1、-sL(列表扫描):
列出指定网络上的每台主机,不发送任何报文到目标主机。
2、-sP(ping扫描):
进行ping扫描 (主机发现),然后打印出对扫描做出响应的主机。
3、-P0(无ping):
4、-PS(TCP SYN Ping):
发送一个设置了SYN标志位的空TCP报文,默认目的端口为80.
5、-PA(TCP ACK ping):
发送一个设置了ACK标志位的空TCP报文,默认目的端口为80.
6、-PU(UDP Ping):
发送一个空的UDP报文到目的端口,默认端口为31338.
7、-PE; -PP; -PM (ICMP Ping Types)
8、-PR (ARP Ping)
9、-n (不用域名解析)
10、-R (为所有目标解析域名)
11、--system-dns (使用系统域名解析器)

1、端口状态

①open:端口是开放的。 ②closed:端口是关闭的。 ③filtered:端口被防火墙、IDS、IPS等屏蔽,无法确定其状态。 ④unfiltered:端口没有被屏蔽,但其是否开放需要进一步确定。 ⑤open|filtered:端口是开放的或被屏蔽。 ⑥closed|filtered :端口是关闭的或被屏蔽

2、端口扫描原理

进行端口扫描的原理和探测目标主机是否存活的原理类似,或者可以说Nmap进行探测活动的原理都是根据发送探测包之后的响应包的状态来进行判断的。

3、端口扫描用法

1、-sS(TCP SYN扫描)
该方式只发送SYN包到特定的端口,不建立完整的TCP连接,相对比较隐蔽,因此称为半开放扫描。

发送一个SYN包到目标端口:
①收到SYN/ACK回复,判断端口时开放。
②收到RST包,判断端口关闭。
③没有收到回复,判断端口被屏蔽,为Filtered状态。

2、-sT(TCP connect扫描)
在-sS扫描无法使用的情况下,我们才会使用-sT扫描,因为这种方式扫描速度过慢,而且容易在目标主机留下扫描信息。
TCP connect不向服务器发送原始报文,而是通过使用系统网络的API向目标主机发起连接,如果无法连接,说明端口时关闭状态。

3、-sU(UDP扫描)
UDP扫描发送探测包到UDP端口:
①收到回复“ICMP port unreachable”,端口关闭。
②没有收到回复,端口Open|Filtered。

4、-sN、 -sF、 -sX (TCP Null、FIN、Xmas扫描)
因为这三种方式较为隐蔽,因此称为秘密扫描。这三种扫描可以绕过一些无过滤防火墙和报文过滤路由器,但是大部分的IDS可以发现这三种扫描。

发送探测包:
①收到RST回复包,端口关闭。
②没有响应,端口Open|Filtered。
③ICMP不可达,端口Filtered。
因此,这三种扫描是无法完全判断端口是否为Open状态。

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

5、-sA(TCP ACK扫描)
发送ACK包到目标端口:
①收到RST包,端口未被屏蔽
②没有收到RST包,端口被屏蔽。

6、-sW(TCP窗口扫描)
通过检查返回的RST报文的TCP窗口域来判断:
①窗口值为正数:开放。
②窗口值为0:关闭。
不支持-sW扫描的系统将返回所有端口为关闭状态,也就是窗口值为0.
7、-sM(TCP Maimon扫描)
探测报文是FIN/ACK,无论端口开放或者关闭,都响应RST报文。

8、--scanflags(定制的TCP扫描)
可以通过指定任意TCP标志位设计自己的扫描方式。

9、-sI(idle扫描)
对TCP端口进行盲扫,即不从真实IP发送任何数据包到目标端口,而是利用一台zomobie机。

10、-sO(IP协议扫描)
可以确定目标主机支持哪些IP协议(如TCP、ICMP、IGMP等等)

11、-b(FTP bounce扫描)
允许用户连接到FTP服务器,然后可以发送文件到第三方服务器。只要请求FTP服务器轮流发送一个文件到目标主机上的端口,错误消息会描述端口是开放还是关闭的。

12、-P
指定端口号:
例如:nmap -p 22 ip/nmap -p 1-65535 ip/nmap -p 21,22 ip

13、-F(快速扫描)
可以利用--datadir选项指定自己的nmap-services文件 。service文件中保存了所有端口号。

14、-r(不按照随机顺序扫描端口)
默认情况下,Nmap按随机顺序扫描端口,也可以通过-r按照顺序来扫描端口。

1、服务和版本探测原理

主要是为了确认端口对应的服务以及确定服务的版本信息,我们也可以通过此信息去搜索相关的漏洞或者补丁。

服务和版本探测的原理主要如下: ①Nmap只能对Open和Open|Filtered状态的端口进行判断。 ②如果是TCP端口,尝试建立TCP连接,在等待时间内,会接收到目标机发送的Welcome Banner信息,nmap将接收到的Banner与nmap-services-probes中NULL probe中的签名进行对比,查找对应应用程序的名字与版本信息。在nmap-services-probes文件中,我们可以查看Nmap支持的服务。 ③如果通过Welcome Banner无法确定应用程序版本,那么nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将得到的回复包与数据库中的签名进行对比, ④如果反复探测都无法得出具体应用,则打印出应用返回报文,让用户自行判定。 ⑤如果是UDP端口,则使用nmap-services-probes中的探测包进行探测匹配,判断UDP应用服务类型。 ⑥如果探测到应用程序是SSL,那么调用openSSL进一步的侦查运行在SSL上的应用类型。 ⑦如果探测到应用程序是SunRPC,那么调用brute-force RPC grinder进一步探测具体服务。

2、服务和版本探测用法

1、-sV(版本探测)
进行版本探测,也可同时使用-A参数进行全扫描,进行操作系统探测和版本探测。
2、--allports(不为版本探测排除任何端口)
默认情况下,Nmap探测端口会跳过9100TCP端口,可指定--allports扫描所有端口。
3、--version-indensity(设置版本扫描强度)
4、--version-light(打开轻量级模式)
进行版本扫描时,速度会稍快一些,但是识别服务的可能性会略小。
5、--version-all(尝试每个探测)
保证对每个端口都使用报文进行探测。
6、--version-trace(跟踪版本扫描活动)
Nmap打印出正在进行的扫描的详细调试信息。
7、-sR(RPC扫描)
和其他参数结合使用。对所有被发现开放的TCP/UDP端口执行SunRPC程序NULL命令,来确定他们是否为RPC端口,如果是,显示其程序和版本号

1、操作系统探测原理

Nmap使用TCP/IP协议栈指纹来识别不同的操作系统和设备。

具体实现方式如下: ①选择一个open的端口和一个closed的端口,向其发送TCP/UDP/ICMP数据包,根据返回的数据包生成一份系统指纹。 ②将探测生成的指纹与nmap-os-db中指纹进行对比,查找匹配的系统。如果无法匹配,以概率形式列举出可能的系统。

Nmap-os-db文件中包含了大部分已知系统的指纹特征。

2、操作系统探测用法

1、-O (启用操作系统检测)
也可以使用-A来同时启用操作系统检测和版本检测。-A为全扫描。

2、--osscan-limit (针对指定的目标进行操作系统检测)
如果发现一个打开和关闭的TCP端口时,操作系统检测会更有效。采用这个选项,Nmap只对满足这个条件的主机进行操作系统检测,这样可以节约时间,特别在使用-P0扫描多个主机时。这个选项仅在使用-O或-A进行操作系统检测时起作用。

3、--osscan-guess; --fuzzy (推测操作系统检测结果)
当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认进行这种匹配,使用上述任一个选项使得Nmap的推测更加有效。

1、防火墙绕过用法

-f; --mtu <val>: 指定使用分片、指定数据包的MTU.

-D <decoy1,decoy2[,ME],...>: 用一组IP地址掩盖真实地址,其中ME填入自己的IP地址。

-S <IP_Address>: 伪装成其他IP地址

-e <iface>: 使用特定的网络接口

-g/--source-port <portnum>: 使用指定源端口

--data-length <num>: 填充随机数据让数据包长度达到Num。

--ip-options <options>: 使用指定的IP选项来发送数据包。

--ttl <val>: 设置time-to-live时间。

--spoof-mac <mac address/prefix/vendor name>: 伪装MAC地址

--badsum: 使用错误的checksum来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或IDS/IPS)。
本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/sycamorelg/article/details/115616275
-- 展开阅读全文 --
Web安全—逻辑越权漏洞(BAC)
« 上一篇 03-13
Redis底层数据结构--简单动态字符串
下一篇 » 04-10

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复