admin管理员组

文章数量:1530908


2024年6月13日发(作者:)

华中科技大学计算机学院

《计算机网络安全》实验报告

实验名称 :

Nmap扫描器使用和分析

团队成员:

姓 名

班 级

学 号

贡献百分比

得 分

教师评语:

一. 环境(详细说明运行的操作系统,网络平台,机器的IP地址)

主机操作系统:Windows 7 Ultimate(关闭防火墙)

虚拟机环境:VMware Workstation 7.0+Windows XP Professional SP3(关闭防火墙)

主机虚拟IP:192.168.239.1

虚拟机IP:192.168.239.128

扫描软件:Zenmap 5.21版

截包工具:WireShark 1.3.1版

二. 实验目的

掌握主机、端口扫描的原理

掌握Nmap扫描器的使用

掌握Nmap进行远程OS检测的原理

三. 实验步骤及结果(包括主要流程和说明)

1. 安装Nmap

1)

进入/页面,下载最新的windows平台的nmap:

2)

安装过程截图略,全部选择默认选择即可。

2. 使用Nmap扫描主机

1)

TCP SYN scan:

扫描截图如图1所示:

图1

从图中可以看到,共扫描了192.168.239.128的1000个tcp端口,发现有990个关闭,并列出

了10个开放的端口。

我尝试打开了被扫描主机的windows自带的防火墙,扫描结果就变成了所有的1000个端口都

被过滤,无法扫描到开放的端口。

2)

TCP connect scan

扫描截图如图2所示:

扫描结果和TCP SYN scan相同,但是耗时却是TCP SYN scan的180多倍,用了4分多

钟才完成。原因大概是因为TCP connect scan是调用connect()函数来打开一个链接,效率较

低,而TCP SYN scan不必全部打开一个tcp连接,只是发出一个

TCP同

步包(SYN),然后等待

回应。如果对方返回SYN|ACK(响应)包就表示目标端口正在监听;如果返回RST数据包,就

表示目标端口没有监听程序;如果收到一个SYN|ACK包,源主机就会马上发出一个RST(复

位)数据包断开和目标主机的连接。

图2

3)

UDP scan:

扫描截图如图3所示:

扫描速度非常快,扫描1000个端口,发现了4个udp端口,但是其中有三个的状态是

open|filtered,filtered状态表示:防火墙、包过滤和其它的网络安全软件掩盖了这个端口,

禁止 nmap探测其是否打开。但是此时被探测主机的防火墙实际是关闭的,可能是nmap

无法判断这几个端口的状态。

图3

4)

SCTP INIT scan

所有扫描的42个端口都被过滤,原因不明。

图4

5)

TCP NULL, FIN, and Xmas scans

扫描截图如图5、6、7所示,依次为TCP NULL, FIN和 Xmas扫描:

图5

图6

图7

三个扫描的结果都是未发现开放的端口,略有不同的是,NULL扫描探测到端口的状态是open|filtered,

而另外两个扫描的结果都是closed。

6)

TCP ACK scan

扫描截图如图8所示:

图8

没有找到任何开放的端口,但是了解了ACK扫描的原理,就知道这也是正常的,因为这

种扫描是向特定的端口发送ACK包(使用随机的应答/序列号)。如果返回一个RST包,这

个端口就标记为unfiltered状态。如果什么都没有返回,或者返回一个不可达ICMP消

息,这个端口就归入filtered类。注意,nmap通常不输出unfiltered的端口,所以在

输出中通常不显示所有被探测的端口。这项高级的扫描方法通常用来穿过防火墙的规则

集。通常情况下,这有助于确定一个防火墙是功能比较完善的或者是一个简单的包过滤

程序,只是阻塞进入的SYN包。

我想, 这个扫描应该要结合wireshark来使用,分析返回的包。

7)

TCP Window scan

扫描截图如图9所示:

对滑动窗口的扫描:这项高级扫描技术非常类似于ACK扫描,除了它有时可以检测到处

于打开状态的端口。

因而扫描结果也就和ACK扫描一样了,未扫描到开放的端口

图9

8)

TCP Maimon scan

扫描结果如图10所示:

