本文内容:

对Wireshark抓取Nmap扫描包的分析

这里目标选择VMWare下的另一台Ununtu18.04虚拟机(IP:192.168.192.137)

img

使用全连接模式(-sT)

通过调用TCP connect()来向目标端口发送连接请求

通过发送SYN数据包请求建立连接,若靶机开启端口则会建立完整的TCP连接

而未开启的端口会返回RST/ACK报文,不会建立完整的TCP连接

这种扫描方式缺点是会留下扫描纪录,而且速度较慢。

img

如果端口是关闭的,则会返回RST/ACK报文断开连接,说明端口是关闭的。

Nmap尝试向目标靶机所有端口发送SYN包

若端口是打开的,返回了SYN,ACK则表明端口开放,然后扫描主机箱目标机发送ACK/RST包断开连接

建立完整的TCP连接如下:

img

扫描结果如下图所示:

img

使用半连接模式(-sS)

本机向靶机发送SYN数据包,靶机开启的端口会出现TCP半连接,通过发送RST包来关闭连接

而未开启的端口会返回RST/ACK报文,不会出现TCP连接

如果没有收到回复,那么判断为该端口被屏蔽(Filtered)

这种扫描方式因为不会建立完整的TCP连接,比较隐蔽,扫描速度也比较快,是Namp默认的扫描方式。

img

对于关闭的端口则返回RST/ACK报文关闭TCP连接

同样对所有的端口尝试进行SYN连接

如果端口是打开的,则会出现半连接,在目标靶机向扫描主机发送SYN应答包后发送RST包来断开TCP连接

img

扫描结果如下:

img

使用TCP Null模式 (-sN)

NULL扫描当主机向靶机一个端口发送的TCP数据包所有标志位都为空

如果目标主机该端口是关的,则返回一个RST数据包,若没有收到说明端口是开放的或者被屏蔽

可以看到nmap尝试向目标所有端口发送标志位全为空的TCP数据包

img

当目标端口是关闭的时候,则会返回RST/ACK包

如果端口是开放的则不会返回信息

img

扫描结果如下:

img

使用FIN扫描模式(-sF)

FIN段负责表示发送端已经没有数据要传输了,希望释放连接

发送一个FIN=1的报文到一个关闭的端口时该报文会被丢掉,并返回一个RST报文

但是当FIN报文到一个活动的端口时,该报文只是被简单的丢掉不回应任何信息

img

Nmap尝试对所有端口发送一个FIN包,对于关闭的端口会返回一个RST/ACK包表示端口是关闭状态

对于开放的端口则会简单丢掉而不会返回RST应答包

img

扫描结果如下图所示:

img

使用XMAS扫描模式(-sX)

Xmas扫描是将数据包中的FIN,PSH,URG标记为on

通过发送这种非常规的数据包来判断目标系统中端口的当前状态

和NULL扫描一样,如果目标主机该端口是关的,则返回一个RST数据包,否则不会回复。

img

可以看到Nmap向目标主机发送大量FIN/PSH/URG包

对于关闭的端口,则会返回RST/ACK包

对于开放或者被屏蔽的端口,则不会有应答消息

img

扫描结果如下:

img

使用UDP扫描模式(-sU)

UDP端口扫描主要是检测靶机的端口是否存在ICMP端口不可达数据包

如果收到回复“ICMP port unreachable”说明对方这一端口是关闭的,否则就说明该端口已经开启或者被屏蔽了

这里由于UDP扫描巨慢,选择1-200号端口进行扫描

img

这里收到的全是ICMP port unreachable报文,说所有的端口都是关闭的或是被屏蔽了

img

扫描结果如下:

img

使用ACK扫描模式(-sA)

当发送给靶机一个ACK报文的时候,如果收到RST包,说明该端口没有被防火墙屏蔽

没有收到RST包,说明被屏蔽

ACK可以利用来扫描防火墙的配置,用它来发现防火墙是否屏蔽某些端口,确定哪些端口是被过滤的

img

经过观察所有的端口返回了RST报文,说明所有的端口没有被屏蔽

img

使用Nmap系统探测模式(-O)

探测原理:

NAMP 带有一个数据库nmap-os-db,它在你安装 NAMP 的时候就会被安装,他其中包含了2600多种操作系统与设备类型

操作系统探测利用的是 IP/TCP 层面上的特征

在 nmap-os-db 里面,每个特征以 Fingerprint 开头,接着是该特征对应的操作系统信息,然后是具体的特征值

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

不同操作系统的TCP/IP方案中可能都有自己的特定方式。Nmap主要是根据这些细节上的差异来判断操作系统的类型的。

下图为:nmap-os-db文件内容:

img

会执行五种不同的测试,每种测试由一个或者多个数据包组成,目标系统对每个数据包作出的响应有助于确定操作系统的类型。

五种不同的测试是:

  1. 序列生成

    序列生成测试由六个数据包组成,这六个包是每隔 100 毫秒分开发送的,且都是 TCP SYN 包。

    每个 TCP SYN 包的结果将有助于 NMAP 确定操作系统的类型。

  2. ICMP回显

    两个有着不同设置的 ICMP 请求包被送到目标系统,由此产生的反应将有助于实现验证操作系统类型。

  3. TCP显式拥塞通知

    当生成许多包通过路由器时会导致其负载变大,这称之为拥塞

    其结果就是系统会变慢以降低拥堵,以便路由器不会发生丢包

    这个包仅为了得到目标系统的响应而发送

    因为不同的操作系统以不同的方式处理这个包,所以返回的特定值可以用来判断操作系统。

  4. TCP

    在这个测试中会发送六个数据包。

    一些带有特定的包设置的包被发送用来到打开的或关闭的端口。结果也将会因为操作系统的不同而不同。

    所有 TCP 包都是以如下不同的标志被发送:

    ①无标志

    ②SYN、FIN、URG 和 PSH

    ③ACK

    ④SYN

    ⑤ACK

    ⑥FIN、PSH 和 URG

  5. UDP

    这个测试由一个被发送给一个关闭的端口的数据包组成。

所有的测试分成五组:
第一组测试包含 SEQ、OPS、WIN、T1。这项测试会发送六个 TCP 包,然后检查响应的各种细节

img

img

第二组测试是 IE,会发送两个不同的 ICMP echo 请求,检测其响应特征

img

第三组测试是 U1,发送一个 UDP 包给一个关闭的端口,然后看下 ICMP 的 port unreachable 回复

img

第四组测试是 ECN,全称是 Explicit Congestion Notification,即“显式拥塞通知”。该测试会发送带 ECN 位的 TCP 请求,比较其响应

img

最后一组是发送六个不同的 TCP 包,这六个 TCP 包的响应结果将对应T2到T7的各项指标,其中 T2-T4 会发给打开的 TCP 端口,T5-T7 会发给关闭的 TCP 端口

img

如果目标系统上的这个端口是关闭的,而且返回一条 ICMP 端口不可达的信息,那么就说明没有防火墙

img

使用nmap -O 192.168.192.138命令对虚拟机进行扫描

img

扫描出目标靶机端口开放情况

img

对于操作系统探测,我这里使用的Ubuntu18.04,Linux版本号为4.15,这里探测结果为4.X,较为准确

不过根据网上的经验,Nmao对于操作系统识别,只能大致识别出类型与大概版本号,对于精确识别是无能为力的