Maimon扫描是探测FIN/ACK,根据RFC793(TCP),一个RST包应该作为响应当端口是open

或者closed。

图10

9)

IP protocol scan

扫描截图如图11所示:

图11

IP协议扫描允许你判断目标主机支持哪些IP协议,从结果可以看到共扫描了256个端

口,发现被扫描主机支持4种IP协议,但是其中一个132状态为关闭。

10)

Custom TCP scan

图12

图13

图14

设置所有位的扫描截图如图12所示:

也可只设置某一位,比如设置SYN标志位,则扫描效果等同于SYN扫描,如图13所示:

除了指定需要的标志位,还可以指定一个TCP扫描类型(如-sA,-sF)。这些告诉nmap

怎么解释响应,例如,一个SYN扫描认为没有响应表明一个filtered端口,一个FIN扫描

为 open|filtered.

比如指定为FIN扫描,则扫描出的同样的状态都为open|filtered。如图14所示:

3. 深入了解Nmap OS指纹库的结构和含义

1)

准备工作

运行wireshark,打开主菜单的CaptureOption菜单,设置需要抓包的网卡为虚拟机的

网卡,其余全部默认,如图15所示:

图15

然后选择“Start”,wireshark即进入captrue状态,截获所有的主机与虚拟机之间的通信。

2)

在Nmap中执行OS Detection命令,结果如图16所示:

可以看出,Nmap成功的探测到了虚拟机的操作系统为Microsoft Windows XP SP2 or SP3

图16

此时,wireshark中也截获了所有的nmap发出的报文,如图17所示:

图17

最左端为截获的包的编号,我们看到总共截获了2137个报文,这么多报文当然很难一个

个的分析,我们主要要找出其中有用的部分。

3)

对照指纹库分析截获的报文

首先找到Nmap安装目录下的nmap-os-db文件,用记事本打开,看到里面有很多指

纹库,查找Windows XP SP3,本来以为只有一个,但是却搜索到了很多个,猜测可能原

因是只要符合其中任何一个就认为是Windows XP SP3吧。我们可以对照着截获的报文,

选取其中最接近的一个。

比如我们选择下面这个指纹库:

# Version 5.1 (Build .080413-2111 : Service Pack 3)

Fingerprint Microsoft Windows XP SP3

Class Microsoft | Windows | XP | general purpose

SEQ(SP=104-10E%GCD=1-6%ISR=107-111%TI=I%TS=0)

OPS(O1=M5B4NW0NNT00NNS%O2=M5B4NW0NNT00NNS%O3=M5B4NW0NNT00%O4=

M5B4NW0NNT00NNS%O5=M5B4NW0NNT00NNS%O6=M5B4NNT00NNS)

WIN(W1=7D78%W2=7D78%W3=7D78%W4=7D78%W5=7D78%W6=7D78)

ECN(R=Y%DF=Y%T=7B-85%TG=80%W=7D78%O=M5B4NW0NNS%CC=N%Q=)

T1(R=Y%DF=Y%T=7B-85%TG=80%S=O%A=S+%F=AS%RD=0%Q=)

T2(R=Y%DF=N%T=7B-85%TG=80%W=0%S=Z%A=S%F=AR%O=%RD=0%Q=)

T3(R=Y%DF=Y%T=7B-85%TG=80%W=7D78%S=O%A=S+%F=AS%O=M5B4NW0NNT00NNS

%RD=0%Q=)

T4(R=Y%DF=N%T=7B-85%TG=80%W=0%S=A%A=O%F=R%O=%RD=0%Q=)

T5(R=Y%DF=N%T=7B-85%TG=80%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)

T6(R=Y%DF=N%T=7B-85%TG=80%W=0%S=A|O%A=O%F=R%O=%RD=0%Q=)

T7(R=Y%DF=N%T=7B-85%TG=80%W=0%S=Z%A=O|S+%F=AR%O=%RD=0%Q=)

U1(DF=N%T=7B-85%TG=80%IPL=B0%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=

G)

IE(DFI=S%T=7B-85%TG=80%CD=Z)

接下来我们要弄清指纹库的含义:

a) SEQ test

SEQ test 是通过向被探测主机的一个开放的端口连续发送6个SYN报文,然后收集

其返回的SYN+ACK报文得到的。通过分析其返回报文的初始序列号(ISN)获取

被扫描主机的特征。

本实验中,nmap找到了smtp这个开放的端口,截获的报文如图18所示:

图18

图中用黑色标记的部分即为nmap发出的6个SYN报文,紧跟其后的就是被探测主

机返回的SYN+ACK报文。

其初始序列号分别如图19所示:

图19

nmap就根据这6个初始序列号分别算出

 SP:序列号的可预测指数,是对预测序列号难度的一个大概的估计值

 GCD:6个序列号差值的最大公约数

 ISR:序列号的平均增长率

(以上三个值的计算都比较复杂,这里就不进行验证了)

 TI:这是一个对返回报文的IP的ID字段进行分析的测试,对于不同的情况TI取

不同的值,这里TI=I是说明6个ID号之间的差别没有超过10,分析截获的报文

印证了这一结果,如图20所示:

图20

这里只截了第一个报文和最后一个报文的图,其ID号都是连续的,从31672到

31677

SS:这个测试的结果建立在6个TCP返回报文和两个ICMP返回报文的基础上。

这里SS=S是指ICMP返回报文的IP ID共享TCP返回报文的IP ID,即ICMP返

回报文的IP ID值是紧跟着前一个TCP返回报文的值,分析截获的报文印证了这

一结果,如图21所示:

图21

第一个窗口是最后一个TCP返回报文的截图,后面两个窗口是两个ICMP返回报

文的截图,可以清晰的看到其值是加1递增的。

 TS:该测试是分析6个TCP返回报文的TCP timestamp选项,检查TSval的值。

这里TS=0是指每个报文的TSval的值都是0,分析截获的报文印证了这一结果,

如图22所示:

图22

b) OPS test

该测试仍然是通过向被探测主机的一个开放的端口连续发送6个SYN报文,然后收

集分析其返回的SYN+ACK报文。该测试主要记录TCP的option字段,例如

O1=M5B4NW0NNT00NNS,M代表MSS,5B4是十六进制数,表示MSS的大小,

换算成十进制就是1460,N表示NOP,W表示window,0表示窗口大小,NN表示

两个NOP,T表示timestamp,两个0表示TSval和TSecr的值都为0,又两个NN

也是表示两个NOP,最后的S表示SACK permitted。

其O1~O6分别对应6个返回报文,可以看到,指纹库里O1~O6只有O3、O6与其

他几项不同,其余都是M5B4NW0NNT00NNS。分析截获的报文,印证了这一结果,

截图如图23所示:

图23

可以看到O3对应的是M5B4NW0NNT00,O6对应的是M5B4NNT00NNS,其余的都

是M5B4NW0NNT00NNS。

c) WIN test

该测试就是简单的记录6个TCP返回报文的窗口大小。从W1~W6分别对应6个报

文,这里W1~W6的值都是0xFFFF,换算成十进制就是65535。分析截获的报文,

印证了这一结果,截图如图24所示。可以看到Window Size字段的值都是65535

图24

d) ECN test

该测试向目标主机发送一个设置了CWR和ECN字段的SYN报文,然后记录

其返回报文的各个字段的值,这里

ECN(R=Y%DF=Y%T=7B-85%TG=80%W=FFFF%O=M5ACNW0NNS%CC=N%Q=)

R=Y表示有回应,DF=Y表示设置了Don’t fragment字段,T=7B-85,表示IP报文

的TTL值介于0x7B和0x85之间即123到133之间,TG=80是Nmap猜测的TTL

的值为128,W=FFFF表示window size的大小是65535,O表示option字段的状态

(前面已经解释过),CC=N表示ECE和CWR位都没有设置。Q表示的是TCP

miscellaneous quirks,不知如何翻译,Q为空表示“no quirks are present”,查看返回

的报文,完全符合以上描述,如图25所示:

图25(1)

图25(2)

e)

T1 test

该测试的结果由SEQ test发出的6个TCP报文的返回的第一个报文决定。

图26

即红色箭头所指向的那一行。

这里:

T1(R=Y%DF=Y%T=7B-85%TG=80%S=O%A=S+%F=AS%RD=0%Q=)

其中与ECN相同的字段不再解释,

S=O表示返回报文的ISN与发送的报文的ACK的值没有关联,由图27划红线部分

可以看出确实如此:

A=S+表示返回报文的ACK值是发送的TCP报文的ISN值加1得到的,由图27划

绿线部分可以看出,0x7ca6d6af正好比0x7ca6d6ae大1:

F=AS表示设置了ACK和SYN标志位,由图27划蓝线部分可以看出:

RD=0表示校验和字段无效,由图27划黄线部分可以看出:

图27

f)

T2~T7 test

这几个测试都是根据分别发送1个特殊的SYN报文,分析其返回报文得到结果。

T2是向一个开放端口发送一个未设置任何标志位的TCP报文

T3是向一个开放端口发送一个设置了SYN|FIN|URG|PSH标志位的TCP报文

T4是向一个开放端口发送一个ACK报文

T5是向一个关闭的端口发送一个SYN报文

T6是向一个关闭的端口发送一个ACK报文

T7是向一个关闭的端口发送一个设置了FIN|PSH|URG 标志位的TCP报文

这几个报文对应的截图如图28所示:

图28

其各个字段的设置都与ECN test和T1 test类似,这里不再一一查看。

g)

U1 test

该测试向一个关闭的端口发送一个UDP报文,由图29可以看到,返回了一个ICMP

的Destination Unreachable报文:

这里,

U1(DF=N%T=7B-85%TG=80%IPL=B0%UN=0%RIPL=G%RID=G%RIPCK=G%RUC

K=G%RUD=G)

DF,T,TG字段不再解释。

 IPL=B0表示IP包的总长度是0xB0,换算成十进制是176,由图29(3)红线部分可

看出。

 UN=0表示一个Destination Unreachable的ICMP报文的头部的后四个字节为0,由图

29(3)中画橙线部分可看出。

 RIPL=G表示返回的ICMP报文的IP total length值为328,由图29(3)中画绿线部分

可看出。

 RID=G表示返回的ICMP报文的IP ID值为0x1042,,由图29(3)中画浅绿线部分可

看出。

 RIPCK=G表示返回的ICMP报文的IP头部的校验和字段与之前发送的UDP包的IP

头部的校验和不同,由图29(1)中画红线部分可看出。

 RUCK=G表示返回的ICMP包中封装的IP包的校验和与之前发送的UDP包的IP头部

的校验和一样,由图29(2)中画红线部分可看出。

 RUD=G表示返回的ICMP中封装的IP包有效载荷是之前UDP包中的多个载荷‘C’。

由图29(3)中画黑线部分可看出

图29(1)

图29(2)

图29(3)

h)

IE test

该测试发送两个ICMP 的ping报文,分析其返回的报文,如图30所示:

图30

这里,IE(DFI=S%T=7B-85%TG=80%CD=Z)

DF,T,TG字段不再解释

CD=Z表示两个ICMP Echo的的Code字段都为0,如

图31

所示:

图31

四. 实验中的问题及心得

实验中的问题:

 配置虚拟机与主机之间的通信,最开始禁用了虚拟网卡,主机与虚拟机之间无法ping

 最开始没有关闭虚拟机和主机的防火墙,扫描的结果都是端口被过滤。

 最开始看到wireshark中截获的2000多个报文,完全不知道从何下手,后来经过分析,

排除绝大部分,只剩下几十个有用的。

 对于TCP和IP报文头部的各个字段不熟悉,导致看官方的指导文档时思维比较混乱,

后来找到了了TCP、IP还有ICMP报文头部的详细结构图,才弄清楚。

实验心得:

 分析指纹库的时候,最开始在网上找了很多资料,都没有很详细的,后来发现Nmap

的官方指导文档是最权威最详细的,虽然文档是英文的,但是还是比较容易看懂的。

 通过这个实验,熟悉了TCP连接的建立过程,以及报文头部各个字段的作用

分析指纹库的过程很枯燥,是一个考验耐心的工作。

好久没有这么认真的做一个实验,很有成就感!


本文标签: 报文扫描端口返回分析